1. 使用场景
Function Calling(函数调用)允许模型根据用户需求调用外部工具或 API,核心价值包括:- 扩展数值计算能力:解决模型原生计算不精准的问题。
- 获取实时外部信息:通过调用搜索、天气、数据库等接口获取即时数据。
- 环境交互与控制:自动化操控智能设备、发送邮件或执行代码。
2. 使用方式
2.1 通过 REST API 添加 tools 参数
在发送请求时,通过tools 字段定义可用的函数列表:
2.2 通过 OpenAI 库请求
推荐使用 OpenAI SDK 进行集成,调用方式如下:3. 支持模型列表
您可以访问 模型广场,查看模型是否支持工具调用。4. 使用示例 (Python)
以下展示一个完整的闭环调用示例:5. 特殊模型注意事项
不同模型厂商在工具调用上存在一些差异化要求。本节说明需要额外处理的情况,建议在接入对应模型前仔细阅读。5.1 Gemini 3 系列:多轮工具调用必须回传 thought_signature
5.1.1 背景
Gemini 3 系列模型(如gemini-3.1-pro-preview、gemini-3-flash-preview 等)引入了 Thought Signature 机制:模型在返回 tool_call 时,会附带一段加密的思考轨迹,用于在后续轮次中保持推理上下文的连续性。
在多轮工具调用中,客户端必须将这段 signature 原样回传给模型,否则会收到类似如下的 400 错误:
5.1.2 关键规则
| 场景 | 规则 |
|---|---|
| 单个工具调用 | 该 tool_call 会带有 thought_signature,下一轮必须原样回传 |
| 串行多步调用(多轮 tool_call) | 每一步的 tool_call 都带 signature,历史中的每一个都必须保留回传 |
| 并行工具调用(一次返回多个 tool_call) | 只有第一个 tool_call 带 signature,其他不带;回传 message 顺序必须为 assistant(FC1+sig, FC2) → tool(FR1) → tool(FR2),不能交错 |
5.1.3 signature 在 OpenAI 兼容格式中的位置
通过 OpenAI SDK 调用时,thought_signature 位于每个 tool_call 的 extra_content.google.thought_signature 字段:
注意:OpenAI SDK 的 pydantic 模型对extra_content这类非标准字段的序列化行为在不同版本间可能不一致。推荐从response.model_dump()的原始 dict 里提取该字段,而不是依赖message.tool_calls的结构化对象属性访问。
5.1.4 完整示例代码
以下是一个跑通 Gemini 3 多轮工具调用的完整示例,重点关注build_assistant_message_from_raw 辅助函数——它是保证 signature 不丢失的关键。
相关链接