跳转到主要内容
Gemini 原生格式完整支持 Function Calling:模型输出”想调哪个函数 + 参数”,你本地执行后把结果回传,模型给出最终回答。整体循环与 OpenAI 的 FC 一致,但字段格式完全不同,不能混用。 本页基于 Google 官方文档整理(ai.google.dev/gemini-api/docs/function-calling,2026年6月数据)。

与 OpenAI 格式的差异速查

注意一个易错点:Gemini 的 function_call.args结构化对象,不是 JSON 字符串,不需要 json.loads

完整调用循环

Gemini 3 系列的思维签名(thought signature)必须回传:模型返回的 function_call part 里带有加密的 thought_signature,第二次请求时要把整个模型回复 Content 原样加进历史(如上例第 4 步),签名缺失会导致推理链断裂甚至请求报错。用官方 google-genai SDK 按上面的写法即可自动带上;手写 REST 请求时不要剥掉该字段。

调用模式(mode)

并行与多步调用

  • 并行调用:一轮里模型可能返回多个 function_call part(如同时查两个城市),逐个执行后把全部 function_response 一起回传
  • 多步调用:模型可以”调函数 → 看结果 → 再调下一个”链式推进,循环处理直到响应里不再有 function_call。给循环设最大轮数,避免失控烧钱

最佳实践

  • description 写给模型看:说清”什么时候该调我”,参数能用 enum 收窄就别用自由字符串
  • 工具定义保持稳定:参与缓存前缀匹配,频繁变动会破坏 缓存命中
  • 需要确定性 JSON 输出而非调用外部工具时,考虑用 response_schema 结构化输出代替 FC(见 原生调用 参数表)
  • 沙箱计算类任务可以直接用 code_execution 工具,不必自己实现计算函数

常见踩坑

相关链接