Spotify가 광고 미디어 플래닝의 복잡성을 Google ADK 기반 멀티에이전트 아키텍처로 푼 사례다. 자연어 입력을 받아 최적화된 광고 플랜을 수초 만에 만들어 기존 15~30분 수동 작업을 대체한다.
핵심 포인트- Direct, Self-Serve, Programmatic 세 구매 채널이 공유 백엔드 위에서 각자 워크플로를 두어 예산 배분·인벤토리 선택 같은 결정이 여러 곳에 중복 구현돼 있었다.
- 광고 로직이 ML 기반이라 동적이고 조합 복잡성이 커 거대 규칙 엔진이나 채널별 하드코딩으로는 감당이 안 됐다.
- 해결책은 목표 해석·오디언스 추출·예산 파싱 등 단일 책임 에이전트로 분해하고 병렬 실행하며 기존 Ads API를 도구로 취급하는 멀티에이전트 구조다.
- 미디어 플랜 생성이 15~30분에서 5~10초로, 필요한 입력이 20개 넘는 폼 필드에서 자연어 1~3문장으로 줄었다.
상세 정리- 배경: 세 채널이 같은 결정을 서로 다르게 구현해 워크플로가 파편화됐고 목표를 도구 호출 시퀀스로 바꾸는 결정 계층이 없었다.
- 사용자 고통: 폼 필드 20개 이상, 최적화 지침 부재, 접근법 변경 시 처음부터 다시 시작, 과거 성능 데이터 미접근이 문제였다.
- 기각안: 표준 서비스 설계는 파편화를 못 풀고, 거대 규칙 엔진은 확률적·동적 광고 로직에 안 맞으며, 채널별 하드코딩은 중복 기술 부채를 낳는다.
- 스택: Google ADK 0.2.0으로 오케스트레이션·세션·도구 통합을, Vertex AI Gemini 2.5 Pro로 자연어 처리를, gRPC로 통신을, PostgreSQL과 메모리 캐시로 과거 성능 데이터를, Apollo로 서비스 라이프사이클을 담당한다.
- RouterAgent: 수신 메시지를 분석해 이미 있는 정보를 판단하고 불필요한 LLM 호출을 막아 조건부로 에이전트를 실행한다.
- 해결 에이전트: GoalResolver는 의도를 REACH나 CLICKS 같은 목표로, AudienceResolver는 지역·연령·성별과 관심사 분류를, Budget은 5k나 €10,000 같은 형식을 마이크로 단위로, Schedule은 next month 같은 상대 날짜를 파싱한다.
- MediaPlannerAgent: 과거 중앙값 대비 CPM·CPC·CPI 최소화, 100%에 가까운 전달률 우선, 예산·기간·타게팅 매칭, 포맷과 목표 다양화를 규칙으로 적용한다.
- 예산 스케일링: €0~1,000은 1개, €1,000~5,000은 2개, €5,000~15,000은 3개, €15,000 이상은 4~5개를 권장한다.
- 환각 억제: Google ADK FunctionTool로 지역 타깃·광고 카테고리·성능 데이터에 실제 접근하게 해 출력을 현실에 고정한다.
- 프롬프트 규율: 출력 형식을 명시하고 예제를 넣으며 프롬프트와 파싱 레이어 양쪽에 가드레일을 두고 프롬프트를 코드처럼 버전 관리·테스트·반복한다.
- 트레이드오프: 멀티에이전트의 복잡성을 병렬성·유지보수성과 맞바꾸고 메모리 캐시로 지연을 줄이며 현재는 단순성 때문에 동기 응답을 쓴다.
- 향후: SSE 스트리밍 응답, 다중 턴 개선, AI 권장안의 A/B 자동 비교, 광고 용어 특화 모델 파인튜닝을 계획한다.
왜 읽나LLM 멀티에이전트로 복잡한 도메인 워크플로를 자동화하려는 백엔드·ML 엔지니어에게 에이전트 경계 설계와 도구 기반 환각 억제 패턴을 준다.