실무 Multi-Agent 오케스트레이션 7장 · 다중 도구 라우팅 4 / 7 ← 이전목차다음 → TechLead Cro

7장. 다중 도구 라우팅

라우팅을 숫자로 확인하기 — 기대 도구를 먼저 적는다

한 줄 요약

라우팅이 맞는지는 답을 읽어서는 알기 어렵습니다. 질문마다 "이 도구가 불려야 한다"를 먼저 적어 두고, 실제로 불린 도구와 맞춰 봅니다. 그러면 "잘 되는 것 같다"가 4/4 라는 숫자가 됩니다.


1. 답만 읽으면 놓치는 것

상담원의 답이 그럴듯하다고 해서 도구를 바르게 썼다는 뜻은 아닙니다.

  • 도구를 부르지 않고 지어낸 답도 문장은 매끄럽습니다.
  • 다른 도구를 불러 얻은 엉뚱한 데이터로도 문장은 만들어집니다.

6장에서 답과 함께 호출 이력을 출력했던 이유가 이것입니다. response.automatic_function_calling_history에는 SDK가 대신 해 준 왕복이 그대로 남아 있고, 거기서 어떤 도구가 어떤 인자로 불렸는지를 꺼낼 수 있습니다.

called = []
for content in response.automatic_function_calling_history or []:
    for part in content.parts or []:
        if part.function_call:
            called.append(part.function_call.name)

이번 장의 ask()는 답을 출력하는 데서 그치지 않고 불린 도구 이름의 목록을 돌려줍니다. 채점하기 위해서입니다.


2. 기대 도구 표

실행하기 전에 정답을 적어 둡니다.

test_set = [
    (f"주문 {oid} 배송 어디쯤이에요?", "track_shipping"),
    ("텀블러 보온 몇 시간 가나요?", "search_products"),
    ("에어프라이어 재고 있어요?", "search_products"),  # 검색→재고 2단계도 정답
    ("P008 텀블러 민트색 재고 몇 개 남았어요?", "check_stock"),
]

질문과 기대하는 도구의 짝입니다. 이 표를 만드는 일은 "우리 도구들로 이 질문을 처리하는 올바른 길이 무엇인가"를 사람이 먼저 정하는 일입니다.

세 번째 줄을 봅니다. "재고 있어요?"인데 기대 도구가 check_stock이 아니라 search_products입니다. 고객은 "에어프라이어"라는 이름만 말했고 상품ID를 모릅니다. check_stock은 상품ID를 받으므로 검색이 먼저입니다. 검색한 뒤 재고 확인까지 이어 가도 정답입니다.

기대를 적지 않고 결과만 보면, 나온 결과가 무엇이든 그럴듯해 보입니다. 정답을 먼저 적어야 틀린 것이 보입니다.


3. 채점

correct = 0
for q, expected in test_set:
    called = ask(q)
    ok = expected in called
    correct += ok

print(f"\n라우팅 정확도: {correct}/{len(test_set)}")

채점 기준은 expected in called, 곧 기대한 도구가 불린 도구 목록 안에 있는가입니다. "딱 그 도구 하나만 불렸는가"가 아닙니다. 그래서 검색 뒤에 재고 확인을 이어서 불러도 맞은 것으로 칩니다.

correct += ok는 True를 1로, False를 0으로 세는 파이썬의 성질을 이용한 것입니다.

누가 한 일
개발자 질문과 기대 도구를 정했다
모델 질문을 읽고 도구와 인자를 골랐다
우리 코드(SDK 포함) 도구를 실행하고, 이력에서 이름을 꺼내 기대와 맞춰 봤다

4. 4/4를 어떻게 쓰는가

4/4는 "이 네 질문에서는 기대한 도구가 불렸다" 는 뜻입니다. 이 숫자는 두 가지와 함께 씁니다.

  • 질문을 더해 갑니다. 질문 네 개는 표본입니다. 새로운 유형의 문의가 생기면 기대 도구와 함께 표에 더합니다.
  • 답의 내용은 따로 확인합니다. 이 숫자는 도구 선택을 셉니다. 답의 내용은 도구가 돌려준 값과 맞춰 보는 검사로 확인합니다.

이 숫자의 쓸모는 다시 돌릴 때 큽니다. 도구 설명을 고치거나 도구를 하나 더 붙인 뒤에 같은 표를 다시 돌리면 결과가 유지되는지 바로 보입니다. 4장에서 분류기에 정답을 붙여 정확도를 쟀던 것과 같은 방법입니다.


5. 어긋났을 때 보는 순서

숫자가 3/4로 나오면, 프롬프트를 이리저리 바꿔 보기 전에 다음 순서로 봅니다.

순서 볼 것 고칠 곳
1 호출 이력. 안 불렀나, 다른 것을 불렀나, 맞게 불렀는데 인자가 틀렸나 셋은 서로 다른 문제입니다. 먼저 가려냅니다
2 설명이 겹치는가. 잘못 불린 도구와 불렸어야 할 도구의 설명을 나란히 놓습니다 "~에 사용한다 / ~에는 사용하지 않는다"를 보탭니다
3 인자 설명에 예시가 있는가 P008, HR2026… 같은 형식 예시를 넣습니다
4 도구가 너무 많지 않은가 쓰임이 겹치는 도구를 합치거나, 일을 나눕니다

무엇을 고쳤든 마지막은 같습니다. 표 전체를 다시 돌립니다. 고친 것이 고쳐졌는지, 멀쩡하던 것이 깨지지 않았는지 함께 봅니다.


핵심 정리

  • 답이 매끄러워도 도구를 바르게 썼다는 뜻은 아닙니다. 호출 이력을 봅니다.
  • 실행하기 전에 질문마다 기대하는 도구를 적어 둡니다.
  • 채점은 기대한 도구가 불린 목록에 들어 있는가로 합니다.
  • 4/4는 "이 네 질문에서 됐다"는 뜻입니다. 도구나 설명을 바꿀 때마다 다시 돌려 씁니다.
  • 어긋나면 이력 → 설명의 겹침 → 인자 예시 → 도구 수 순서로 봅니다.
← 이전 절도구 선언의 비용 — 도구는 매 호출마다 실려 간다다음 절 →따라하기 — 도구 네 개와 라우팅 테스트
오명운 · macro@prag-ai.com