네 가지 함수 호출 모드
- AUTO(기본값) — 도구를 호출할지 텍스트로 답할지 모델이 결정해.
- ANY — 모델이 반드시 함수를 하나 이상 호출해. 텍스트만으로 끝내면 안 되는 작업 흐름에 유용해.
- NONE — 도구를 선언했어도 모델이 호출하지 못하게 해. 도구는 등록돼 있지만 이번 차례에는 텍스트만 받고 싶을 때 써.
- VALIDATED — ANY와 비슷하지만 스키마를 엄격히 지키게 해.
allowed_function_names를 쓰면 이번 차례에 호출할 수 있는 도구를 일부로 제한할 수 있어.
호출 형식 — 모델이 내놓는 값
모델이 도구 호출을 선택하면 응답의 candidates[0].content.parts에 하나 이상의 function_call part가 들어 있어. 각각은 다음 값을 담아:
name— 호출할 도구 이름.args— 선언한 매개변수와 맞는 JSON 객체.id— 내부 식별자. Gemini 3 이상에는 항상 있고 2.5에는 없을 때도 있어.
응답 형식 — 애플리케이션이 돌려주는 값
도구를 실행한 뒤 결과를 다음 사용자 차례의 function_response part로 보내:
name— 원래 호출의 이름과 맞춰.response— 결과를{"result": ...}로 감싸.id— 호출에 id가 있다면 같은 값으로 맞춰.
Gemini와 OpenAI의 역할 차이
OpenAI 방식에 익숙하면 여기서 다치기 쉬워. Gemini의 도구 결과 역할은 "tool"이 아니라 "user"야. 개념상 사용자가 도구의 출력을 제공하는 셈이지. 도구 결과가 여러 개라면 별도 메시지로 나누지 않고 같은 사용자 차례에 여러 part로 넣어.