ChatGPT 模型介绍以及API接口整理

3,559 阅读11分钟

文章内容搬运翻译来自官网,有条件的直接看官网

1.模型总览

1.1.模型列表

模型描述
GPT-4 ( Limited beta)一组在 GPT-3.5 上改进的模型,可以理解并生成自然语言或代码
GPT-3.5 一组在 GPT-3 上改进的模型,可以理解并生成自然语言或代码
DALL·E ( Beta)可以在给定自然语言提示的情况下生成和编辑图像的模型
Whisper ( Beta)一种可以将音频转换为文本的模型
Embeddings 一组可以将文本转换为数字形式的模型
Codex ( Limited beta)一组可以理解和生成代码的模型,包括将自然语言翻译成代码
Moderation 可以检测文本是否敏感或不安全的微调模型
GPT-3一组可以理解和生成自然语言的模型

现在网页上可以申请使用GPT4的对话功能(plus用户),但是gpt4的api还未开放。

开源模型Point-EWhisperJukebox,  CLIP.

1.2.token限制

模型描述MAX TOKENS训练数据时间
gpt-4More capable than any GPT-3.5 model, able to do more complex tasks, and optimized for chat. Will be updated with our latest model iteration.8,192 tokensUp to Sep 2021 (最近应该更新到2023了)
gpt-4-0314Snapshot of gpt-4 from March 14th 2023. Unlike gpt-4, this model will not receive updates, and will only be supported for a three month period ending on June 14th 2023.8,192 tokensUp to Sep 2021
gpt-4-32kSame capabilities as the base gpt-4 mode but with 4x the context length. Will be updated with our latest model iteration.32,768 tokensUp to Sep 2021
gpt-4-32k-0314Snapshot of gpt-4-32 from March 14th 2023. Unlike gpt-4-32k, this model will not receive updates, and will only be supported for a three month period ending on June 14th 2023.32,768 tokensUp to Sep 2021

1.2.GPT-4介绍

GPT-4 是一个大型多模态模型(接受文本输入并输出文本,将来会有图像的输入),由于其更广泛的常识和高级推理,它可以比我们以前的任何模型更准确地解决问题能力,GPT-4 针对聊天进行了优化,但也适用于传统的完成任务

官网介绍

ModelPromptCompletion
8K context$0.03 / 1K tokens$0.06 / 1K tokens
32K context$0.06 / 1K tokens$0.12 / 1K tokens

1.3.GPT-3.5介绍

官网介绍

GPT-3.5 模型可以理解并生成自然语言或代码。我们在 GPT-3.5 系列中功能最强大且最具成本效益的模型gpt-3.5-turbo已针对聊天进行了优化,但也适用于传统的完成任务。

最新模型描述max token训练数据
gpt-3.5-turbo功能最强大的 GPT-3.5 模型,并针对聊天进行了优化,成本仅为text-davinci-003. 将使用我们最新的模型迭代进行更新。4,096 个代币截至 2021 年 9 月
gpt-3.5-turbo-03012023 年 3 月 1 日的快照gpt-3.5-turbo。与 不同的是gpt-3.5-turbo,此模型不会收到更新,并且只会在 2023 年 6 月 1 日结束的三个月内提供支持。4,096 个代币截至 2021 年 9 月
text-davinci-003可以以比居里、巴贝奇或 ada 模型更好的质量、更长的输出和一致的指令遵循来完成任何语言任务。还支持在文本中插入补全。4,097 个代币截至 2021 年 6 月
text-davinci-002类似的能力,text-davinci-003但训练有监督的微调而不是强化学习4,097 个代币截至 2021 年 6 月
code-davinci-002针对代码完成任务进行了优化8,001 个代币截至 2021 年 6 月

官方建议使用gpt-3.5-turbo其他 GPT-3.5 模型,因为它的成本较低。

2.文字生成API

如果使用https请求,可以在Header中携带key

//header中加入
Authorization: Bearer OPENAI_API_KEY

//curl示例

curl https://api.openai.com/v1/models \

  -H "Authorization: Bearer $OPENAI_API_KEY" \

  -H "OpenAI-Organization: org-YZbbKQFVsBoy1AK9ur96osTF"

python安装对应库pip3 install openai

