本文介绍了OpenAI的函数调用功能,该功能使语言模型能够通过结构化的函数规范与外部工具、API和系统进行交互。函数调用允许模型生成格式正确的函数参数,这些参数可由您的应用程序执行,从而将聊天模型的功能扩展到文本生成之外。
本页面重点介绍实现函数调用的基本概念和模式。有关使用函数调用进行高级知识检索的模式,请参阅函数调用实现知识检索。有关构建GPT Actions和企业集成,请参阅GPT Actions和外部系统集成。
函数调用通过Chat Completions API的tools参数进行操作,该参数接受JSON Schema格式的函数规范。模型分析用户输入并确定何时调用函数,生成符合所提供规范的适当参数。
来源:examples/How_to_call_functions_with_chat_models.ipynb1-894
函数使用JSON Schema在tools参数中定义。每个函数规范都包含名称、描述和参数Schema,以指导模型的参数生成。
来源:examples/How_to_call_functions_with_chat_models.ipynb168-217
该notebook演示了具有此结构的天气API函数
| 组件 | 目的 | 示例 |
|---|---|---|
名称 | 函数标识符 | "get_current_weather" |
描述 | 模型指导 | "获取当前天气" |
parameters.type | Schema类型 | "object" |
属性 | 参数定义 | 地点、格式规范 |
必需 | 强制参数 | ["location", "format"] |
tool_choice参数控制模型如何选择和使用函数
来源:examples/How_to_call_functions_with_chat_models.ipynb392-509
完整的函数调用工作流涉及notebook中实现的四个关键步骤
来源:examples/How_to_call_functions_with_chat_models.ipynb759-859
该notebook通过数据库查询示例演示了工作流
初始API调用:发送用户查询,其中包含tools参数,该参数包含函数规范examples/How_to_call_functions_with_chat_models.ipynb794-805
工具调用检测:检查response_message.tool_calls以确定模型是否选择了函数examples/How_to_call_functions_with_chat_models.ipynb829-835
函数执行:提取函数名称和参数,然后执行相应的函数examples/How_to_call_functions_with_chat_models.ipynb837-845
结果集成:将函数结果以角色"tool"附加到消息列表examples/How_to_call_functions_with_chat_models.ipynb840-845
最终响应:使用完整的消息历史进行第二次API调用以获取自然语言响应examples/How_to_call_functions_with_chat_models.ipynb849-853
像gpt-4o这样的现代模型可以在单次API调用中同时执行多个函数
来源:examples/How_to_call_functions_with_chat_models.ipynb516-554
该notebook提供了一个使用Chinook SQLite数据库的综合示例,其中包含用于Schema内省的实用函数
| 功能 | 目的 | 实现 |
|---|---|---|
get_table_names() | 提取表名 | examples/How_to_call_functions_with_chat_models.ipynb618-624 |
get_column_names() | 提取列信息 | examples/How_to_call_functions_with_chat_models.ipynb627-633 |
get_database_info() | 构建完整Schema | examples/How_to_call_functions_with_chat_models.ipynb636-642 |
ask_database() | 执行SQL查询 | examples/How_to_call_functions_with_chat_models.ipynb745-752 |
为了给SQL生成提供上下文,ask_database函数规范将完整的数据库Schema嵌入到函数描述中examples/How_to_call_functions_with_chat_models.ipynb696-719
该notebook使用tenacity库实现了重试逻辑,以实现稳健的API调用
来源:examples/How_to_call_functions_with_chat_models.ipynb96-109
该数据库示例包含错误处理,以防止SQL注入和执行失败
来源:examples/How_to_call_functions_with_chat_models.ipynb747-750
系统提示指导模型请求对模糊查询进行澄清
来源:examples/How_to_call_functions_with_chat_models.ipynb253
| 参数 | 类型 | 目的 | 示例值 |
|---|---|---|---|
tools | 数组 | 函数规范 | [{"type": "function", "function": {...}}] |
tool_choice | 字符串/对象 | 控制函数选择 | "auto"、"none"、{"type": "function", "function": {"name": "func_name"}} |
模型 | 字符串 | 模型选择 | "gpt-4o"、"gpt-3.5-turbo" |
函数调用需要仔细考虑安全隐患,尤其是在执行生成的SQL查询或调用外部API时。该notebook强调,“在生产环境中,SQL生成可能具有高风险,因为模型在生成正确SQL方面并非完全可靠”examples/How_to_call_functions_with_chat_models.ipynb566
来源:examples/How_to_call_functions_with_chat_models.ipynb1-894