GPT Models

​ OpenAI的GPT(生成式预训练变换器)模型经过训练,能够理解自然语言和代码。GPT模型对输入进行处理,并生成相应的文本输出。GPT模型的输入也被称为”提示”。设计一个提示的本质上就是如何对GPT模型进行”编程”,通常是通过提供指令或一些成功完成任务的示例来实现。

​ 使用GPT模型,您可以构建以下类型的应用程序:

  • 草拟文件
  • 编写计算机代码
  • 回答关于知识库的问题
  • 分析文本
  • 创建对话代理
  • 为软件提供自然语言界面
  • 辅导各种学科
  • 进行语言翻译
  • 为游戏中的角色进行模拟

这只是其中的一部分应用领域,实际上还有很多其他用途可以利用GPT模型实现。

​ 通过OpenAI API使用GPT模型时,需要发送包含输入和API密钥的请求,并接收包含模型输出的响应。GPT最新的模型gpt-4和gpt-3.5-turbo,可以通过ChatCompletion API访问。目前只有较早的模型可以通过完成ChatCompletion API访问。

  MODEL FAMILIES API ENDPOINT
Newer models (2023–) gpt-4, gpt-3.5-turbo https://api.openai.com/v1/chat/completions
Older models (2020–2022) text-davinci-003, text-davinci-002, davinci, curie, babbage, ada https://api.openai.com/v1/completions

​ 你可以在 Playground 中尝试 GPT。如果你不确定使用哪个模型,请使用 gpt-3.5-turbo 或 gpt-4。

ChatCompletion API

发送API请求

​ 使用ChatCompletion API来完成聊天(Chat)模型的访问。每次请求包含消息列表作为输入,聊天模型返回模型生成的消息作为输出。看下面的代码示例:

import openai

openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Who won the world series in 2020?"},
        {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
        {"role": "user", "content": "Where was it played?"}
    ]
)

这里查看完整的API 文档

​ 主要输入是messages参数。messages必须是一个消息对象列表,每个对象都有一个角色(可以是”system”、”user”或”assistant”)和内容。对话可以只有一条消息,也可以有多次来回交互。

​ 通常,一个对话以系统消息开始,然后是用户和助手消息交替出现。系统消息有助于设置聊天模型的行为。例如,可以修改聊天模型的个性或提供有关其在整个对话中应该如何行为的具体指示。请注意系统消息是可选的,如果没有系统消息,模型的行为可能类似于使用通用消息,如“您是一个乐于助人的助手。”

​ 用户消息提供了对话助手做出回应的请求或评论。助手消息存储了先前的助手回复,但您也可以编写助手消息来示例所需的行为。

​ 包括对话历史在内对于用户指令中涉及先前消息时非常重要。在上面的例子中,用户的最后一个问题”Where was it played?”只有在关于2020年世界大赛的先前消息的背景下才有意义。因为模型没有记忆过去的请求,所有相关信息都必须作为对话历史的一部分在每个请求中提供。如果对话超出模型的标记限制,就需要以某种方式对其进行缩短

​ 如果要仿照ChatGPT的聊天效果可以设置Stream=true

接收API结果

下面是一个API 响应结果的示例:

{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "The 2020 World Series was played in Texas at Globe Life Field in Arlington.",
        "role": "assistant"
      }
    }
  ],
  "created": 1677664795,
  "id": "chatcmpl-7QyqpwdfhqwajicIEznoc6Q47XAyW",
  "model": "gpt-3.5-turbo-0613",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 17,
    "prompt_tokens": 57,
    "total_tokens": 74
  }
}

在Python中,可以使用response[‘choices’][0][‘message’][‘content’]来提取助手的回复。

每个回复都会包含一个finish_reason(完成原因)。finish_reason可能的取值有:

  • stop:API返回完整的消息,或者由stop参数提供的停止序列之一终止的消息
  • length:由于max_tokens参数或令牌限制,模型输出不完整
  • function_call:模型决定调用函数
  • content_filter:由于我们的内容过滤器的标志,省略了内容
  • null:API响应仍在进行中或不完整 根据输入参数(例如提供函数),模型的响应可能包含不同的信息。