Google의 Agent Development Kit (ADK)는 작업을 관리하는 두 가지 주요 방식을 제공합니다.
동적 멀티 에이전트 라우팅 (Dynamic Multi-Agent Routing)
라우팅 모델에서는 중앙 코디네이터가 사용자의 요청을 수신하여 전문 에이전트(specialist agents)에게 전달합니다. 코디네이터는 어떤 전문가가 작업을 수행할지 결정하고, 전문가는 자신의 작업을 수행한 뒤 제어권을 다시 상위(parent)로 반환합니다.
- 작동 방식 – 코디네이터가 전문가를 선택하고 작업을 전달한 다음, 다음 단계로 넘어가기 전에 응답을 기다립니다.
- 장점 – 유연성이 뛰어납니다. LLM이 런타임에 경로를 선택하므로, 흐름을 다시 작성하지 않고도 새롭거나 예상치 못한 입력에 시스템이 적응할 수 있습니다.
- 단점 – 단계(hop)를 거칠 때마다 네트워크 및 처리 오버헤드가 추가되므로, 직선형 파이프라인에 비해 지연 시간(latency)이 증가합니다.
순차적 워크플로 루프 (Sequential Workflow Loops)
루프 모델은 코디네이터를 단일 LoopAgent로 대체합니다. 이 에이전트는 미리 정해진 단계의 시퀀스를 따라 이동하며 가변적인 세션 상태(mutable session state)를 공유합니다.
- 작동 방식 – 에이전트들이 공유 키를 읽고 업데이트한 뒤, 시퀀스가 끝날 때까지 다음 단계로 제어권을 넘깁니다.
- 장점 – 예측 가능성입니다. 순서가 절대 바뀌지 않으므로 디버깅과 성능 튜닝이 간단합니다.
- 단점 – 경직성입니다. 고정된 순서에서 벗어나야 할 경우 루프를 다시 설계해야 합니다.
실습 테스트: 수학식 파서 (Math Expression Parser)
패턴이 실제로 어떻게 작동하는지 확인하기 위해, adder, subtracter, multiplier, divider라는 네 명의 전문 에이전트를 사용하여 산술식을 계산하는 간단한 파서를 구축했습니다.
워크플로 루프를 통한 교훈
- 무한 루프 방지 – 각 에이전트가 공유 상태를 업데이트한 직후 텍스트를 출력하고 즉시 자신의 차례를 종료하도록 지시했습니다. 이러한 방어 기제가 없다면 루프가 무한히 반복될 수 있습니다.
- 수학적 논리 유지 – adder에게 연산 순서를 준수하도록 명시적인 지침을 주어, 뺄셈 규칙을 어기지 않도록 했습니다.
- 조용한 종료 방지 – 에이전트가 종료 도구(exit tool)를 호출하기 전에 최종 결과를 출력하도록 강제하여, 사용자가 갑작스러운 종료 대신 결과를 확인할 수 있게 했습니다.
에러 처리
divider 전문 에이전트 앞에 0으로 나누기 방지(zero-division guard) 기능을 추가했습니다. 이 가드는 제수(divisor)를 먼저 확인하며, 만약 0이라면 프로세스를 중단시켜 시스템 전체가 런타임 예외(runtime exception)를 겪지 않도록 합니다.
어떤 패턴이 귀하의 프로젝트에 적합할까요?
- 멀티 에이전트 라우팅 선택: 작업이 실시간으로 진화하거나, 입력값이 매우 다양하거나, 런타임에 LLM이 최적의 전문가를 결정해야 하는 경우에 적합합니다. 지연 시간이 길어진다는 트레이드오프가 있지만, 코드 변경 없이도 예상치 못한 시나리오를 처리할 수 있습니다.
- 워크플로 루프 선택: 데이터 정제, 변환, 집계와 같이 각 단계가 엄격한 순서에 따라 수행되어야 하는 잘 정의된 파이프라인이 있는 경우에 적합합니다. 지연 시간이 낮고 디버깅이 쉽다는 장점이 있지만, 동적으로 분기할 수 없다는 단점이 있습니다.
