OpenAI 函数调用和 API 更新

OpenAI 已为 gpt-4-0613gpt-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 端点的新参数 functionsfunction_call 启用。开发者可以使用 JSON Schema 向模型描述他们的函数,并且可以选择强制模型调用特定函数。

示例工作流程

  1. OpenAI API 调用: 开发者使用用户的输入和可用函数列表调用模型。
  2. 第三方 API 调用: 开发者使用模型的 JSON 响应来执行对第三方 API 或内部工具的调用。
  3. OpenAI API 响应: 开发者将工具输出的结果发送回模型,以生成最终的自然语言摘要供用户使用。

安全考虑

OpenAI 指出,虽然函数调用改进了工具集成,但安全风险仍然存在。一个概念验证利用示范表明,来自工具输出的不可信数据可能会指示模型执行非预期的操作。

  • 仅从可信工具消费信息。
  • 在执行可能产生现实世界影响的操作之前实施用户确认步骤,例如进行购买或发送电子邮件。

模型版本和稳定性

OpenAI 根据客户反馈,将 gpt-3.5-turbo-0301gpt-4-0314gpt-4-32k-0314 的支持延长至至少 2024 年 6 月 13 日。

为了确保应用稳定性,OpenAI 允许 API 用户固定特定的模型版本(例如,使用 gpt-4-0314 而不是通用的 gpt-4 指针)。每个固定的模型都是稳定的,并且不会经历影响输出的更改。OpenAI 还鼓励开发者为 OpenAI Evals 库做出贡献,以报告新模型版本的不足之处。

Sources