3개 mode, 3개 행동
- auto — 모델이 tool 부를지 직접 답할지 결정. chat default.
- required / any — 모델이 어떤 tool은 불러야. tool-only path로 task 좁혔을 때 유용.
- 이름 박힌 tool — 모델이 이 specific tool 불러야. JSON schema enforce하는 가장 깨끗한 방법 (Anthropic JSON 패턴).
- none — tool calling 비활성. router의 'just answer' branch에 유용.
이게 왜 prompt decision인가
Tool choice가 contract 변경. required 쓰면 "directly answer" 옵션 빼버린 거야; 프롬프트가 그걸 obvious하게 만들어야지 안 그러면 모델이 ill-fitting tool call 만들어. auto 쓰면 프롬프트가 모델한테 언제 tool 안 부를지 알려야 해 — 안 그러면 반사적으로 tool-call.