OpenAI 函数调用和 API 更新
OpenAI 已为 gpt-4-0613 和 gpt-3.5-turbo-0613 模型引入了函数调用,通过生成结构化 JSON 输出,使开发者能够将 GPT 的能力与外部工具和 API 连接。此更新使模型能够智能地检测何时需要调用函数,并生成符合特定函数签名的参数。
函数调用能力
函数调用使开发者能够从模型接收结构化数据,而不是自然语言,这可以用于触发外部操作或检索信息。模型已经根据用户输入进行了微调,以检测函数调用的必要性,并返回与提供的 JSON Schema 匹配的 JSON。
主要用例包括:
外部工具集成: 通过调用外部工具创建聊天机器人来回答问题,例如将请求“Email Anya 看看她是否想在下周五喝咖啡”转换为
send_email(to: string, body: string)调用。自然语言到 API/数据库查询: 将用户查询转换为内部 API 调用或数据库查询。例如,“谁是我这个月的前十大客户?”可以转换为
get_customers_by_revenue(start_date: string, end_date: string, limit: int)或通过sql_query(query: string)进行的 SQL 查询。结构化数据提取: 从文本中提取特定信息。例如,名为
extract_people_data(people: [{name: string, birthday: string, location: string}])的函数可用于从维基百科文章中提取人物数据。
技术实现
这些功能通过 /v1/chat/completions 端点的新参数 functions 和 function_call 启用。开发者可以使用 JSON Schema 向模型描述他们的函数,并且可以选择强制模型调用特定函数。
示例工作流程
- OpenAI API 调用: 开发者使用用户的输入和可用函数列表调用模型。
- 第三方 API 调用: 开发者使用模型的 JSON 响应来执行对第三方 API 或内部工具的调用。
- OpenAI API 响应: 开发者将工具输出的结果发送回模型,以生成最终的自然语言摘要供用户使用。
安全考虑
OpenAI 指出,虽然函数调用改进了工具集成,但安全风险仍然存在。一个概念验证利用示范表明,来自工具输出的不可信数据可能会指示模型执行非预期的操作。
- 仅从可信工具消费信息。
- 在执行可能产生现实世界影响的操作之前实施用户确认步骤,例如进行购买或发送电子邮件。
模型版本和稳定性
OpenAI 根据客户反馈,将 gpt-3.5-turbo-0301、gpt-4-0314 和 gpt-4-32k-0314 的支持延长至至少 2024 年 6 月 13 日。
为了确保应用稳定性,OpenAI 允许 API 用户固定特定的模型版本(例如,使用 gpt-4-0314 而不是通用的 gpt-4 指针)。每个固定的模型都是稳定的,并且不会经历影响输出的更改。OpenAI 还鼓励开发者为 OpenAI Evals 库做出贡献,以报告新模型版本的不足之处。