Caller/Executor 패턴으로 멀티 에이전트 구성하기
2026, Jul 16
멀티 에이전트 시스템을 만들면서 정리한 Caller/Executor 패턴 구조를 기록해둔다. 사용자 요청을 받는 에이전트(Caller)와 실제 작업을 수행하는 전문 에이전트(Executor)를 분리하고, 둘 사이를 MCP(Model Context Protocol)로 연결하는 구성이다.
구조 개요
역할은 둘로 나뉜다.
- Caller (Concierge): 사용자의 요청을 받고, 필요하면 전문 에이전트에게 위임하는 관문 역할
- Executor (전문 에이전트): 특정 도메인 작업(예: 수학 문제 풀이)을 실제로 처리하는 역할
핵심은 Caller가 Executor를 직접 HTTP로 호출하지 않는다는 점이다. Executor는 Foundry Toolbox를 통해 하나의 tool로 노출되고, Caller의 LLM이 질문을 보고 그 tool을 쓸지 말지 판단한다.
- LLM은 “어떤 tool을 쓸지”만 결정한다.
- 에이전트 런타임이 그 tool을 실제로 실행한다.
- tool 호출은 Toolbox/MCP 경로를 통해 Executor로 전달된다.
Caller 초기화 흐름
Caller 진입점(main())에서 하는 일은 크게 세 가지다: tool 로드 → 에이전트 생성 → 서버 실행.
| 순서 | 함수/객체 | 역할 |
|---|---|---|
| 1 | main() |
진입점 |
| 2 | _load_toolbox_tools() |
Toolbox에서 tool 로드 |
| 3 | DefaultAzureCredential() |
Azure 인증 객체 생성 |
| 4 | get_bearer_token_provider() |
토큰 공급자 생성 |
| 5 | _ToolboxAuth |
매 요청마다 최신 Bearer 토큰 주입 |
| 6 | MultiServerMCPClient(...) |
Toolbox MCP 연결 |
| 7 | client.get_tools() |
tool 목록 가져오기 |
| 8 | _build_chat_model() |
Azure AI Foundry LLM 모델 객체 생성 |
| 9 | create_agent(...) |
LangGraph 에이전트 생성 |
| 10 | ResponsesHostServer(graph).run(...) |
서버 실행 |
인증 처리가 눈여겨볼 부분인데, 토큰이 만료될 수 있으므로 고정 토큰을 쓰지 않고 _ToolboxAuth 같은 인증 객체가 매 요청마다 최신 Bearer 토큰을 받아 주입하는 구조로 만든다.
런타임 요청 처리 흐름
사용자가 질문을 보내면 다음 순서로 동작한다.
- 요청이 서버(
ResponsesHostServer)에 들어옴 - 에이전트(graph)가 요청을 처리
- LLM이 질문을 보고 tool 사용 여부를 판단
- 필요하면 전문 에이전트 tool(예:
math_expert)을 선택 - tool 호출이 Toolbox/MCP 경로를 통해 Executor로 전달
- Executor가 답변을 생성해 반환
- Caller가 결과를 정리해 최종 답변을 사용자에게 반환
flowchart TD
A[사용자 요청] --> B[ResponsesHostServer]
B --> C[LangGraph Agent]
C --> D[LLM 모델]
C --> E[Tool 목록]
E --> F[math_expert tool]
F --> G[Toolbox MCP Endpoint]
G --> H[Executor Agent]
H --> I[전문 답변 결과]
I --> F
F --> C
C --> J[최종 응답]
J --> K[사용자에게 반환]
이 구조의 장점
- 역할 분리: Caller는 라우팅에만 집중하고, 도메인 로직은 Executor에 격리된다. Executor를 추가해도 Caller 코드는 그대로다.
- 표준 프로토콜: 에이전트 간 연결이 MCP라는 표준 경로를 타므로, Executor가 어떤 프레임워크로 만들어졌는지 Caller가 알 필요가 없다.
- LLM의 판단 활용: 어떤 요청을 위임할지 하드코딩하지 않고 LLM의 tool 선택에 맡긴다. tool의 이름과 설명(description)만 잘 써주면 된다.
핵심 정리
- LLM은 “어떤 tool을 쓸지” 결정한다.
- 런타임이 그 tool을 실제로 실행한다.
- tool은 Toolbox/MCP를 거쳐 Executor로 연결된다.
- Executor가 실제 전문 답변을 생성하고, Caller가 정리해 최종 응답을 만든다.
참고
관련글 목록
- Prompt Caching 실전 가이드 — 원리·프롬프트 설계·프로바이더별 차이·운영 팁
- RAG & AI 에이전트 주간 연구 동향 (2026-07-27 ~ 08-02)
- 오케스트레이션이란 무엇인가 — 루프에서 그래프로, 에이전트 협업의 구조 이해하기
- 시맨틱 하이라이트란? — RAG 초보자를 위한 5분 요약
- RAG의 숨은 병목 — 시맨틱 하이라이트(의미 강조)로 검색과 설명의 불일치 해결
- 에이전트는 어떻게 '배우고' 고치는가 — 기억·스킬·피드백 루프의 실제 구조
- Hermes 파이프라인에 OKF 지식 번들 올리기
- Hermes Agent 설치부터 설정까지 - Windows에서 시작하기
- 오픈소스 가드레일 모델과 온프레미스 에이전트 파이프라인 구성
- 구글 OKF(Open Knowledge Format)는 RAG를 대체하나?
- Claude Code로 제안서 작성 파이프라인 만들기
- RAG & AI 에이전트 주간 연구 동향 (2026-07-12 ~ 07-19)
- 나디르 위성영상 캡셔닝을 위한 오픈웨이트 멀티모달 모델 비교
- 위성 영상 처리: 멀티모달 LLM vs 이미지 임베딩 모델
- Caller/Executor 패턴으로 멀티 에이전트 구성하기
- OpenRouter 무료 모델을 API로 사용하기
- PaperBanana - 문장으로 아키텍처 다이어그램 그리기
- AI TOOLS