网站 API

Key concepts

Prompts and completions

You input some text as a prompt, and the model will generate a text completion that attempts to match whatever context or pattern you gave it.

Token

 模型通过将文本分解成token来理解和处理, 处理token数量取决于输入+输出
 文本提示prompt+ completion 必须不超过模型的最大上下文长度(对于大多数模型,这是2048个token,或大约1500个字)

Models

OpenAI 官方api 阅读笔记

 基础GPT-3模型被称为Davinci、Curie、Babbage和Ada。我们的Codex系列是GPT-3的后裔,在自然语言和代码上都进行过训练。

Quickstart快速上手

Content generation
Summarization
Classification, categorization, and sentiment analysis
Data extraction
Translation

make your instruction more specific. 指示更具体点

OpenAI 官方api 阅读笔记

Add some examples 给几个例子

OpenAI 官方api 阅读笔记

Adjust your settings 参数

Temperature 为0回答准确确定, 为1多样化

tokens and probabilities

给出一些文本,模型决定哪一个标记最有可能出现
这里可以更好地理解temperature

OpenAI 官方api 阅读笔记

通常,对于所需输出明确的任务,最好设置一个低温度较高的温度可能对需要多样性或创造性的任务有用,或者如果你想产生一些变化供你的终端用户或人类专家选择。

Models

OpenAI 官方api 阅读笔记

GPT-3

GPT-3模型可以理解和生成自然语言。四种主要模型,具有不同的能力水平,适合不同的任务。Davinci是能力最强的模型,而Ada是最快的
OpenAI 官方api 阅读笔记

Davinci

Good at: Complex intent, cause and effect, summarization for audience
擅长于 复杂的意图,因果关系,为受众总结

Curie 居里夫人

Good at: Language translation, complex classification, text sentiment, summarization
擅长的是 语言翻译、复杂分类、文本情感、总结

Babbage

Good at: Moderate classification, semantic search classification
擅长。适度分类,语义搜索分类

Ada

Good at: Parsing text, simple classification, address correction, keywords
擅长。解析文本,简单分类,地址更正,关键词

Note: Any task performed by a faster model like Ada can be performed by a more powerful model like Curie or Davinci.

comparisontool

https://gpttools.com/comparisontool

Finding the right model

https://platform.openai.com/docs/models/finding-the-right-model

Codex

Codex模型是GPT-3模型的后代,可以理解和生成代码
OpenAI 官方api 阅读笔记

Content filter

建议使用 moderation endpoint而不是e content filter model.。
OpenAI 官方api 阅读笔记

Python

content_to_classify = "Your content here"
response = openai.Completion.create(
      model="content-filter-alpha",
      prompt = "<|endoftext|>"+content_to_classify+"\n--\nLabel:",
      temperature=0,
      max_tokens=1,
      top_p=0,
      logprobs=10
    )

logprob

GUIDES

Text completion

Prompt design

three basic guidelines to creating prompts:

Classification

用API创建一个文本分类器,提供了一个任务描述和几个例子。
OpenAI 官方api 阅读笔记

为了让变得更有效率,可以用它来从一次API调用中获得多个结果
OpenAI 官方api 阅读笔记
注意:

Generation 生成新的想法

可以添加examples 来提升质量

Conversation

  1. 告诉API它应该如何表现,然后提供一些例子
  2. 我们给API一个身份

OpenAI 官方api 阅读笔记
OpenAI 官方api 阅读笔记
向API展示如何回复。只需要几个讽刺性的回答,API就能掌握这个模式并提供无穷无尽的讽刺性回答。

Transformation

  1. 翻译 translation
    如果你想把英语翻译成API不熟悉的语言,你就需要为它提供更多的例子,甚至fine-tune一个模型来做得更流畅。

  2. 对话
    OpenAI 官方api 阅读笔记

  3. 总结summarization
    API能够掌握文本的上下文,并以不同的方式重新表述它。来达到更容易理解的解释

  4. Completion 续写
    续写代码、续写文章

  5. Factual responses

    • 为API提供一个基础真理。如果你为API提供一个文本体来回答问题(就像维基百科的条目),它就不太可能编造出一个回应。
    • 使用一个低概率,并向API展示如何说 "我不知道"。如果API明白,在它不太确定的情况下,说 "我不知道 "或一些变体是合适的,那么它将不太倾向于编造答案。

Inserting text 插入文本

OpenAI 官方api 阅读笔记

模型提供额外的背景,它可以更容易被引导。

