信息来源官网:https://openai.com/blog/function-calling-and-other-api-updates
就在14日凌晨,OpenAI 官方毫无预告的发布了一个 ChatGPT 的重大更新。主要更新内容有 6 大部分:
- 在 Chat Completions API 中增加了新的函数调用(Function Call)功能
- 更新更可控的
gpt-4
和gpt-3.5-turbo
版本 gpt-3.5-turbo
新的 16k 上下文版本- V2 嵌入模型降低 75% 的价格
gpt-3.5-turbo
的输入 tokens 价格减少了 25%- 宣布
gpt-3.5-turbo-0301
和gpt-4-0314
模型弃用时间表
其中,更具体的更新信息详情如下:
函数调用(Function calling)
开发者现在可以向 gpt-4-0613
和 gpt-3.5-turbo-0613
描述函数,并让模型智能地选择输出一个包含调用这些函数的参数的 JSON 对象。这是一种更可靠地将 GPT 的能力与外部工具和 API 相连接的新方法。
这些模型已经被微调(fine-tuned),可以检测到何时需要调用函数(取决于用户的输入),并以符合函数签名的 JSON 响应。函数调用允许开发者更可靠地从模型中获取结构化数据。例如,开发者可以:
- 创建聊天机器人(chatbots),通过调用外部工具(例如 ChatGPT 插件)回答问题
将查询转换为函数调用,例如“给 Anya 发电子邮件,看看她下周五是否想喝咖啡”,转换为send_email(to: string, body: string)
,或者“波士顿的天气怎么样?”转换为get_current_weather(location: string, unit: 'celsius' | 'fahrenheit')
。 - 将自然语言转换为 API 调用或数据库查询
将“Who are my top ten customers this month?”转换为内部 API 调用,例如get_customers_by_revenue(start_date: string, end_date: string, limit: int)
,或者“Acme, Inc.上个月下了多少订单?“转换为使用sql_query(query: string)
的 SQL 查询。 - 将文本转化为结构化数据
定义一个名为extract_people_data(people: [{name: string, birthday: string, location: string}])
的函数,以提取维基百科文章中提到的所有人物。
这些用例是通过 OpenAI 的/v1/chat/completions
端点中的新 API 参数functions
和function_call
实现的,允许开发人员通过 JSON 模式描述函数,并可选择要求它调用特定函数。如果你发现函数调用可以改进,请查看 OpenAI 的 开发人员文档 和 添加 evals。
函数调用示例(Function calling example)
问题:
What’s the weather like in Boston right now?
步骤 1·OpenAI API使用函数和用户输入调用模型Request:
curl https://api.openai.com/v1/chat/completions -u :$OPENAI_API_KEY -H 'Content-Type: application/json' -d '{
"model": "gpt-3.5-turbo-0613",
"messages": [
{"role": "user", "content": "What is the weather like in Boston?"}
],
"functions": [
{
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location"]
}
}
]
}'
Response:
{
"id": "chatcmpl-123",
...
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"function_call": {
"name": "get_current_weather",
"arguments": "{ \"location\": \"Boston, MA\"}"
}
},
"finish_reason": "function_call"
}]
}
步骤 2·第三方 API使用模型响应调用 APIRequest:
curl https://weatherapi.com/...
Response:
{ "temperature": 22, "unit": "celsius", "description": "Sunny" }
步骤 3·OpenAI API将响应发送回模型进行总结Request:
curl https://api.openai.com/v1/chat/completions -u :$OPENAI_API_KEY -H 'Content-Type: application/json' -d '{
"model": "gpt-3.5-turbo-0613",
"messages": [
{"role": "user", "content": "What is the weather like in Boston?"},
{"role": "assistant", "content": null, "function_call": {"name": "get_current_weather", "arguments": "{ \"location\": \"Boston, MA\"}"}},
{"role": "function", "name": "get_current_weather", "content": "{\"temperature\": "22", \"unit\": \"celsius\", \"description\": \"Sunny\"}"}
],
"functions": [
{
"name": "get_current_weather",
"description": "Get the current weather in a given location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location"]
}
}
]
}'
Response:
{
"id": "chatcmpl-123",
...
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "The weather in Boston is currently sunny with a temperature of 22 degrees Celsius.",
},
"finish_reason": "stop"
}]
}
输出结果:
The weather in Boston is currently sunny with a temperature of 22 degrees Celsius.
自从 ChatGPT 插件的 alpha 版本发布以来,OpenAI 已经学到了很多关于如何安全地使工具和语言模型协同工作的知识。然而,仍然存在一些未解决的研究问题。
例如,一个概念验证(proof-of-concept)漏洞说明了来自工具输出的不受信任的数据如何指示模型执行意外的操作。OpenAI 正在努力减轻这些和其他风险。
开发人员可以通过仅从可信的工具中获取信息并在执行具有现实影响的操作(例如发送电子邮件、在线发布或购买)之前包含用户确认步骤来保护其应用程序。
新模型(New models)
GPT-4
gpt-4-0613
包含更新和改进的函数调用模型。
gpt-4-32k-0613
包括与gpt-4-0613
相同的改进,以及更长的上下文长度,以更好地理解更大的文本。
通过这些更新,OpenAI 将在未来几周内向部分用户提供试用机会,未来将全部放开。
GPT-3.5 Turbo
GPT-3.5 Turbo 版本包括与 GPT-4 相同的函数调用,以及通过系统消息更可靠的可控性,这两个功能使开发人员能够更有效地引导模型的响应。
GPT-3.5 Turbo-16k 版本的上下文长度是 GPT-3.5 Turbo 的 4 倍,价格仅是其两倍:每 1000 个输入 tokens 仅需0.003 美元,每 1000 个输出 tokens 仅需 0.004 美元。16k 上下文意味着该模型现在可以在单个请求中支持约 20 页的文本。
模型弃用(Model deprecations)
今天,OpenAI 将开始升级和淘汰 GPT-4 和 GPT-3.5 Turbo 的初始版本,这些版本在三月份宣布。使用稳定模型名称(GPT-3.5 Turbo、GPT-4 和 GPT-4-32k)的应用程序将在 6 月 27 日自动升级到上述新模型。为了比较不同版本之间的模型性能,OpenAI 的 Evals 库支持公共和私有评估,以显示模型变化将如何影响你的用例。
需要更多时间进行过渡的开发人员可以通过在 API 请求的“model”参数中指定“GPT-3.5 Turbo-0301”、“GPT-4-0314”或“GPT-4-32k-0314”来继续使用旧模型。这些旧模型将在 9 月 13 日之前可访问,之后指定这些模型名称的请求将失败。你可以通过 OpenAI 的模型淘汰页面保持最新。这是这些模型的第一个更新,因此 OpenAI 热切期待开发者的反馈,以帮助 OpenAI 确保平稳过渡。
更低的价格
OpenAI 继续降低价格,GPT-3.5 Turbo-16k 的价格仅是 GPT-3.5 Turbo 的两倍。OpenAI 希望这将使更多的开发者能够使用 OpenAI 的 API,创造出更多有趣的应用。
嵌入(Embeddings)
text-embedding-ada-002
是 OpenAI 最受欢迎的嵌入模型。今天,OpenAI 将其价格降低了 75%,也就是说:每 1000 个 tokens 的价格仅为 0.0001 美元。
GPT-3.5 Turbo
gpt-3.5-turbo
是 OpenAI 最受欢迎的聊天模型,为数百万用户提供了 ChatGPT 的支持。今天,OpenAI 将gpt-3.5-turbo
的输入 tokens 价格降低了 25%。开发者现在可以以每 1000 个输入 tokens 花费 $0.0015 的价格使用该模型,每 1000 个输出 tokens 需要 0.002 美元,相当于每美元大约可以获得 700 页。gpt-3.5-turbo-16k
的价格为每 1000 个输入 tokens 需要 0.003 美元,每 1000 个输出 tokens 仅需 0.004 美元。
总结
OpenAI 这次宣布的重要更新将极大地提升其生成式 AI 模型的竞争力。此外,OpenAI 还宣布降低了价格,这将进一步影响其他科技巨头对接入大型 AI 模型的成本调整,未来的 AI 生态将更加丰富。
如果你想要学习相关的 AI 知识,欢迎访问如下扩展:
OpenAI 中文文档
Prompt 学习指南
Prompt 工程指南