성공적인 AI 챗봇 개발을 위한 실전 가이드
컨텐츠 정보
- 조회 815
본문
AI 스타트업 캠프파이어(Campfire)는 지난 10월 12일, 스팀과 모바일 플랫폼에서 소비자용 AI 채팅 기반 게임인 코지 프렌드(Cozy Friends)를 출시했다. AI 에이전트 NPC가 등장하는 ‘동물의 숲’이나 ‘심즈’를 상상해 보라. 출시 첫 30일 동안 사용자들은 AI 에이전트와 170만 건이 넘는 메시지를 주고받았다. 이는 회사가 예상했던 성과를 뛰어넘은 결과로, 캠프파이어가 대화형 AI 제품을 성공적으로 개발했다는 것을 입증하는 지표였다.
코지 프렌드를 완성하기까지는 1년이라는 시간이 걸렸다. 수많은 도구를 만들어야 했고, 그중 일부는 두 번이나 다시 설계해야 했으며, 여러 난관에 부딪히며 몇 달간 시행착오를 겪어야 했다. 그 결과 마침내 괜찮은 수준의 AI 채팅 제품을 선보일 수 있었다.
캠프파이어는 더 나은 AI 채팅 제품을 더 빠르게 개발하고, 다른 이들이 비슷한 고통을 겪지 않도록 돕고자 한다. 이를 위해 그동안의 경험에서 얻은 모든 교훈을 공개하고, 내부적으로 사용했던 AI 도구를 스프라이트(Sprites)라는 제품으로 출시할 예정이다. 스프라이트는 대화형 AI 에이전트를 구축, 최적화, 확장하기 위한 올인원 도구다.
여기서는 필자가 AI 채팅 제품을 개발하면서 배운 가장 중요한 7가지 교훈을 소개한다. 가장 핵심적인 메시지는 AI 채팅의 출력을 단순히 하나의 LLM에 의존하는 래퍼(wrapper)로 생각하지 말고, 복잡한 함수로 간주해야 한다는 점이다. 이를 염두에 두고 다음 7가지 교훈을 살펴보자.
시스템 프롬프트는 사용자와 애플리케이션 상태의 함수다
시스템 프롬프트는 리액트(React) 앱처럼 사용자 의도와 데이터에 따라 진화해야 하며, 정적인 HTML 웹 페이지처럼 고정되어 있어서는 안 된다. 시스템 프롬프트를 애플리케이션 상태의 함수로 생각해야 하며, 이는 사용자 여정의 진행 상황에 따라 동적으로 변화하고 발전해야 한다.
시스템 프롬프트는 단순히 두세 개의 정적 프롬프트로 구성된 조각별 함수(piece-wise function)가 아니다. 대화의 전개, 생각의 사슬(chain-of-thought) 워크플로우에서 생성된 메타데이터, 요약 정보, 사용자 개인 데이터 등을 기반으로 프롬프트를 수정하거나 완전히 교체해야 한다. 특정 사용자 상태에 따라 일부 내용을 포함하거나 제외함으로써 더 나은 결과를 도출할 수 있다. 이와 관련해 캐릭터닷에이아이(Character.ai)의 프롬프트 설계에 관한 블로그 게시물이 유용한 자료가 될 수 있다.
간단히 말해, 프롬프트는 사용자 경험을 제어하기 위해 유지되어야 하는 동적인 명령 집합으로 생각해야 한다. 사용자 여정의 시작 단계에 고정되는 일회성 명령 집합이 아니라, 애플리케이션의 특정 화면에서 사용자에게 표시되는 UI 요소처럼 생각해야 한다.
사용자 여정 초기에는 결정론적 결과를 선택하라
대부분의 온라인 제품에서는 첫 사용자 경험, 즉 “제로 데이(Day Zero)” 경험을 세밀하게 제어한 다음, 사용자가 마법 같은 흰 도화지에서 자유롭게 탐색할 수 있도록 한다. AI 채팅 제품에서도 이와 유사한 철학을 유지하면서, 특히 초기 며칠 동안에는 사용자에게 결정론적(deterministic) 채팅 결과를 제공하는 것이 바람직하다. 하지만 그다음에는 어떻게 해야 할까?
AI가 처음 다섯 번의 메시지 안에 특정 주제를 언급하거나 제안을 해야 할까? 아니면 사용자가 두 번째 날에 특정 행동을 하도록 유도해야 할까? 사용자 참여를 유지하기 위해 AI가 적절한 시점에 대화 주제를 변경해야 할까? 활성화 순간(activation moment)을 위해 대화를 점진적으로 조율해야 할까? 온보딩 과정에서 채팅 형식을 활용해 사용자 정보를 수집하고 경험을 개인화해야 할까?
만약 소비자용 제품을 개발하고 있다면, 위 질문에 대한 답은 대부분 “예”일 것이다. AI 채팅 제품도 초기 사용자 경험에서 명확하고 의도적으로 설계된 결과를 통해 사용자의 참여를 끌어내고 지속적인 관심을 유지하도록 설계되어야 한다.
모델 블렌딩을 활용하라
항상 동일한 모델로 메시지를 전달하는 대신, 서로 다른 능력을 갖춘 모델 2~6종류를 병렬적으로 활용하면 결과가 개선된다. 예를 들어 모델 A는 문장 작성과 롤플레잉에 강하고, 모델 B는 추론에 뛰어난 경우를 가정해 보자. 메시지를 A와 B 모델에 번갈아 전달하는 방식으로 라우팅하면 여러 턴에 걸친 대화의 최종 결과가 훨씬 더 좋아진다.
이 방법은 고급 프롬프트를 위한 분할 테스트(split test)를 실행하는 것 외에, 가장 간단하면서도 큰 효과를 낼 수 있는 접근 방식이다. 하지만 적절한 모델을 선택하는 것이 핵심이다. 각 모델의 강점을 이해하고 상황에 맞게 적용해야 최적의 성과를 얻을 수 있다.
스크립트 응답을 사용하라
LLM이 아무리 놀라운 성능을 보이더라도, 이를 마치 “마법의 대화 상자”처럼 사용하는 것보다는 통제된 방식으로 채팅에 적용하는 것이 더 효과적이다. 예를 들어 작은 모델을 사용해 사용자 입력에 대한 의미를 추론하고, 이를 사전에 작성된 응답으로 연결하면 된다. 이렇게 하면 실제로 더 나은 사용자 경험을 제공하면서도 비용을 절약할 수 있다.
간단한 의사 결정 트리와 약간의 의미론적 추론을 결합해 사용자 여정에서 흔히 발생하는 상황을 처리하도록 설계하면, 모든 응답을 LLM 추론에 의존하는 방식보다 더 우수한 제품을 만들 수 있다.
대화의 시작에서 ‘놀라움’을 끌어내라
캠프파이어는 이전 대화 요약, 저장된 기억, 앱 내 최근 행동, 그리고 몇 가지 무작위 요소를 활용해 AI 캐릭터가 좋은 대화를 시작할 수 있도록 핵심 대화 시스템과는 별도의 추론 시스템을 구축했다. 이런 접근이 없다면 AI는 반복적으로 “안녕하세요! 오늘은 무엇을 도와드릴까요?”와 같은 진부한 인사를 생성할 가능성이 높다.
AI 간의 대화는 품질이 빠르게 저하된다
사용자 테스트 과정에서 빈 캔버스 문제(blank canvas problem)가 반복적으로 나타났다. 사용자가 무엇을 입력해야 할지 몰라 대화를 시작하지 못하는 상황이다. 이를 해결하기 위해 캠프파이어는 사용자의 목소리로 작성된 3가지 AI 생성 메시지를 제안하는 “매직 완드(magic wand)” 같은 기능을 추가했다. 이 기능은 초기 사용자의 불편함을 단기적으로 해소하는 데는 도움이 됐으나 매직 완드 사용자가 훨씬 더 빨리 이탈하는 결과를 보였다. 대화 기록을 분석한 결과, AI와 AI 간 대화는 몇 번의 턴 안에 무의미한 루프로 빠져드는 경향이 있었다.
AI 출력 품질을 평가할 명확한 기준을 설정하라
AI 챗봇에 몇 가지 메시지를 입력해 테스트한 뒤 결과가 충분히 괜찮아 보인다고 판단하는가? 그것만으로는 충분하지 않다. AI의 산출물은 100회 이상의 대화, 여러 세션, 다양한 사용자 페르소나를 대상으로 한 후에도 일관성을 보여야 한다.
이를 위해 다양한 변형을 시도하고, 사용자 피드백을 수집할 명확한 피드백 루프를 구축해야 한다. 가령 라이커트 점수(Likert score)나 단순 ELO 점수를 사용해 여러 변형 중 어떤 대화가 사용자에게 더 흥미롭거나 유용하게 느껴지는지 판단할 수 있다.
캠프파이어는 일반적으로 사용되는 LLM을 사용해 출력 품질을 평가하는 방법을 시도했다. “이 대화가 얼마나 재미있었는지 1에서 5까지 평가하라”라는 프롬프트를 GPT-4o로 실행해 심판 역할을 맡겼다. 그러나 이 방식은 사용자 피드백과 일치하지 않는 부정확한 결과를 초래했다.
단순히 “시스템 프롬프트를 다듬고 결과가 괜찮아 보인다”라고 넘어가던 시대는 끝났다. 당연하게 들릴지 몰라도, AI 제품이라면 AI 자체가 훌륭해야 한다. 이것이 성공을 좌우하는 가장 중요한 요소가 될 것이다. AI가 신기술로 여겨지던 시대는 지났다. 이제는 사용자에게 가치를 제공하고 만족을 끌어내기 위해 명확한 프레임워크와 수많은 실험이 필요하다. 행운을 빈다!
*Siamak Freydoonnejad는 Campfire의 공동 창립자다.
dl-itworldkorea@foundryco.com
관련자료
-
링크
-
이전
-
다음






