OpenAI 今年早些时候发布了 gpt-3.5-turbo
和gpt-4
,短短几个月,开发者在这些模型上构建了令人惊叹的应用。
gpt-4
和 gpt-3.5-turbo
的版本都进行了更新和改进,包括新的 16k 上下文版本的 gpt-3.5-turbo
(相较于标准的 4k 版本),以及在我们最先进的 embeddings 模型上降低了 75% 的成本,gpt-3.5-turbo
的输入令牌成本降低了 25%。此外,还宣布了 gpt-3.5-turbo-0301
和gpt-4-0314
模型的弃用时间表。所有这些模型都附带了我们在 3 月 1 日推出的相同的数据隐私和安全保障——客户拥有他们请求生成的所有输出,他们的 API 数据不会被用于训练。
开发者现在可以向 gpt-4-0613
和gpt-3.5-turbo-0613
描述函数,并让模型智能地选择输出一个包含调用这些函数的参数的 JSON 对象。这是一种更可靠地将 GPT 的能力与外部工具和 API 连接起来的新方法。这些模型已经被微调,既可以检测何时需要调用一个函数(取决于用户的输入),也可以响应遵循函数签名的 JSON。函数调用允许开发者更可靠地从模型中获取结构化数据。例如,开发者可以:
- 创建通过调用外部工具(例如 ChatGPT 插件)来回答问题的聊天机器人
- 将查询如 ” 给 Anya 发邮件,看她下周五是否想喝咖啡 ” 转换为像
send_email(to: string, body: string)
这样的函数调用,或者 ” 波士顿现在的天气怎么样?” 转换为get_current_weather(location: string, unit: 'celsius' | 'fahrenheit')
。 - 将自然语言转换为 API 调用或数据库查询
- 将 ” 这个月我的前十个客户是谁?” 转换为像
get_customers_by_revenue(start_date: string, end_date: string, limit: int)
这样的内部 API 调用,或者 ” 上个月 Acme 公司下了多少订单?” 转换为使用sql_query(query: string)
的 SQL 查询。 - 从文本中提取结构化数据
- 定义一个名为
extract_people_data(people: [{name: string, birthday: string, location: string}])
的函数,以从维基百科文章中提取所有提到的人的数据。
OpenAI 还给出了一个函数调用的例子。首先,模型接收到用户的输入,例如“波士顿现在的天气如何?”,然后模型选择调用一个函数,例如get_current_weather
,并提供所需的参数,例如位置。然后,开发者可以使用模型的响应来调用他们自己的 API,例如一个天气 API。API 返回的数据(例如,温度、单位和天气描述)可以再次发送回模型进行总结。最后,模型可能会返回类似于“波士顿现在的天气是晴天,温度是 22 度摄氏度”这样的响应。
自 ChatGPT 插件的 alpha 版本发布以来,我们对如何使工具和语言模型安全地协同工作了解了很多。然而,仍然存在一些未解的研究问题。例如,一个概念验证的利用方式说明了来自工具输出的不可信数据如何指导模型执行意料之外的操作。我们正在努力减轻这些和其他风险。开发者可以通过只使用来自可信工具的信息,并在执行有真实世界影响的操作之前,包括用户确认步骤,如发送邮件、在线发布或进行购买,来保护他们的应用。
最后,新的 GPT- 4 模型 gpt-4-0613
包括了一个更新和改进的模型,具有函数调用的功能。
从我的角度来看,这些更新提供了新的功能和工具,可以帮助开发者更好地利用 GPT 模型的能力,并以更可控和安全的方式与外部工具和 API 进行交互。尤其是函数调用功能,可以帮助开发者更可靠地从模型中获取结构化数据,并且可以将自然语言查询转换为 API 调用或数据库查询,这对于开发复杂的聊天机器人或其他交互式应用程序非常有用。然而,同时也需要注意安全问题,确保只使用来自可信工具的信息,并且在执行有真实世界影响的操作之前,应包含用户确认步骤。