도구 선택 제어 (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, 강제 도구 이름)이 조금씩 다르고, 모델·버전에 따라 지원 여부가 달라질 수 있습니다. 실제 연동 시 해당 공급자 문서를 재확인하세요. (확인 필요)