工具调用
工具调用让模型生成结构化的函数参数,由你的应用执行真实操作,再把结果返回给模型。模型不会替你执行函数;权限校验、参数验证和副作用控制都由你的代码负责。
选择协议
不同协议的工具定义和事件格式不同,不能直接复制请求体。
Chat Completions 示例
1. 声明工具
2. 验证并执行
读取 choices[0].message.tool_calls,解析 function.arguments 后:
- 使用 JSON Schema 或等效方式再次校验参数;
- 检查当前用户是否有权限执行;
- 设置超时和资源限制;
- 对写操作要求显式确认;
- 记录
tool_call_id、耗时和结果状态。
3. 返回工具结果
将原始 assistant 消息和工具结果一并放入下一次请求:
Responses API
Responses 的工具定义将函数名称、说明和参数直接放在工具对象中,返回事件也不同:
执行后使用 function_call_output 和返回的 call_id 继续会话。具体字段请查看 Responses 接口参考。
可靠性建议
- 工具名称保持短、稳定且语义明确。
- 描述“何时使用”,不要只重复工具名称。
- 参数 Schema 尽量收紧,拒绝未知字段。
- 对同一
tool_call_id做幂等处理,避免重试产生重复副作用。 - 限制单轮工具数量、执行时长和输出长度。
- 将工具错误作为结构化结果返回,不要伪装成成功。
- 普通文本成功不代表 Tool Calling 可用;上线前单独验证模型、协议和客户端组合。
