모델은 코드를 읽지 못해
함수 호출이라는 이름 때문에 모델이 직접 함수를 실행한다고 생각하기 쉽지만 그렇지 않아. 모델은 이름, 설명, 매개변수 스키마로 이뤄진 선언을 읽고, 호출해 달라는 구조화된 요청을 내놓아. 실행하고 결과를 돌려주는 일은 애플리케이션 몫이고, 그다음 모델이 대화를 이어 가.
따라서 설명과 스키마는 모델이 도구에 관해 아는 전부야. 참고 문서가 아니라 API 계약이지.
전체 JSON Schema가 아니라 OpenAPI 하위 집합이야
Gemini의 도구 스키마는 OpenAPI 3.0의 일부만 지원해. JSON Schema와의 차이가 중요해:
| 기능 | Gemini(OpenAPI 하위 집합) | JSON Schema |
|---|---|---|
| 최상위 형식 | 항상 "object" | 제한 없음 |
$ref / $defs | 지원하지 않음 | 지원 |
anyOf / oneOf | 지원하지 않음 | 지원 |
additionalProperties | 인식하지 않음 | 지원 |
| 열거형 | enum 배열 사용 | 같음 |
| 중첩 객체 | 지원 | 지원 |
핵심은 이거야. 스키마를 단순하게 유지하고 ref와 union type을 쓰지 마. 실제 도구가 여러 형태를 받아야 한다면 별도 도구로 나눠 공개해.
이름보다 설명이 중요해
모델은 설명을 읽고 도구를 골라. 좋은 설명이 붙은 do_thing이 모호한 설명의 queryEnterpriseAccountManagementSystem보다 더 잘 작동해. 30초 안에 훑어볼 동료에게 주는 docstring처럼 설명을 써.