2.1.模型列表查询

import os

import openai

openai.organization = "org-YZbbKQFVsBoy1AK9ur96osTF"

openai.api_key = os.getenv("OPENAI_API_KEY")

openai.Model.list()

返回的模型示例

{

  "id":"chatcmpl-abc123",

  "object":"chat.completion",

  "created":1677858242,

  "model":"gpt-3.5-turbo-0301",

  "usage":{

      "prompt_tokens":13,

      "completion_tokens":7,

      "total_tokens":20

  },

  "choices":[

      {

        "message":{

            "role":"assistant",

            "content":"\n\nThis is a test!"

        },

        "finish_reason":"stop",

        "index":0

      }

  ]

}

2.2.文字生成

import os

import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

openai.Completion.create(

  model="text-davinci-003",

  prompt="Say this is a test",

  max_tokens=7,

  temperature=0

)

回复

{

  "id": "cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7",

  "object": "text_completion",

  "created": 1589478378,

  "model": "text-davinci-003",

  "choices": [

    {

      "text": "\n\nThis is indeed a test",

      "index": 0,

      "logprobs": null,

      "finish_reason": "length"

    }

  ],

  "usage": {

    "prompt_tokens": 5,

    "completion_tokens": 7,

    "total_tokens": 12

  }

}

2.2.1.参数详解


model String 必须

要使用的模型的 ID。您可以使用List models API 查看所有可用模型,或查看我们的模型概述以了解它们的描述。


请求内容 prompt string or array Optional Defaults to <|endoftext|>

生成完成的提示,编码为字符串、字符串数组、标记数组或标记数组数组。

请注意,<|endoftext|> 是模型在训练期间看到的文档分隔符,因此如果未指定提示,模型将生成新文档的开头。


后缀 suffix string Optional  Defaults to null

插入文本完成后出现的后缀。


max_tokens integer Optional Defaults to 16

完成时生成的最大令牌数。

您的提示加上的令牌计数max_tokens不能超过模型的上下文长度。大多数模型的上下文长度为 2048 个标记(最新模型除外,它支持 4096)。


temperature number Optional Defaults to 1

使用什么采样温度,介于 0 和 2 之间。较高的值(如 0.8)将使输出更加随机,而较低的值(如 0.2)将使输出更加集中和确定。

我们通常建议改变这个或top_p但不是两者。


top_p number Optional Defaults to 1

一种替代温度采样的方法,称为核采样,其中模型考虑具有 top_p 概率质量的标记的结果。所以 0.1 意味着只考虑构成前 10% 概率质量的标记。

我们通常建议改变这个或temperature但不是两者。


n integer Optional Defaults to 1

为每个提示生成多少完成。

注意:因为这个参数会产生很多完成,它会很快消耗你的令牌配额。请谨慎使用并确保您对max_tokens和进行了合理的设置stop

stream boolean Optional Defaults to false

是否回流部分进度。如果设置,令牌将在可用时作为仅数据服务器发送事件发送,流由**data: [DONE]**消息终止。

ogprobs integer Optional Defaults to null

包括最有可能标记的对数概率logprobs,以及所选标记。例如,如果logprobs是 5,API 将返回 5 个最有可能的标记的列表。API 将始终返回采样令牌的 ,因此响应中logprob最多可能有元素。logprobs+1

的最大值logprobs为 5。如果您需要更多,请通过我们的帮助中心联系我们并描述您的用例。

echo boolean Optional Defaults to false

除了完成之外回显提示

stop string or array Optional Defaults to null

API 将停止生成更多令牌的最多 4 个序列。返回的文本将不包含停止序列。

presence_penalty number Optional Defaults to 0

-2.0 和 2.0 之间的数字。正值会根据到目前为止是否出现在文本中来惩罚新标记,从而增加模型谈论新主题的可能性。

查看有关频率和存在惩罚的更多信息。

frequency_penalty number Optional Defaults to 0

-2.0 和 2.0 之间的数字。正值会根据新标记在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性。

查看有关频率和存在惩罚的更多信息。

best_of integer Optional Defaults to 1

best_of在服务器端生成完成并返回“最佳”(每个标记具有最高对数概率的那个)。无法流式传输结果。

