22장. 오케스트레이션
왜 오케스트레이션이 필요한가 — 전문가는 셋인데 지휘할 자리가 비어 있다
한 줄 요약
21장에서 세 개의 전문 에이전트를 만들었습니다. 이제 고객의 문의를 보고 어떤 에이전트에 무엇을 맡길지 결정하고, 처리 결과를 하나의 답변으로 정리할 역할이 필요합니다. 이번 장에서는 이 역할을 담당하는 Supervisor(관리자) 를 구현합니다. Supervisor는 문의에 필요한 전문 에이전트를 호출해 정보 조회, 정책 확인, 요청 처리가 하나의 상담 흐름으로 이어지도록 조율합니다.
1. 지금 가진 것
21장이 끝난 시점의 haru_agents.py에는 에이전트가 셋 있습니다.
| 에이전트 | 가진 도구 | 맡은 일 |
|---|---|---|
| 주문조회 | 주문 목록, 주문 상태, 멤버십 등급, 상품 검색, 재고 확인 | 데이터에서 확인한 사실을 보고한다 (읽기) |
| 정책안내 | 정책 문서 검색 | 조항을 근거로 정책을 설명한다 (읽기) |
| 요청처리 | 배송지 변경, 교환 접수, 환불·주문 취소 승인 요청, 처리 내역 조회, 티켓 등록 | 요청을 실제로 처리하고, 처리할 수 없는 일은 상담원에게 넘긴다 (쓰기) |
각자는 자기 일을 잘합니다. 문제는 고객이 에이전트를 골라서 말을 걸지 않는다는 점입니다.
2. 문의 하나로 따져 보면
고객이 이렇게 말합니다.
"지난주에 산 운동화가 불량이에요. 검정 270으로 교환 접수해 주세요."
이 한 문장을 처리하려면 세 가지가 필요합니다.
- "지난주에 산 운동화"가 어느 주문인지 주문 데이터에서 찾는다 — 주문조회 에이전트의 일
- 불량 교환의 배송비 규정을 정책 문서에서 찾는다 — 정책안내 에이전트의 일
- 찾은 주문번호로 교환을 접수한다 — 요청처리 에이전트의 일
21장의 실습문제에서 이 셋을 손으로 이어 봤습니다. 주문조회 에이전트의 보고를 받아 변수에 담고, 그 보고를 요청문에 넣어 요청처리 에이전트에게 넘기는 코드를 우리가 직접 적었습니다. 문의마다 그런 코드를 적을 수는 없습니다. 고객이 무엇을 물을지 미리 알 수 없기 때문입니다.
지금 구조에는 이 셋을 이어 줄 자리가 없습니다. 주문조회 에이전트가 찾은 주문번호를 요청처리 에이전트는 모릅니다. 세 보고를 받아 고객에게 한 목소리로 답할 자리도 없습니다.
3. 비어 있는 세 가지 역할
| 역할 | 내용 | 없으면 생기는 일 |
|---|---|---|
| 접수 | 고객의 문의를 한 곳에서 받는다 | 고객이 어느 에이전트에게 물어야 할지 알아야 한다 |
| 위임 | 누구에게, 무엇을, 어떤 순서로 시킬지 정한다. 앞에서 알아낸 것을 다음 요청에 담아 넘긴다 | 복합 문의의 절반만 처리된다 |
| 종합 | 여러 보고를 하나의 답으로 묶는다 | 고객이 답 세 개를 따로 받는다 |
사람의 조직에서는 이 일을 팀장이 합니다. 멀티에이전트 시스템에서 이 자리의 이름이 Supervisor이고, 여러 에이전트가 이렇게 지휘 아래에서 함께 일하도록 엮는 일을 오케스트레이션(orchestration) 이라고 부릅니다. 오케스트라의 지휘자가 직접 악기를 연주하지 않는 것처럼, Supervisor도 직접 데이터를 조회하거나 처리하지 않습니다.
4. 이걸 모르면 무엇을 판단하지 못하는가
- 에이전트가 늘어날 때 누가 누구를 부를 수 있게 할지 정하지 못합니다. 아무나 아무나 부르게 두면 서로 떠넘기는 순환이 생깁니다.
- 답이 틀렸을 때 어느 층에서 틀렸는지 가려내지 못합니다. 도구가 틀렸는지, 전문 에이전트의 보고가 틀렸는지, Supervisor가 옮기다 틀렸는지.
- 고객이 묻기만 했을 때와 처리를 요청했을 때를 어떻게 다르게 다뤄야 하는지 정하지 못합니다. 처리 도구가 생긴 뒤로는 이 구분이 틀리면 고객이 정하지 않은 일이 실제로 벌어집니다.
- 처리번호처럼 한 글자도 틀리면 안 되는 값을 누구에게 맡겨야 하는지 알지 못합니다.
- 문의 하나에 LLM을 몇 번 부르게 되는지, 곧 비용이 어디서 늘어나는지 짐작하지 못합니다.
5. 이번 장에서 만드는 것
| 파일 | 성격 | 내용 |
|---|---|---|
haru_supervisor.py |
재사용 모듈 | Supervisor를 만드는 함수와 실행 함수 |
lesson22_supervisor.py |
실행 파일 | 한 대화로 이어지는 문의 다섯 개로 지휘를 확인 |
재사용 모듈은 8장의 haru_tools.py, 21장의 haru_actions.py와 haru_agents.py에 이어 네 번째입니다. haru_supervisor.py는 24장의 서버가 그대로 가져다 씁니다.
핵심 정리
- 전문 에이전트 셋만으로는 복합 문의를 이어 처리할 수 없습니다.
- 비어 있는 자리는 접수 · 위임 · 종합 세 가지 역할입니다.
- 이 자리를 맡는 에이전트가 Supervisor이고, 그렇게 엮는 일이 오케스트레이션입니다.
- Supervisor는 직접 조회하거나 처리하지 않고 시키고 묶는 일만 합니다.
- Supervisor가 서면 한 문의에 세 에이전트가 차례로 움직입니다. 확인하고, 규정을 찾고, 처리합니다.
- 이번 장의 산출물은 재사용 모듈
haru_supervisor.py입니다.