菜单

函数调用和工具集成

相关源文件

目的与范围

本文介绍了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.typeSchema类型"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通过数据库查询示例演示了工作流

  1. 初始API调用:发送用户查询,其中包含tools参数,该参数包含函数规范examples/How_to_call_functions_with_chat_models.ipynb794-805

  2. 工具调用检测:检查response_message.tool_calls以确定模型是否选择了函数examples/How_to_call_functions_with_chat_models.ipynb829-835

  3. 函数执行:提取函数名称和参数,然后执行相应的函数examples/How_to_call_functions_with_chat_models.ipynb837-845

  4. 结果集成:将函数结果以角色"tool"附加到消息列表examples/How_to_call_functions_with_chat_models.ipynb840-845

  5. 最终响应:使用完整的消息历史进行第二次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()构建完整Schemaexamples/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