与 一起使用时nbest_of控制候选完成的数量并n指定要返回的数量 -best_of必须大于n

注意:因为这个参数会产生很多完成,它会很快消耗你的令牌配额。请谨慎使用并确保您对max_tokens和进行了合理的设置stop

logit_bias map Optional Defaults to null

修改指定标记出现在完成中的可能性。

接受一个 json 对象,该对象将标记(由 GPT 标记器中的标记 ID 指定)映射到从 -100 到 100 的相关偏差值。您可以使用此标记器工具(适用于 GPT-2 和 GPT-3)转换文本到令牌 ID。从数学上讲,偏差会在采样之前添加到模型生成的对数中。确切的效果因模型而异,但 -1 和 1 之间的值应该会减少或增加选择的可能性;像 -100 或 100 这样的值应该导致相关令牌的禁止或独占选择。

例如,您可以传递**{"50256": -100}**以防止生成 <|endoftext|> 标记。

user string Optional

代表您的最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为。了解更多

2.3.聊天

ChatGPT models are optimized for dialogue. The performance of gpt-3.5-turbo is on par with Instruct Davinci.

Learn more about ChatGPT

Model****Usage

gpt-3.5-turbo$0.002 / 1K tokens

import os

import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

completion = openai.ChatCompletion.create(

  model="gpt-3.5-turbo",

  messages=[

    {"role": "user", "content": "Hello!"}

  ]

)

print(completion.choices[0].message)

回复

{

  "id": "chatcmpl-123",

  "object": "chat.completion",

  "created": 1677652288,

  "choices": [{

    "index": 0,

    "message": {

      "role": "assistant",

      "content": "\n\nHello there, how may I assist you today?",

    },

    "finish_reason": "stop"

  }],

  "usage": {

    "prompt_tokens": 9,

    "completion_tokens": 12,

    "total_tokens": 21

  }

}

2.3.1.参数

messages array Required

聊天格式生成聊天完成的消息。

2.3.2.聊天格式

Note: you need to be using OpenAI Python v0.27.0 for the code below to work

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?"}

    ]

)

主要输入是消息参数。消息必须是一个消息对象数组,其中每个对象都有一个角色(“系统”、“用户”或“助手”)和内容(消息的内容)。对话可以短至 1 条消息或填满许多页面。

通常,对话首先使用系统消息进行格式化,然后是交替的用户和助理消息。

系统消息有助于设置助手的行为。在上面的例子中,助手被指示“你是一个有用的助手”。

gpt-3.5-turbo-0301并不总是高度关注系统消息。未来的模型将被训练为更加关注系统消息。

用户消息有助于指导助手。它们可以由应用程序的最终用户生成,或由开发人员设置为指令。

助手消息帮助存储先前的响应。它们也可以由开发人员编写,以帮助提供所需行为的示例。

当用户指令引用先前的消息时,包括对话历史记录会有所帮助。在上面的示例中,用户的最后一个问题是“它在哪里播放?” 仅在有关 2020 年世界大赛的先前消息的上下文中才有意义。由于模型对过去的请求没有记忆,因此必须通过对话提供所有相关信息。如果对话不适合模型的令牌限制,则需要以某种方式缩短它。

响应格式

{

'id': 'chatcmpl-6p9XYPYSTTRi0xEviKjjilqrWU2Ve',

'object': 'chat.completion',

'created': 1677649420,

'model': 'gpt-3.5-turbo',

'usage': {'prompt_tokens': 56, 'completion_tokens': 31, 'total_tokens': 87},

'choices': [

  {

    'message': {

      'role': 'assistant',

      'content': 'The 2020 World Series was played in Arlington, Texas at the Globe Life Field, which was the new home stadium for the Texas Rangers.'},

    'finish_reason': 'stop',

    'index': 0

  }

  ]

}

2.4.文本编辑

import os

import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

openai.Edit.create(

  model="text-davinci-edit-001",

  input="What day of the wek is it?",

  instruction="Fix the spelling mistakes"

)

回复

{

  "object": "edit",

  "created": 1589478378,

  "choices": [

    {

      "text": "What day of the week is it?",

      "index": 0,

    }

  ],

  "usage": {

    "prompt_tokens": 25,

    "completion_tokens": 32,

    "total_tokens": 57

  }

}

