
하나의 에이전트에서 세 개로: 범용 ChatClient를 전문화된 AI 에이전트로 분리하기
요약
단일 ChatClient에 모든 기능을 통합하는 대신, 전문화된 여러 AI 에이전트로 분리하여 성능을 높이는 전략을 제안합니다. 컨텍스트 공유로 인한 어텐션 낭비와 프롬프트 모순 문제를 해결하는 방법을 다룹니다.
핵심 포인트
- 단일 에이전트의 어텐션 토큰 낭비 및 프롬프트 모순 문제 지적
- 공유된 컨텍스트가 모델의 집중력을 저하시키는 원인임을 설명
- 전문 분야별로 에이전트를 분리하여 성능을 극대화하는 구조 제안
- 라우팅 시스템을 통해 적절한 전문 에이전트로 요청을 전달하는 방식
AI 어시스턴트에게 모든 일을 맡기는 대신 단 하나의 일만 맡기는 것이 왜 모든 작업에서 성능을 극적으로 향상시키는지에 대하여.
하나의 모델. 모든 질문. 무엇이 잘못될 수 있을까요?
AI 어시스턴트를 구축하기 시작할 때, 자연스러운 움직임은 간단합니다. 하나의 ChatClient를 실행하고, 앱이 수행하는 모든 것을 포괄하는 시스템 프롬프트 (system prompt)를 작성하며, 모든 MCP 도구 (tools)를 연결한 뒤, 사용자가 던지는 어떤 질문이든 처리하도록 내버려 두는 것입니다.
처음에는 잘 작동합니다. 하지만 제품이 성장함에 따라 균열이 나타나기 시작합니다.
시스템이 성장함에 따라 세 가지 문제가 발생합니다.
첫째, 모델은 현재 질문에는 절대 호출하지 않을 도구들을 처리하는 데 **어텐션 토큰 (attention tokens)**을 낭비합니다.
둘째, 시스템 프롬프트가 모든 도메인 — FAQ 정책, 매물 검색 필터, 예약 규칙 등 — 을 포괄하기 위해 확장되면서 스스로 모순되기 시작합니다.
셋째, 아마도 가장 교묘한 문제일 것입니다. 리스본의 방 3개짜리 아파트를 막 검색하던 고객이 갑자기 예약 취소에 대해 묻는데, 모델의 단기 기억 (short-term memory)은 여전히 매물 데이터로 가득 차 있는 상황입니다.
핵심 문제: 공유된 컨텍스트 (context)는 집중력의 저하를 의미합니다. 모델은 전달받은 내용이 관련이 있든 없든, 모든 것에 주의력을 균등하게 분산시킵니다.
단일 구조(Monolith)가 아닌 기업처럼 생각하세요
부동산 중개소에 전화를 걸었는데, 단 한 명의 접수원이 모든 전화를 받고, 모든 주제를 다루며, 모든 메모를 동일한 수첩에 적는 상황을 상상해 보십시오. 그들은 매우 바쁘고, 어떤 통화자에게 무엇을 말했는지 자주 혼동하며, 매물에 대해 물었을 때 가끔 FAQ 답변을 내놓기도 합니다.
이제 그 중개소에 세 개의 전용 데스크가 있고, 각 데스크마다 고유의 전문가, 고유의 파일 캐비닛, 그리고 고유의 캘린더가 있다고 상상해 보십시오.

전화를 걸면 접수원이 귀하의 요청을 듣고 적절한 데스크로 **연결(routes you)**해 줍니다. 귀하가 연결된 전문가가 관련 없는 정보들을 머릿속에서 걸러낼 필요가 없기 때문에, 더 빠르고 정확한 답변을 얻을 수 있습니다.
이것이 바로 우리가 구축하고 있는 아키텍처 (Architecture)입니다. 각 AI 에이전트 (AI agent)는 제한된 범위 (bounded scope)를 가진 전문가입니다. 라우터 (Router)는 우리의 ChatService입니다.
실제로 무엇이 변하는가 — 이전 vs 이후
Spring AI · OpenAI · MCP · PGVector · 도메인 주도 설계 (Domain-Driven Design)로 구축됨
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기
