布景

OpenAI官方在2023.06.13发布了API层面的重磅晋级,首要改变如下:

  • 在Chat Completions这个API里支撑了开发者自界说的函数调用。
  • 更新了gpt-4gpt-3.5-turbo模型。
  • gpt-3.5-turbo支撑的上下文长度扩容到16K,之前只支撑4K个token。
  • embedding model的运用本钱下降75%。
  • gpt-3.5-turbo模型的input token的本钱下降25%,从本来的0.002美金 / 1K token下降为0.0015美金 / 1K token。
  • 2023.09.13会下线gpt-3.5-turbo-0301gpt-4-0314gpt-4-32k-0314 模型,过了这个时间点调用这些模型会恳求失利。

上面说到的这些模型都严格遵循2023.03.01发布的隐私和安全规定,用户经过API发送的数据和API回来的数据不会用于OpenAI大模型的练习。

函数调用示例

场景:我们希望ChatGPT告诉现在Boston的气候状况。

假如只靠ChatGPT是无法完成这个功用的,因为ChatGPT的练习数据只截止到2021年9月,无法知道现在的气候。这也是GPT现在最大的一个问题,不能很好地支撑信息的及时更新。

那应该怎样运用ChatGPT来完成这个功用呢?

我们可以自己界说一个函数来获取当天某个城市的气候状况,ChatGPT只需求依据用户的提问生成我们自界说的函数的参数值(也叫实参),那我们就可以调用自界说函数拿到我们想要的效果,然后把自界说函数生成的效果和对话记载作为Prompt送给ChatGPT,由ChatGPT做一个汇总,终究把汇总的结论回来给用户即可。

用户提问 -> ChatGPT生成函数的实参 -> 开发者调用自界说函数 -> 把函数实行效果+上下文对话记载发送给ChatGPT做汇总 -> 回来汇总结论给用户

下面我们来看一个具体的完成事例:

  • 第一步:提问What’s the weather like in Boston right now?
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"]
      }
    }
  ]
}'

拿到ChatGPT回来的效果,回来效果里content为null,function_call有值,表明需求调用自界说函数get_current_weather,并且回来了自界说函数的参数值。

{
  "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"
  }]
}
  • 第二步:调用自界说函数。
curl https://weatherapi.com/...

拿到自界说函数回来效果

{ "temperature": 22, "unit": "celsius", "description": "Sunny" }
  • 第三步:把自界说函数实行效果和上下文对话记载发送给ChatGPT做汇总。
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"]
      }
    }
  ]
}'

终究ChatGPT回来如下效果:

{
  "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可以智能地依据用户的输入来判别什么时候应该要调用开发者的自界说函数,并且把自界说函数的参数值给回来。开发者就可以直接自己去调用自界说函数拿到想要的效果,终究再把对话记载和自界说函数实行效果发送给大模型去做汇总。

现在这个功用可以在 gpt-4-0613gpt-3.5-turbo-0613这2个模型里运用。

等OpenAI在2023.06.27结束模型晋级后,gpt-4gpt-4-32kgpt-3.5-turbo模型也可以运用这个功用。

新API的运用详情可以参看:developer documentation。

新模型

GPT-4模型

gpt-4-0613 相对于gpt-4,新增了函数调用的支撑。

gpt-4-32k-0613 相对于gpt-4-32k,同样是新增了函数调用的支撑。

在接下来的几周里,OpenAI会把GPT-4 API waiting list上的恳求都尽量审批经过,让开发者可以享用到GPT-4的强壮才能。还没恳求的赶忙去恳求吧。

GPT-3.5 Turbo模型

gpt-3.5-turbo-0613 相对于gpt-3.5-turbo,新增了函数调用的支撑。

gpt-3.5-turbo-16k 支撑的上下文长度扩容到了16K,是gpt-3.5-turbo的4倍,费用是gpt-3.5-turbo的2倍。具体费用是每1K input token需求0.003美金, 每1K output token需求0.004美金。

旧模型下线时间

从2023.06.13开端,OpenAI会开端晋级生产环境gpt-4gpt-4-32kgpt-3.5-turbo模型到最新版别,估计2023.06.27开端就可以运用到晋级后的模型了。

假如开发者不想晋级,可以继续运用旧版别的模型,不过需求在model参数里指定用
gpt-3.5-turbo-0301gpt-4-0314gpt-4-32k-0314

这些旧版别的模型在2023.09.13会下线,后续继续调用会恳求失利。

更低价格

Embedding模型

text-embedding-ada-002现在是OpenAI全部embedding模型里最受欢迎的。

现在运用这个embedding模型的本钱下降为0.0001美金/1K token,本钱下降75%。

GPT-3.5 Turbo模型

gpt-3.5-turbo 模型在收费的时候,既对用户发送的问题(input token)收费,也对API回来的效果(output token)收费。

现在该模型的input token本钱下降25%,每1K input token的费用为0.0015美金。

output token的费用保持不变,仍是0.002美金/1K token。

gpt-3.5-turbo-16k 模型的input token收费是0.003美金/1K token,output token收费是0.004美金/1K token。

总结

文章和示例代码开源在GitHub: GPT实战教程,可以看到全部干流的开源LLM。

大众号:coding进阶。

个人网站:Jincheng’s Blog。

知乎:无忌。

References

  • openai.com/blog/functi…