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는 "이 네 질문에서 됐다"는 뜻입니다. 도구나 설명을 바꿀 때마다 다시 돌려 씁니다.- 어긋나면 이력 → 설명의 겹침 → 인자 예시 → 도구 수 순서로 봅니다.