本文档涵盖了使用 OpenAI 的函数调用功能与聊天补全 API 的基本模式。函数调用使语言模型能够为外部工具和 API 生成结构化参数,将其功能扩展到文本生成之外。
涵盖的模式包括函数规范定义、工具选择控制、并行函数调用以及完整的执行工作流。有关包括知识检索和外部系统集成在内的进阶函数调用模式,请参阅 用于知识检索的函数调用 和 GPT 操作和外部系统集成。
函数调用系统通过结构化的请求-响应周期运行,模型分析用户输入与可用工具规范,并生成相应的函数调用。
来源:examples/How_to_call_functions_with_chat_models.ipynb96-109
函数规范遵循标准化的 JSON schema 格式,定义了模型的函数接口。
来源:examples/How_to_call_functions_with_chat_models.ipynb168-217
Cookbook 演示了使用两个天气相关函数进行函数调用,这些函数展示了不同的参数模式和要求。
| 函数名称 | 参数 | 目的 |
|---|---|---|
get_current_weather | location, format | 检索当前天气状况 |
get_n_day_weather_forecast | location, format, num_days | 获取多日天气预报 |
来源:examples/How_to_call_functions_with_chat_models.ipynb168-217
数据库示例演示了针对 SQLite 数据库的 SQL 查询生成和执行的函数调用。
来源:examples/How_to_call_functions_with_chat_models.ipynb696-719 examples/How_to_call_functions_with_chat_models.ipynb745-752
tool_choice 参数提供了对函数选择行为的精确控制。
| 工具选择值 | 行为 | 用例 |
|---|---|---|
"auto" (默认) | 模型决定何时使用函数 | 自然对话流程 |
"none" | 强制不使用函数 | 禁用所有函数调用 |
{"type": "function", "function": {"name": "func_name"}} | 强制指定函数 | 保证函数执行 |
来源:examples/How_to_call_functions_with_chat_models.ipynb427-435 examples/How_to_call_functions_with_chat_models.ipynb502-509
像 gpt-4o 这样的现代模型支持在单个响应中同时调用多个函数。
来源:examples/How_to_call_functions_with_chat_models.ipynb544-554
完整的函数调用工作流涉及四个独立的步骤,以确保正确执行和响应处理。
来源:examples/How_to_call_functions_with_chat_models.ipynb759-766 examples/How_to_call_functions_with_chat_models.ipynb788-859
工具执行结果必须在对话历史中正确格式化
| 字段 | 值 | 目的 |
|---|---|---|
role | "tool" | 标识消息为工具结果 |
tool_call_id | 来自原始 tool_calls | 将结果链接到特定调用 |
名称 | 函数名称 | 标识哪个函数被执行 |
content | 函数返回值 | 实际执行结果 |
来源:examples/How_to_call_functions_with_chat_models.ipynb840-845
Cookbook 为函数调用工作流提供了必要的实用函数。
来源:examples/How_to_call_functions_with_chat_models.ipynb96-109 examples/How_to_call_functions_with_chat_models.ipynb124-142 examples/How_to_call_functions_with_chat_models.ipynb618-643
chat_completion_request 函数实现了带有指数退避的重试逻辑,用于处理 API 故障。
@retry(wait=wait_random_exponential(multiplier=1, max=40), stop=stop_after_attempt(3))来源:examples/How_to_call_functions_with_chat_models.ipynb96-109 examples/How_to_call_functions_with_chat_models.ipynb747-751
对于数据库和 API 集成,函数描述应包含相关的 schema 信息。
函数规范应包含全面的验证规则。
required 数组中指定来源:examples/How_to_call_functions_with_chat_models.ipynb707-712 examples/How_to_call_functions_with_chat_models.ipynb183-184