插入文本是测试版的一个新功能,你可能必须修改你使用API的方式以获得更好的效果。这里有一些最佳做法。

使用max_tokens > 256。该模型能更好地插入较长的补语。使用太小的max_tokens,模型可能在能够连接到后缀之前就被切断了。
最好是finish_reason == “stop” 。当模型到达一个自然停止点或用户提供的停止序列时,它将把 finish_reason 设置为 “停止”。这表明模型已经成功地连接到后缀井,是一个完成质量的良好信号。当使用n>1或重新取样时,这对在几个完成度之间进行选择尤其重要(见下一点)。

重新取样3-5次。虽然几乎所有的完成度都连接到前缀,但在较难的情况下,模型可能难以连接后缀。我们发现,在这种情况下,重新取样3或5次(或使用k=3,5的best_of),并挑选出以 "停止 "作为其finish_reason的样本,是一个有效的方法。在重新取样时,你通常希望有更高的temperature来增加多样性。

注意:如果所有返回的样本的finish_reason ==“length”,很可能是max_tokens太小了,模型在设法自然连接提示和后缀之前就耗尽了tokens。考虑在重新取样前增加max_tokens。

尝试给出更多的线索。在某些情况下,为了更好地帮助模型的生成,你可以通过给出一些模型可以遵循的模式的例子来提供线索,以决定一个自然的地方来停止。

OpenAI 官方api 阅读笔记

Editing text

提供一些文本和如何修改它的指令,text-davinci-edit-001模型将尝试对其进行相应的编辑。这是一个自然的界面,用于翻译、编辑和调整文本。这对于重构和处理代码也很有用。
.OpenAI 官方api 阅读笔记

Code completion

功能:

Best practices

Inserting code

支持在代码中插入代码,除了前缀提示外,还提供了后缀提示。这可以用来在一个函数或文件的中间插入一个补全。
.

最佳做法
插入代码是测试版的一个新功能,你可能必须修改你使用API的方式以获得更好的效果。这里有一些最佳做法。

使用max_tokens > 256。该模型能更好地插入较长的完成度。使用太小的max_tokens,模型可能在能够连接到后缀之前就被切断了。注意,即使使用较大的max_tokens,也只对产生的tokens数量收费。

最好是finish_reason == “stop”。当模型到达一个自然停止点或用户提供的停止序列时,它将把 finish_reason 设置为 “停止”。这表明模型已经成功地连接到后缀井,是一个完成质量的良好信号。当使用n>1或重新取样时,这对在几个完成度之间进行选择尤其重要(见下一点)。

重新取样3-5次。虽然几乎所有的完成度都连接到前缀,但在较难的情况下,模型可能难以连接后缀。我们发现,在这种情况下,重新取样3或5次(或使用k=3,5的best_of),并挑选出以 "停止 "作为其finish_reason的样本,是一个有效的方法。在重新取样时,你通常希望有更高的温度来增加多样性。

注意:如果所有返回的样本的finish_reason == “length”,很可能是max_tokens太小了,模型在设法自然连接提示和后缀之前就耗尽了tokens。考虑在重新取样前增加max_tokens。

Editing code

你提供一些代码和如何修改它的指令,code-davinci-edit-001 模型将尝试对其进行相应的编辑。
例如:迭代建立一个程序、反复喂给模型不断的优化代码、为代码添加注释文档

Image generation

DALL·E models

  1. 根据文本提示从头开始创建图像
  2. 根据一个新的文本提示创建现有图像的编辑
  3. 创建现有图像的变体

Generations 生成图片

实例

response = openai.Image.create(
  prompt="一幅日落黄昏的海边景象",
  n=1,
  size="1024x1024"
)
image_url = response['data'][0]['url']
print(image_url)

每张图片都可以使用response_format参数,以URL或Base64数据的形式返回。URL将在一小时后过期

Edits 编辑现有图片

endpoint允许你通过上传遮罩来编辑和扩展一个图像。遮罩的透明区域表示图像应该被编辑的地方,而提示prompt应该描述完整的新图像,而不仅仅是被擦除的区域。
OpenAI 官方api 阅读笔记
上传的图像和遮罩都必须是小于4MB的正方形PNG图像,而且彼此的尺寸也必须相同。

Variations 改变图片

OpenAI 官方api 阅读笔记

python语言调用api的注意点

Python例子使用open函数从磁盘读取图像数据。在某些情况下,你可能会把你的图像数据放在内存中。下面是一个API调用的例子,它使用存储在BytesIO对象中的图像数据。