2.4.1.参数

input string Optional Defaults to ''

用作编辑起点的输入文本。

instruction string Required

告诉模型如何编辑提示的指令。

3.图像

3.1.Image models

Build DALL·E directly into your apps to generate and edit novel images and art. Our image models offer three tiers of resolution for flexibility.

Learn more

Resolution****Price

1024×1024$0.020 / image

512×512$0.018 / image

256×256$0.016 / image

3.2.图像生成


import os

import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

openai.Image.create(

  prompt="A cute baby sea otter",

  n=2,

  size="1024x1024"

)

参数

size string Optional Defaults to 1024x1024

生成图像的大小。必须是256x256512x512或 之一1024x1024

response_format stringOptional Defaults to url

生成的图像返回的格式。必须是 或url之一b64_json

3.3.图像修改


import os

import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

openai.Image.create_edit(

  image=open("otter.png", "rb"),

  mask=open("mask.png", "rb"),

  prompt="A cute baby sea otter wearing a beret",

  n=2,

  size="1024x1024"

)

参数

image stringRequired

要编辑的图像。必须是有效的 PNG 文件,小于 4MB,并且是方形的。如果未提供遮罩,图像必须具有透明度,将用作遮罩。

mask string Optiona

附加图像,其完全透明区域(例如,alpha 为零的区域)指示image应编辑的位置。必须是有效的 PNG 文件,小于 4MB,并且与image.

3.4.图像变体

import os

import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

openai.Image.create_variation(

  image=open("otter.png", "rb"),

  n=2,

  size="1024x1024"

)

4.语音

Whisper can transcribe speech into text and translate many languages into English.

Learn more about Whisper

Model****Usage

Whisper$0.006 / minute (rounded to the nearest second)

4.1.语音转文字

import os

import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

audio_file = open("german.m4a", "rb")

transcript = openai.Audio.translate("whisper-1", audio_file)

5.微调

5.1.说明

Fine-tunes

比即时设计更高质量的结果

能够训练比提示中更多的例子

由于更短的提示而节省了代币

更低的延迟请求

5.2.资费

Fine-tuning models

Create your own custom models by fine-tuning our base models with your training data. Once you fine-tune a model, you’ll be billed only for the tokens you use in requests to that model.

Learn more about fine-tuning

ModelTrainingUsage

Ada0.0004/1Ktokens0.0004 / 1K tokens0.0016 / 1K tokens

Babbage0.0006/1Ktokens0.0006 / 1K tokens0.0024 / 1K tokens

Curie0.0030/1Ktokens0.0030 / 1K tokens0.0120 / 1K tokens

Davinci0.0300/1Ktokens0.0300 / 1K tokens0.1200 / 1K tokens

5.3.模型限制

微调目前仅适用于以下基础模型:davincicuriebabbageada。这些是原始模型,在训练后没有任何说明(例如text-davinci-003)。您还可以继续微调微调模型以添加其他数据,而无需从头开始。

5.4.数据准备

CLI数据准备工具

我们开发了一个工具来验证、提供建议和重新格式化您的数据:

openai tools fine_tunes.prepare_data -f <LOCAL_FILE>

此工具接受不同的格式,唯一的要求是它们包含提示和完成列/键。您可以传递CSV、TSV、XLSX、JSONJSONL文件,它会在指导您完成建议的更改过程后将输出保存到 JSONL 文件中以备微调。

准备训练数据

训练数据是你如何教 GPT-3 你想让它说什么。

您的数据必须是JSONL文档,其中每一行都是一个提示完成对,对应于一个训练示例。您可以使用我们的CLI 数据准备工具轻松地将您的数据转换成这种文件格式

5.4.创建

import os

import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

openai.FineTune.create(training_file="file-XGinujblHPwGLSztz8cPS8XY")

training_file string 必需的

包含训练数据的上传文件的 ID。

有关如何上传文件,请参见上传文件。

您的数据集必须格式化为 JSONL 文件,其中每个训练示例都是一个带有键“提示”和“完成”的 JSON 对象。此外,您必须上传带有目的的文件fine-tune

有关详细信息,请参阅微调指南。

