네 가지 function-calling mode
- AUTO (default) — 모델이 결정: tool 호출하든가 text 답변.
- ANY — 모델이 반드시 함수 하나 이상 호출. text-only 가 invalid 한 workflow 에 유용.
- NONE — declared 됐어도 모델이 tool 호출 금지. tool 등록은 했지만 한 turn text-only 원할 때.
- VALIDATED — ANY 같은데 strict schema 준수 enforce.
allowed_function_names 로 모델이 이 turn 에 호출 허용된 어느 tool 인지 제한 가능.
Call 포맷 — 모델이 emit 하는 거
모델이 tool 호출 결정하면 response 의 candidates[0].content.parts 가 하나 이상의 function_call part 포함. 각자:
name— 호출할 tool.args— declared 파라미터 매칭하는 JSON 객체.id— opaque identifier (Gemini 3+ 에 항상; 2.5 에 가끔 없음).
Response 포맷 — 너가 돌려보내는 거
Tool 실행 후 결과를 다음 user turn 에 function_response part 로 보냄:
name— 원래 호출과 매칭.response— 결과를{"result": ...}로 wrap.id— 호출의 id 가 있을 때 매칭.
Gemini vs OpenAI role
여기가 OpenAI 외우는 게 너를 다치게 하는 곳: Gemini 의 tool-result role 이 "user", "tool" 아님. 개념적으로 "user 가 tool 의 출력 제공" 말하는 거. Multiple tool result 는 같은 user turn 에 multiple part — 별도 메시지 아님.