from io import BytesIO
# This is the BytesIO object that contains your image data
byte_stream: BytesIO = [your image data]
byte_array = byte_stream.getvalue()
response = openai.Image.create_variation(
  image=byte_array,
  n=1,
  size="1024x1024"
)

在将图像传递给API之前对其进行操作可能是有用的。下面是一个使用PIL来调整图像大小的例子。重新调整大小,提高效率

from io import BytesIO
from PIL import Image
# Read the image file from disk and resize it
image = Image.open("image.png")
width, height = 256, 256
image = image.resize((width, height))
# Convert the image to a BytesIO object
byte_stream = BytesIO()
image.save(byte_stream, format='PNG')
byte_array = byte_stream.getvalue()
response = openai.Image.create_variation(
  image=byte_array,
  n=1,
  size="1024x1024"
)

错误处理
无效的输入、速率限制或其他问题,API请求有可能返回错误。这些错误可以用try…except语句来处理,而错误的细节可以在e.error中找到。

try:
  openai.Image.create_variation(
    open("image.png", "rb"),
    n=1,
    size="1024x1024"
  )
  print(response['data'][0]['url'])
except openai.error.OpenAIError as e:
  print(e.http_status)
  print(e.error)

Fine-tuning 微调

GPT-3已经对来自开放互联网的大量文本进行了预训练。当给它一个只有几个例子的提示时,它往往能直觉到你要执行什么任务,并产生一个合理的完成。这通常被称为 “少量学习”。

微调通过对比prompt中所包含的更多的例子进行训练,改进了少数几次的学习,让你在大量的任务中取得更好的结果。一旦一个模型被微调,你就不需要再在提示中提供例子。这节省了成本,并实现了更低的延迟请求。

哪些模型可以微调

davinci, curie, babbage, and ada.
这些是原始模型,在训练后没有任何指令(例如像text-davinci-003那样)。你也能够继续微调一个微调过的模型,增加额外的数据

text-davinci-003是OpenAI GPT-3模型系列中的一个预训练模型,它已经在大规模数据上进行了预训练,并且已经具有很强的泛化能力。因此,通常不需要对其进行fine-tuning微调。如果你需要在特定任务上使用GPT-3,你可以使用OpenAI API提供的其他模型,如davinci等,或者自己训练一个模型。

Preparing your dataset 准备训练数据

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

{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
{"prompt": "<prompt text>", "completion": "<ideal generated text>"}
...

利用cli工具转格式

openai tools fine_tunes.prepare_data -f <LOCAL_FILE>

你应该提供至少几百个高质量的例子,最好是由人类专家审核的。从这里开始,性能往往随着例子数量的每增加一倍而线性增加。增加例子的数量通常是提高性能的最好和最可靠的方法。

分类器是最容易上手的模型。对于分类问题,我们建议使用ada,一般来说,一旦经过微调,它的性能只比能力更强的模型差一点,同时速度明显更快,成本也更低。

如果你是在一个预先存在的数据集上进行微调,而不是从头开始写提示,如果可能的话,一定要手动审查你的数据是否有攻击性或不准确的内容,如果数据集很大,则要尽可能多地审查随机样本。

Create a fine-tuned model

openai api fine_tunes.create -t <TRAIN_FILE_ID_OR_PATH> -m <BASE_MODEL>

BASE_MODEL是你的基础模型的名称(ada、babbage、curie或davinci)。你可以用后缀参数来定制你的微调模型的名称。

你还可以列出现有的作业,检索作业的状态,或取消作业。

# List all created fine-tunes
openai api fine_tunes.list
# Retrieve the state of a fine-tune. The resulting object includes
# job status (which can be one of pending, running, succeeded, or failed)
# and other information
openai api fine_tunes.get -i <YOUR_FINE_TUNE_JOB_ID>
# Cancel a job
openai api fine_tunes.cancel -i <YOUR_FINE_TUNE_JOB_ID>

Use a fine-tuned model

当一个作业成功后,fine_tuned_model字段将被填充为模型的名称。你现在可以指定这个模型作为我们的完成度API的一个参数,并使用Playground向它提出请求。

你可以通过传递模型名称作为完成请求的模型参数来开始进行请求。

Python api

import openai
openai.Completion.create(
    model=FINE_TUNED_MODEL,
    prompt=YOUR_PROMPT)

Delete a fine-tuned model

import openai
openai.Model.delete(FINE_TUNED_MODEL)

发表回复