文章目录
前言
对ChatGPT的API参数进行了总结,对每个参数进行了分析,也对整个OpenAI的模型进行了分析,希望你在调用ChatGPT的API,完成个性化任务时,能够快速进行开发。
PS:要想正常调用ChatGPT的API,需要开启魔法,最好将你的魔法地区选为US区域
ChatGPT
temperature:预测置信度,是一个介于 0 和 1 之间的值,基本上可以控制模型在进行这些预测时的置信度。降低值,意味着它将承担更少的风险,并且完成将更加准确和确定。升高值将导致更多样化的完成。
通常最好为所需输出明确定义的任务设置低temperature。高temperature对于需要多样性或创造力的任务可能很有用
单个请求(prompt和completion)中处理的
Token
总数不能超过模型的最大上下文长度。对于大多数模型,这是 4,096 个token或大约 3,000 个单词。对于普通英文文本,一个标记通常对应于 ~4 个字符的文本。这相当于大约 ¾ 个单词(因此 100 个token = = = 75 个单词)
模型
列出并描述 API 中可用的各种模型,并提供有关每个模型的基本信息,例如所有者和可用性
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Model.list()
检索模型
查看某个模型信息
API参数:
-
model:string,必填
查询的模型ID
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Model.retrieve("text-davinci-003")
功能 | 模型ID |
---|---|
聊天/completions | gpt-4, gpt-4-0314, gpt-4-32k, gpt-4-32k-0314, gpt-3.5-turbo, gpt-3.5-turbo-0301 |
completions | text-davinci-003, text-davinci-002, text-curie-001, text-babbage-001, text-ada-001 |
编辑(文本、代码) | text-davinci-edit-001, code-davinci-edit-001 |
音频/转录 | whisper-1 |
音频/翻译 | whisper-1 |
微调 | davinci, curie, babbage, ada |
嵌入 | text-embedding-ada-002, text-search-ada-doc-001 |
审核 | text-moderation-stable, text-moderation-latest |
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 |
模型ID | 描述 | 最大Token数 | 训练数据 |
---|---|---|---|
gpt-4 | 比任何 GPT-3.5 模型都更强大,能够执行更复杂的任务,并针对聊天进行了优化。将使用最新的模型迭代进行更新。 | 8,192 个代币 | 截至 2021 年 9 月 |
gpt-4-0314 | 2023 年 3 月 14 日的快照。与gpt-4 不同的是,此模型不会收到更新,并且会在新版本发布后 3 个月后弃用。 | 8,192 个代币 | 截至 2021 年 9 月 |
gpt-4-32k | 与gpt-4 模式有相同的功能,但上下文长度是其 4 倍。将使用最新的模型迭代进行更新。 | 32,768 个代币 | 截至 2021 年 9 月 |
gpt-4-32k-0314 | 2023 年 3 月 14 日的快照。与gpt-4-32k 不同的是,此模型不会收到更新,并且会在新版本发布后 3 个月后弃用。 | 32,768 个代币 | 截至 2021 年 9 月 |
对于许多基本任务,GPT-4 和 GPT-3.5 模型之间的差异并不显着。然而,在更复杂的推理情况下,GPT-4 比之前的任何模型都更有能力。
GPT-3.5
GPT-3.5 模型可以理解并生成自然语言或代码。在 GPT-3.5 系列中功能最强大且最具成本效益的模型gpt-3.5-turbo
已针对聊天进行了优化,但也适用于传统的完成任务。
模型ID | 描述 | 最大Token数 | 训练数据 |
---|---|---|---|
gpt-3.5-turbo | 功能最强大的 GPT-3.5 模型,并针对聊天进行了优化,成本仅为text-davinci-003 的1/10. 将使用最新的模型迭代进行更新。 | 4,096 个token | 截至 2021 年 9 月 |
gpt-3.5-turbo-0301 | 2023 年 3 月 1 日的快照。与 gpt-3.5-turbo 不同的是,此模型不会收到更新,并且会在新版本发布 3 个月后弃用。 | 4,096 个token | 截至 2021 年 9 月 |
text-davinci-003 | 比curie、babbage或 ada 模型更好的质量、更长的输出和一致的指令来完成任何语言任务。还支持在文本中插入补全。 | 4,097 个token | 截至 2021 年 6 月 |
text-davinci-002 | 与text-davinci-003 有类似的能力,但是通过有监督的微调训练的,而不是强化学习 | 4,097 个token | 截至 2021 年 6 月 |
code-davinci-002 | 针对代码完成任务进行了优化 | 8,001 个token | 截至 2021 年 6 月 |
GPT-3
GPT-3 模型可以理解和生成自然语言。这些模型被更强大的 GPT-3.5 代模型所取代。但是,原始 GPT-3 基本模型(davinci
、curie
、ada
和babbage
)是当前唯一可用于微调的模型。
最新款ID | 描述 | 最大Token数 | 训练数据 |
---|---|---|---|
text-curie-001 | 非常有能力,比davinci更快,成本更低。 | 2,049 个token | 截至 2019 年 10 月 |
text-babbage-001 | 能够执行简单的任务,速度非常快,成本更低。 | 2,049 个token | 截至 2019 年 10 月 |
text-ada-001 | 能够执行非常简单的任务,通常是 GPT-3 系列中最快的型号,而且成本最低。 | 2,049 个token | 截至 2019 年 10 月 |
davinci | 功能最强大的 GPT-3 模型。可以完成其他模型可以完成的任何任务,而且通常质量更高。 | 2,049 个token | 截至 2019 年 10 月 |
curie | 非常有能力,但比davinci更快,成本更低。 | 2,049 个token | 截至 2019 年 10 月 |
babbage | 能够执行简单的任务,速度非常快,成本更低。 | 2,049 个token | 截至 2019 年 10 月 |
ada | 能够执行非常简单的任务,通常是 GPT-3 系列中最快的型号,而且成本最低。 | 2,049 个token | 截至 2019 年 10 月 |
模型比较
GPT比较工具(可并排运行不同的模型来比较输出、设置和响应时间):https://gpttools.com/comparisontool
Evals 是一个用于评估 LLM 和 LLM 系统的框架,也是一个开源的基准注册中心:https://github.com/openai/evals
Completion
给定一个prompt,该模型将返回一个或多个预测的结果,并且还可以返回每个位置的替代标记的概率
API参数:
-
model:string,必填。
模型ID
-
prompt:提示语,选填,默认为
<|endoftext|>
。
<|endoftext|>
是模型在训练期间看到的文档分隔符,因此如果未指定prompt,模型将生成新文档的开头。 -
suffix:string,选填,默认为
null
。
插入文本完成后出现的后缀 -
max_tokens:int,选填,默认为
16
。
完成时生成的最大token数。 -
temperature:数字,选填,默认为
1
。
预测置信度,是一个介于 0 和 1 之间的值,基本上可以控制模型在进行这些预测时的置信度。降低值,意味着它将承担更少的风险,并且完成将更加准确和确定。升高值将导致更多样化的完成。 -
top_p:数字,选填,默认为
1
。
代替temperature
的方法,称为核采样,让模型考虑top_p
概率的结果,如0.1只考虑前10%的结果(此参数与temperature
两者用其一就好) -
n:int,选填,默认为
1
。
为每个提示生成多少个结果。(谨慎使用,此参数会消耗token额度) -
stream:布尔值,选填,默认为
Fasle
。
是否使用事件数据流格式发送 -
logprobs:整数,选填,默认为
null
。
最有可能的token的对数概率,最大值为5。 -
echo:布尔值,选填,默认为
False
。
回显提示。 -
stop:string或者数组,选填,默认为
null
。
API 将停止生成更多令牌的最多 4 个序列。返回的文本将不包含停止序列 -
presence_penalty:数字,选填,默认为
0
。
存在惩罚,-2.0 和 2.0 之间的数字。正值会根据到目前为止是否出现在文本中来惩罚新标记,从而增加模型谈论新主题的可能性。 -
frequency_penalty:数字,选填,默认为
0
。
频率惩罚,-2.0 和 2.0 之间的数字。正值会根据新标记在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性。频率和存在惩罚可用于降低对令牌的重复序列进行采样的可能性。他们通过添加贡献直接修改 logits(非标准化对数概率)来工作。
-
best_of:数字,选填,默认为
1
。
生成结果并返回“最佳”(每个结果具有最高对数概率的那个)。无法流式传输结果。与n
一起使用时,best_of
控制候选完成的数量并n
指定要返回的数量 ,best_of
必须大于n
。(谨慎使用,此参数会消耗token额度,并确保您对
max_tokens
和进行了合理的设置stop
。) -
logit_bias:map,选填,默认为
null
。
修改指定标记出现在完成中的可能性。接受一个 json 对象,该对象将token(由 GPT 分词器中的token ID 指定)映射到从 -100 到 100 的相关偏差值。您可以使用此分词器工具(适用于 GPT-2 和 GPT-3)来转换文本到token ID。从数学上讲,偏差会在采样之前添加到模型生成的对数中。确切的效果因模型而异,但 -1 和 1 之间的值应该会减少或增加选择的可能性;像 -100 或 100 这样的值应该导致相关token的禁止或独占选择。例如,您可以传递
{"50256": -100}
以防止生成 <|endoftext|> 标记 -
user:string,选填。
最终用户的唯一标识符,可以帮助 OpenAI 监控和检测滥用行为
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
)
ChatCompletion
Model | Usage |
---|---|
gpt-3.5-turbo | $0.002 / 1K tokens |
相比Completion,参数将prompt
换成了message
,其他都不变
- message:数组,必填
- role:string,必填。
这条消息的角色,system
,user
,assistant
- content:string,必填。
信息内容 - name:string,选填。
使用者名字,包含az、AZ、0-9 和下划线,最大长度为 64 个字符
- role:string,必填。
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)
编辑
给定prompt
和instruction
,模型将返回提示的编辑版本
API参数:
- model:string,必填
模型ID,text-davinci-edit-001
orcode-davinci-edit-001
- input:string,选填,默认为
“”
用于编辑的文本 - instruction:string,必填
操作说明,告诉模型如何编辑输入的指令 - n:整数,选填,默认为
1
为输入和指令生成多少个 - temperature:数字,选填,默认为
1
。
预测置信度,是一个介于 0 和 1 之间的值,基本上可以控制模型在进行这些预测时的置信度。降低值,意味着它将承担更少的风险,并且完成将更加准确和确定。升高值将导致更多样化的完成。 - top_p:数字,选填,默认为
1
。
代替temperature
的方法,称为核采样,让模型考虑top_p
概率的结果,如0.1只考虑前10%的结果(此参数与temperature
两者用其一就好)
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
}
}
图像
Resolution | Price |
---|---|
1024×1024 | $0.020 / image |
512×512 | $0.018 / image |
256×256 | $0.016 / image |
创建图像
API参数:
-
prompt:string,必填。
要生成的图像的文本描述,最大长度为1000个字符 -
n:整数,选填,默认为
1
。
要生成的图像数量,介于1和10之间 -
size:string,选填,默认为
1024 x 1024
生成图像的大小。三种尺寸:
256 x 256
、512 x 512
、1024 x 1024
-
response_format:string,选填,默认是
url
.响应格式,生成的图像返回的格式。
url
或者b64_json
-
user:string,选填。
代表用户的唯一标识,帮助OpenAI监控和检测
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"
)
图像编辑
在给定原始图像和提示的情况下创建编辑或扩展图像。
相比图像创建,多了两个必要参数image
和mask
,其他都一样
API请求参数:
-
image:string,必填
要编辑的图像。必须是有效的 PNG 文件,小于 4MB,并且是方形的。如果未提供mask,图像必须具有透明度,将用作mask。 -
mask:string,必填
附加图像,其完全透明区域(例如,alpha 为零的区域)指示
image
应编辑的位置。必须是有效的 PNG 文件,小于 4MB,和image
一样
图像变换
将给定的图像进行修改,变体
api参数和图像创建一样
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"
)
嵌入
用于表述文本的嵌入向量
Model | Usage |
---|---|
Ada v2 | $0.0004 / 1K tokens |
Ada v1 | $0.0040 / 1K tokens |
Babbage v1 | $0.0050 / 1K tokens |
Curie v1 | $0.0200 / 1K tokens |
Davinci v1 | $0.2000 / 1K tokens |
API请求参数:
- model:string,必填
使用的模型ID - input:string或array,必填
输入文本以获取嵌入,编码为字符串或标记数组。要在单个请求中获取多个输入的嵌入,请传递一个字符串数组或token数组。每个输入的长度不得超过 8192 个token。 - user:string,选填
代表用户的唯一标识,帮助OpenAI监控和检测
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Embedding.create(
model="text-embedding-ada-002",
input="The food was delicious and the waiter..."
)
嵌入通常用于:
- 搜索(结果按与查询字符串的相关性排序)
- 聚类(其中文本字符串按相似性分组)
- 推荐(推荐具有相关文本字符串的项目)
- 异常检测(识别出相关性很小的异常值)
- 多样性测量(分析相似性分布)
- 分类(其中文本字符串按其最相似的标签分类)
嵌入是浮点数的向量(列表)。两个向量之间的距离衡量它们的相关性。小距离表示高相关性,大距离表示低相关性。
声音
将声音转换为文本
Model | Usage |
---|---|
Whisper | $0.006 / minute (四舍五入到最接近的秒数) |
声音转录
API参数:
- file:string,必填
要转换的音频文件,格式有:MP3、MP4、mpeng、mpga、m4a、wav、webm
。文件上传目前限制为 25 MB - model:string,必填
模型ID,当前仅可用whisper-1
- prompt:string,选填
可选文本,用于指导模型的风格或继续之前的音频片段 - response_format:string,选填,默认
json
输出的格式,采用以下选项之一:json、text、srt、verbose_json 或 vtt
。 - temperature:数字,选填,默认为
0
预测置信度,是一个介于 0 和 1 之间的值,基本上可以控制模型在进行这些预测时的置信度。降低值,意味着它将承担更少的风险,并且完成将更加准确和确定。升高值将导致更多样化的完成。 - language:string,选填
输入音频的语言。以ISO-639-1格式提供输入语言将提高准确性和延迟。
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
audio_file = open("audio.mp3", "rb")
transcript = openai.Audio.transcribe("whisper-1", audio_file)
翻译
将音频翻译为英文
API参数没有language
,其他和转录参数一样。
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)
基础模型针对98种语言进行训练的
文件
文件用于上传与微调一起使用的文档
列出文件
返回属于用户组织的文件列表(前提是你上传过,否则为空)
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.File.list()
上传文件
上传包含要跨各种功能使用的文档文件。目前,一个组织上传的所有文件的大小最大可达 1 GB。
API参数:
-
file:string,必填。
要上传的JSON 行文件的名称。
如果
purpose
设置为“微调”,则每一行都是一个 JSON 记录,其中包含代表您的训练示例的“prompt
”和“completion
”字段。 -
purpose:string,必填。
上传文件的目的
使用fine-tune
为了微调。验证上传文件的格式
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.File.create(
file=open("mydata.jsonl", "rb"),
purpose='fine-tune'
)
删除文件
参数:
-
file_id:string,必填
请求文件的ID
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.File.delete("file-XjGxS3KTG0uNmNOK362iJua3")
查看文件
返回文件的信息
参数:
- file_id:string,必填
请求文件的ID
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.File.retrieve("file-XjGxS3KTG0uNmNOK362iJua3")
查看文件内容
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
content = openai.File.download("file-XjGxS3KTG0uNmNOK362iJua3")
微调
微调目前仅适用于以下基础模型:davinci
、curie
、babbage
和ada
Model | Training | Usage |
---|---|---|
Ada | $0.0004 / 1K tokens | $0.0016 / 1K tokens |
Babbage | $0.0006 / 1K tokens | $0.0024 / 1K tokens |
Curie | $0.0030 / 1K tokens | $0.0120 / 1K tokens |
Davinci | $0.0300 / 1K tokens | $0.1200 / 1K tokens |
创建微调
创建一个从给定数据集微调指定模型
API参数:
-
training_file:string,必填
训练数据的上传文件的ID(可参考上面上传文件)
数据集必须格式化为 JSONL 文件,其中每个训练示例都是一个带有键为“prompt”和“completion”的 JSON 对象。此外,您必须上传带有目的的文件fine-tune
-
validation_file:string,选填。
验证数据的上传文件的ID
如果有文件,该数据将用于在微调期间定期生成验证指标。这些指标可以在微调结果文件中查看。训练和验证数据应该是互斥的。
数据集必须格式化为 JSONL 文件,其中每个训练示例都是一个带有键为“prompt”和“completion”的 JSON 对象。此外,您必须上传带有目的的文件fine-tune
-
model:string,选填,默认为
curie
微调的基本模型的名称。您可以选择“ada”、“babbage”、“curie”、“davinci”或 2022-04-21 之后创建的微调模型之一. -
n_epochs:整数,选填,默认为
4
.
训练模型的周期数 -
batch_size:整数,选填,默认为
null
用于训练的批量大小。批量大小是用于训练单个前向和后向传递的训练示例数。
默认情况下,批量大小将动态配置为训练集中示例数量的 0.2%,上限为 256 - 通常,我们发现较大的批量大小往往更适合较大的数据集。 -
learning_rate_multiplier:数字,选填,默认为
null
用于训练的学习率乘数。微调学习率是用于预训练的原始学习率乘以该值。
默认情况下,学习率乘数是 0.05、0.1 或 0.2,具体取决于 final
batch_size
(较大的学习率往往在较大的批量大小下表现更好)。建议使用 0.02 到 0.2 范围内的值进行试验,以查看产生最佳结果的值。 -
prompt_loss_weight:数字,选填,默认为
0.01
用于
prompt token
损失的权重。这控制了模型尝试学习生成提示的程度(与权重始终为 1.0 的completion相比),并且可以在完成较短时为训练增加稳定效果。如果
prompt
非常长(相对于completions
),则减少此权重以避免过度优先learning the prompt
可能是有意义的。 -
compute_classification_metrics:布尔值,选填,默认为
False
如果设置,我们将在每个周期结束时使用验证集计算特定于分类的指标,例如准确率和 F-1 分值。可以在结果文件中查看这些指标。
为了计算分类指标,您必须提供一个validation_file
. 此外,您必须指定classification_n_classes
多类分类或classification_positive_class
二元分类。 -
classification_n_classes:整数,选填,默认为
null
分类任务中的类数(多分类需此参数) -
classification_positive_class:string,选填,默认为
null
二元分类中的正类
进行二元分类时,需要指标用此参数生成精确率、召回率和F1 -
classification_betas:array,选填,默认为
null
如果提供,我们将计算指定 beta 值的 F-beta 分数。F-beta 分数是 F-1 分数的推广。这仅用于二进制分类。
当 beta 为 1(即 F-1 分数)时,精确率和召回率被赋予相同的权重。Beta 分数越大,召回率越高,精确率越低。Beta 分数越小,精确度越重要,召回率越低。
-
suffix:string,选填,默认为
null
最多40个字符的字符串,将添加到微调模型名称中
例如:suffix
"custom-model-name”的会生成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()
检索微调
获取有关微调的信息
参数:
- fine_tune_id:string,必填
微调任务的ID
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")
列出微调事件
获取微调任务的细粒度状态更新
参数:
-
id:string,必填
要获取的微调任务的ID -
stream:布尔值,选填,默认为
False
是否为微调作业流式传输事件。 如果设置为 true,事件将在可用时作为纯数据服务器发送事件发送。
data: [DONE]
当作业完成(成功、取消或失败)时,流将终止并显示一条 消息。如果设置为 false,则只返回到目前为止生成的事件。
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.FineTune.list_events(id="ft-AF1WoRqd3aJAHsqc9NY7iL8F")
删除微调模型
删除微调模型。在组织中用于所有者角色
参数:
-
model:string,必填
要删除的模型名称
import os
import openai
openai.api_key = os.getenv("OPENAI_API_KEY")
openai.Model.delete("curie:ft-acmeco-2021-03-03-21-44-20")
总结
以上便是关于ChatGPT的各项任务下的参数以及模型的分析。
以上是我个人在学习过程中的记录所学,希望对正在一起学习的小伙伴有所帮助!!!
如果对你有帮助,希望你能一键三连【关注、点赞、收藏】!!!