admin管理员组

文章数量:1632078

文章目录

  • 前言
  • ChatGPT
    • 模型
      • 检索模型
      • GPT-4
      • GPT-3.5
      • GPT-3
      • 模型比较
    • Completion
    • ChatCompletion
    • 编辑
    • 图像
      • 创建图像
      • 图像编辑
      • 图像变换
    • 嵌入
    • 声音
      • 声音转录
      • 翻译
    • 文件
      • 列出文件
      • 上传文件
      • 删除文件
      • 查看文件
      • 查看文件内容
    • 微调
      • 创建微调
      • 微调列表
      • 检索微调
      • 取消微调
      • 列出微调事件
      • 删除微调模型
  • 总结

前言

对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 个单词)

  • openai分词可视化

模型

列出并描述 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
聊天/completionsgpt-4, gpt-4-0314, gpt-4-32k, gpt-4-32k-0314, gpt-3.5-turbo, gpt-3.5-turbo-0301
completionstext-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 是一个大型多模态模型(现在接受文本输入并发出文本输出,将来会出现图像输入),由于其更广泛的常识和高级推理,它可以比以前的任何模型更准确地解决难题能力。

ModelPromptCompletion
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-03142023 年 3 月 14 日的快照。与gpt-4不同的是,此模型不会收到更新,并且会在新版本发布后 3 个月后弃用。8,192 个代币截至 2021 年 9 月
gpt-4-32kgpt-4模式有相同的功能,但上下文长度是其 4 倍。将使用最新的模型迭代进行更新。32,768 个代币截至 2021 年 9 月
gpt-4-32k-03142023 年 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-03012023 年 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-002text-davinci-003有类似的能力,但是通过有监督的微调训练的,而不是强化学习4,097 个token截至 2021 年 6 月
code-davinci-002针对代码完成任务进行了优化8,001 个token截至 2021 年 6 月

GPT-3

GPT-3 模型可以理解和生成自然语言。这些模型被更强大的 GPT-3.5 代模型所取代。但是,原始 GPT-3 基本模型(davincicurieadababbage)是当前唯一可用于微调的模型。

最新款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/comparisontool

Evals 是一个用于评估 LLM 和 LLM 系统的框架,也是一个开源的基准注册中心:https://github/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

ModelUsage
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 个字符
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)

编辑

给定promptinstruction,模型将返回提示的编辑版本

API参数:

  • model:string,必填
    模型ID,text-davinci-edit-001 or code-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
  }
}

图像

ResolutionPrice
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 256512 x 5121024 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"
)

图像编辑

在给定原始图像和提示的情况下创建编辑或扩展图像。

相比图像创建,多了两个必要参数imagemask,其他都一样

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"
)

嵌入

用于表述文本的嵌入向量

ModelUsage
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..."
)

嵌入通常用于:

  • 搜索(结果按与查询字符串的相关性排序)
  • 聚类(其中文本字符串按相似性分组)
  • 推荐(推荐具有相关文本字符串的项目)
  • 异常检测(识别出相关性很小的异常值)
  • 多样性测量(分析相似性分布)
  • 分类(其中文本字符串按其最相似的标签分类)

嵌入是浮点数的向量(列表)。两个向量之间的距离衡量它们的相关性。小距离表示高相关性,大距离表示低相关性。

声音

将声音转换为文本

ModelUsage
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")

微调

微调目前仅适用于以下基础模型:davincicuriebabbageada

ModelTrainingUsage
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的各项任务下的参数以及模型的分析。
以上是我个人在学习过程中的记录所学,希望对正在一起学习的小伙伴有所帮助!!!
如果对你有帮助,希望你能一键三连【关注、点赞、收藏】!!!

本文标签: 参数NLPchatGPTAPI