文章内容搬运翻译来自官网,有条件的直接看官网
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-E, Whisper, Jukebox, CLIP.
1.2.token限制
| 模型 | 描述 | MAX TOKENS | 训练数据时间 |
|---|---|---|---|
| gpt-4 | More 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 tokens | Up to Sep 2021 (最近应该更新到2023了) |
| gpt-4-0314 | Snapshot 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 tokens | Up to Sep 2021 |
| gpt-4-32k | Same capabilities as the base gpt-4 mode but with 4x the context length. Will be updated with our latest model iteration. | 32,768 tokens | Up to Sep 2021 |
| gpt-4-32k-0314 | Snapshot 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 tokens | Up to Sep 2021 |
1.2.GPT-4介绍
GPT-4 是一个大型多模态模型(接受文本输入并输出文本,将来会有图像的输入),由于其更广泛的常识和高级推理,它可以比我们以前的任何模型更准确地解决问题能力,GPT-4 针对聊天进行了优化,但也适用于传统的完成任务
| Model | Prompt | Completion |
|---|---|---|
| 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-0301 | 2023 年 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在服务器端生成完成并返回“最佳”(每个标记具有最高对数概率的那个)。无法流式传输结果。
与 一起使用时n,best_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.
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.
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
生成图像的大小。必须是256x256、512x512或 之一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.
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.说明
比即时设计更高质量的结果
能够训练比提示中更多的例子
由于更短的提示而节省了代币
更低的延迟请求
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.
ModelTrainingUsage
Ada0.0016 / 1K tokens
Babbage0.0024 / 1K tokens
Curie0.0120 / 1K tokens
Davinci0.1200 / 1K tokens
5.3.模型限制
微调目前仅适用于以下基础模型:davinci、curie、babbage和ada。这些是原始模型,在训练后没有任何说明(例如text-davinci-003)。您还可以继续微调微调模型以添加其他数据,而无需从头开始。
5.4.数据准备
我们开发了一个工具来验证、提供建议和重新格式化您的数据:
openai tools fine_tunes.prepare_data -f <LOCAL_FILE>
此工具接受不同的格式,唯一的要求是它们包含提示和完成列/键。您可以传递CSV、TSV、XLSX、JSON或JSONL文件,它会在指导您完成建议的更改过程后将输出保存到 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)