Responses API 工具调用
工具调用(Function Calling)允许AI模型调用预定义的函数来获取实时信息或执行特定操作。通过工具调用,模型可以访问外部数据源、执行计算或与其他服务交互。快速开始
只需要替换<API-KEY> 为你的实际API密钥即可运行。
工具定义格式
函数工具格式
tool_choice 参数
控制模型是否以及如何使用工具:"auto"(默认) - 模型自动决定是否调用工具"none"- 模型不会调用任何工具"required"- 模型必须调用至少一个工具{"type": "function", "function": {"name": "specific_function"}}- 强制调用特定工具
工具调用流程
标准流程
- 发送请求 - 包含工具定义和用户消息
- 模型分析 - 判断是否需要调用工具
- 返回工具调用 - 如需要,返回工具调用请求
- 执行工具 - 在客户端执行相应函数
- 发送结果 - 将工具执行结果发送回模型
- 生成回答 - 模型基于工具结果生成最终回答
并行工具调用
模型可以同时请求多个工具调用:响应结果示例
工具调用请求响应
常用工具类型
1. 信息查询工具
2. 计算工具
3. 数据处理工具
4. 外部API调用
应用场景
- 实时信息获取 - 天气、新闻、股价等
- 计算和分析 - 数学运算、数据处理
- 外部服务集成 - 发送邮件、创建日历事件
- 数据库操作 - 查询、更新数据
- 文件操作 - 读取、写入、处理文件
- API调用 - 调用第三方服务
最佳实践
1. 工具设计原则
- 单一职责: 每个工具只做一件事
- 清晰描述: 提供详细的函数和参数描述
- 参数验证: 验证输入参数的合法性
- 错误处理: 优雅处理执行错误
2. 安全考虑
- 输入验证: 严格验证工具参数
- 权限控制: 限制工具的执行权限
- 资源限制: 防止无限制的资源消耗
- 敏感操作: 对敏感操作进行确认
3. 性能优化
- 并行执行: 支持并行工具调用
- 缓存结果: 缓存频繁调用的结果
- 超时控制: 设置合理的执行超时
- 资源管理: 合理管理计算资源
注意事项
技术限制
- 模型支持: 确保使用支持工具调用的模型(如gpt-5-2025-08-07、gpt-4o、gpt-4-turbo等)
- 工具数量: 单次请求最多支持128个工具定义
- 参数格式: 工具参数必须遵循JSON Schema格式
- 响应格式: 工具执行结果需要是可序列化的JSON格式
安全考虑
- 输入验证: 严格验证工具参数的合法性和安全性
- 权限控制: 限制工具的执行权限,避免敏感操作
- 资源限制: 防止无限制的资源消耗和超时控制
- 错误处理: 优雅处理工具执行失败的情况
性能优化
- 并行执行: 支持模型并行调用多个工具
- 缓存策略: 对频繁调用的工具结果进行缓存
- 超时控制: 设置合理的工具执行超时时间
- 资源管理: 合理管理计算和网络资源
最佳实践
- 工具设计: 遵循单一职责原则,每个工具只处理一类任务
- 参数命名: 使用清晰、一致的参数命名规范
- 错误信息: 提供详细、有用的错误信息帮助调试
- 文档完善: 为每个工具提供详细的描述和使用示例
常见问题解答
Q: 如何处理工具执行失败的情况?A: 在工具函数中捕获异常并返回包含错误信息的结构化响应,让模型了解失败原因并给出相应回答。 Q: 是否可以嵌套调用工具?
A: 可以,模型可以根据第一个工具的结果决定是否调用其他工具,实现复杂的工具调用链。 Q: 如何控制工具调用的频率?
A: 使用
tool_choice参数控制模型的工具使用行为,或在业务层面实现频率限制机制。
Q: 工具调用的成本如何计算?A: 工具调用本身不额外收费,但会消耗input和output tokens,按标准token计费方式收费。 Q: 支持哪些类型的工具参数?
A: 支持JSON Schema定义的所有基础类型:string、number、integer、boolean、array、object等。 Q: 如何调试工具调用问题?
A: 检查工具定义格式、参数验证、执行日志,确保工具函数返回正确的JSON格式数据。