验证文件 string option

包含验证数据的上传文件的 ID。

如果您提供此文件,该数据将用于在微调期间定期生成验证指标。这些指标可以在微调结果文件中查看。您的火车和验证数据应该是互斥的。

您的数据集必须格式化为 JSONL 文件,其中每个验证示例都是一个带有键“prompt”和“completion”的 JSON 对象。此外,您必须上传带有目的的文件fine-tune

有关详细信息,请参阅微调指南。

model string 可选 默认居里

要微调的基本模型的名称。您可以选择“ada”、“babbage”、“curie”、“davinci”或 2022-04-21 之后创建的微调模型之一。要了解有关这些模型的更多信息,请参阅 模型文档。

n_epochs整数选修的默认为4

训练模型的时期数。一个纪元指的是训练数据集的一个完整周期。

批量大小整数选修的默认为空

用于训练的批量大小。批量大小是用于训练单个前向和后向传递的训练示例数。

默认情况下,批量大小将动态配置为训练集中示例数量的 0.2%,上限为 256 - 通常,我们发现较大的批量大小往往更适用于较大的数据集。

学习率乘数数字选修的默认为空

用于训练的学习率乘数。微调学习率是用于预训练的原始学习率乘以该值。

默认情况下,学习率乘数是 0.05、0.1 或 0.2,具体取决于 final batch_size(较大的学习率往往在较大的批量大小下表现更好)。我们建议使用 0.02 到 0.2 范围内的值进行试验,以查看产生最佳结果的值。

prompt_loss_weight数字选修的默认为0.01

用于提示令牌损失的权重。这控制了模型尝试学习生成提示的程度(与权重始终为 1.0 的完成相比),并且可以在完成较短时为训练增加稳定效果。

如果提示非常长(相对于完成),则减少此权重以避免过度优先学习提示可能是有意义的。

计算分类指标布尔值选修的默认为假

如果设置,我们将在每个时期结束时使用验证集计算特定于分类的指标,例如准确性和 F-1 分数。可以在结果文件中查看这些指标。

为了计算分类指标,您必须提供一个 validation_file. 此外,您必须指定classification_n_classes多类分类或 classification_positive_class二元分类。

分类_n_类整数选修的默认为空

分类任务中的类数。

多类分类需要此参数。

classification_positive_class 分类 string 可选 默认null

二元分类中的正类。

在进行二元分类时,需要此参数来生成精度、召回率和 F1 指标。

分类_betas大批选修的默认为空

如果提供,我们将计算指定 beta 值的 F-beta 分数。F-beta 分数是 F-1 分数的推广。这仅用于二进制分类。

当 beta 为 1(即 F-1 分数)时,精确率和召回率被赋予相同的权重。Beta 分数越大,召回率越高,精确率越低。Beta 分数越小,精确度越重要,召回率越低。

后缀 string 可选 默认为空

最多 40 个字符的字符串,将添加到您的微调模型名称中。

例如,suffix“custom-model-name”的 a 会生成类似ada:ft-your-org:custom-model-name-2022-02-15-04-21-04.

微调列表

import os

import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

openai.FineTune.list()

检索微调

import os

import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

openai.FineTune.retrieve(id="ft-AF1WoRqd3aJAHsqc9NY7iL8F")

fine_tune_id string 必需

微调作业的ID

取消微调

import os

import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

openai.FineTune.cancel(id="ft-AF1WoRqd3aJAHsqc9NY7iL8F")

fine_tune_id string 必需的

要取消的微调作业的 ID

列出微调事件

得到 api.openai.com/v1/fine-tun… _

获取微调作业的细粒度状态更新。

import os

import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

openai.FineTune.list_events(id="ft-AF1WoRqd3aJAHsqc9NY7iL8F")

删除微调模型

删除 

api.openai.com/v1 /models/{模型}

删除微调模型。您必须在您的组织中拥有所有者角色。

import os

import openai

openai.api_key = os.getenv("OPENAI_API_KEY")

openai.Model.delete("curie:ft-acmeco-2021-03-03-21-44-20")

路径参数

model string 必需的

使用

import openai

openai.Completion.create(

    model=FINE_TUNED_MODEL,

    prompt=YOUR_PROMPT)