실무 Multi-Agent 오케스트레이션 6장 · 데이터 조회 도구 구현 6 / 7 ← 이전목차다음 → TechLead Cro

6장. 데이터 조회 도구 구현

정리와 체크리스트

6장에서 배운 것

  • 도구 함수 — 부르는 쪽도 반환값을 읽는 쪽도 모델인 함수. 모델이 읽고 옳게 판단할 수 있게 만듭니다.
  • 반환값 설계 — 키 이름은 뜻이 드러나게, 필요한 것만 돌려줍니다.
  • found 패턴 — 조회 실패를 예외로 멈추지 않고 found: False와 안내 문장으로 돌려주는 방식입니다.
  • NaN — CSV의 빈칸을 pandas로 읽었을 때의 값. 코드가 뜻을 해석해서 넘깁니다.
  • 자동 함수 호출 — 파이썬 함수를 tools에 넘기면 SDK가 선언을 만들고 왕복을 대신합니다.
  • maximum_remote_calls — 자동 왕복의 횟수 상한입니다.
  • automatic_function_calling_history — 자동 왕복에서 오간 대화의 기록입니다.

한눈에 보는 핵심

def track_shipping(order_id: str) -> dict:
    """주문번호로 택배사·송장번호·출고일·배송완료일을 조회한다. 배송 위치 문의에 사용한다.

    Args:
        order_id: 하루마켓 주문번호. 'HR'로 시작한다.
    """
    row = ORDERS[ORDERS["order_id"] == order_id]
    if row.empty:                                   # 없는 주문도 사실로 돌려준다
        return {"found": False, "message": f"주문번호 {order_id} 를 찾을 수 없습니다."}
    ...

config=types.GenerateContentConfig(
    system_instruction=SYSTEM,                      # 조회 결과 밖으로 나가지 않게
    tools=[get_order_status, track_shipping],       # 함수를 그대로
    automatic_function_calling=types.AutomaticFunctionCallingConfig(
        maximum_remote_calls=4                      # 횟수 상한
    ),
)
함수의 이것 모델에게는
함수 이름 도구의 이름
독스트링 도구의 설명 — 쓸지 말지를 정하는 근거
타입힌트 인자의 이름과 타입
반환한 딕셔너리의 키 각 값의 뜻
코드가 한 일 모델이 한 일
주문이 있는지 확인 두 도구 중 하나를 고름
송장이 없으면 "출고 전"으로 해석 문장에서 주문번호를 찾아 넣음
주소·수령인을 빼고 돌려줌 받은 결과를 문장으로 옮김

체크리스트

  • [ ] pd.read_csv(..., dtype=str)에서 dtype=str이 필요한 이유를 설명할 수 있다.
  • [ ] 주문 하나를 찾는 세 줄(조건으로 고르기, .empty, .iloc[0])을 설명할 수 있다.
  • [ ] 반환값의 키를 "s", "t"처럼 줄이면 안 되는 이유를 설명할 수 있다.
  • [ ] 없는 주문번호에 예외를 던지지 않고 found: False를 돌려주는 이유를 설명할 수 있다.
  • [ ] 두 도구가 수령인과 주소를 돌려주지 않는 이유를 설명할 수 있다.
  • [ ] 자동 방식에서 독스트링을 지우면 무엇이 망가지는지 설명할 수 있다.
  • [ ] maximum_remote_calls가 무엇을 막는지 설명할 수 있다.
  • [ ] [도구 호출] 출력이 어디서 나오는지 안다.
  • [ ] 답변의 사실을 orders.csv의 값과 맞춰 확인했다.
  • [ ] 답변에서 도구 결과에 없는 문장을 하나 찾아 냈다.

한 줄 핵심

도구 함수의 설명과 반환값은 모델이 읽는 글입니다. 사실을 가르는 일은 코드가 하고, 모델은 갈라진 사실을 전합니다.

← 이전 절따라하기 — 주문 조회 도구 만들기다음 절 →실습문제와 해답
오명운 · macro@prag-ai.com