콘텐츠로 이동

도구 선택 제어 (Tool Choice & Forcing)

모델이 도구를 부를지 말지, 어떤 도구를 부를지를 제어하는 tool_choice 는 에이전트의 행동을 원하는 방향으로 잡는 가장 직접적인 손잡이입니다. 기본값(auto)부터 강제 호출까지 어떻게 흘러가는지, 그리고 언제 무조건 도구를 강제해야 하는지를 정리합니다.

기본 동작: auto

기본 tool_choice{"type": "auto"} 입니다. 매 턴마다 모델이 상황을 보고 판단합니다.

  • 요청이 도구의 설명된 능력과 맞고, 답이 컨텍스트에 이미 없으면 → 도구 호출.
  • 안정적인 지식·창의적 작업·대화형 턴 → 바로 답변.

이 경계는 시스템 프롬프트로 조정할 수 있습니다.

  • "도구로 먼저 조사하고 답해줘" → 도구 사용 증가.
  • "응답 전에 무조건 도구를 부른다" → 더 강하게 미는 지시.
  • "도구를 부를지 판단해서 해줘" → 보수적(기본에 가깝게) 유지.

도구 강제: any / tool

프롬프트만으로 충분하지 않고 반드시 도구를 호출하게 하려면 tool_choice 를 강제로 설정합니다.

  • {"type": "any"}: 도구를 반드시 하나 호출(어떤 도구든).
  • 특정 도구 강제: 해당 도구를 이름으로 지정하면 그 도구를 무조건 부르게 됩니다.
  • {"type": "tool", "name": "..."} 형태(공급자별 문법)로 원하는 도구를 한정.

예를 들어 "항상 DB 에서 조회한 뒤에만 답하라"는 요구는 프롬프트 대신 tool_choice 로 강제하는 게 결정적(assured)으로 동작합니다.

데이터스케쳐스 실무 관점

  • 강제 호출이 유리한 경우: 사용자 입력이 반드시 검색/조회를 거쳐야 하는 안전·정확성 민감 작업(예: 법률·재무 데이터 근거 답변)은 tool 강제로 "근거 없는 추측"을 원천 차단할 수 있습니다.
  • auto 가 유리한 경우: 일반 대화·요약처럼 도구를 쓸 수도 아닐 수도 있는 작업은 auto 로 두어 토큰을 아끼고 자연스럽게 응답하게 합니다.

확인 필요

  • 공급자마다 tool_choice 문법(any/tool/none, 강제 도구 이름)이 조금씩 다르고, 모델·버전에 따라 지원 여부가 달라질 수 있습니다. 실제 연동 시 해당 공급자 문서를 재확인하세요. (확인 필요)

더 알아보기