OpenAI文本生成模型指南

  • 1339字
  • 7分钟
  • 2024-06-27

OpenAI的文本生成模型(通常称为生成预训练变换器或大型语言模型)已经训练成能够理解自然语言、代码和图像。这些模型根据输入生成文本输出。输入通常被称为“提示”(prompts)。设计提示本质上是如何“编程”大型语言模型,通常通过提供指令来实现。

应用场景

使用OpenAI的文本生成模型,您可以构建以下应用程序:

  • 起草文档
  • 编写计算机代码
  • 回答关于知识库的问题
  • 分析文本
  • 为软件提供自然语言接口
  • 各种学科的辅导
  • 翻译语言
  • 模拟游戏角色

随着gpt-4-turbo的发布,现在还可以构建处理和理解图像的系统。

如何使用模型

要通过OpenAI API使用这些模型,需要发送包含输入和API密钥的请求,并接收包含模型输出的响应。最新的模型gpt-4o和gpt-4等可以通过Chat Completions API访问。

模型和API

模型API
新模型(2023年及以后)gpt-4o, gpt-4, gpt-3.5-turbo https://api.openai.com/v1/chat/completions
更新的传统模型(2023年)gpt-3.5-turbo-instruct, babbage-002, davinci-002 https://api.openai.com/v1/completions

您可以在聊天操场中试验各种模型。如果不确定使用哪个模型,可以使用gpt-3.5-turbo或gpt-4o。

Chat Completions API

聊天模型接受一系列消息作为输入,并返回由模型生成的消息作为输出。虽然聊天格式设计为便于多轮对话,但它同样适用于没有任何对话的单轮任务。

示例调用

1
from openai import OpenAI
2
client = OpenAI()
3
4
response = client.chat.completions.create(
5
model="gpt-3.5-turbo",
6
messages=[
7
{"role": "system", "content": "You are a helpful assistant."},
8
{"role": "user", "content": "Who won the world series in 2020?"},
9
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
10
{"role": "user", "content": "Where was it played?"}
11
]
12
)

主要输入是messages参数。消息必须是一个消息对象数组,每个对象都有一个角色(“system”、“user”或“assistant”)和内容。对话可以短至一条消息或多轮往返。

JSON模式

常见的用法是指示模型始终返回适合您用例的JSON对象,通过在系统消息中指定这一点。可以通过设置response_format{ "type": "json_object" }来启用JSON模式。

示例调用

1
from openai import OpenAI
2
client = OpenAI()
3
4
response = client.chat.completions.create(
5
model="gpt-3.5-turbo-0125",
6
response_format={ "type": "json_object" },
7
messages=[
8
{"role": "system", "content": "You are a helpful assistant designed to output JSON."},
9
{"role": "user", "content": "Who won the world series in 2020?"}
10
]
11
)
12
print(response.choices[0].message.content)

在此示例中,响应包含一个JSON对象,如下所示:

1
"content": "{\"winner\": \"Los Angeles Dodgers\"}"

管理Token

语言模型以称为token的块来读取和写入文本。在英语中,一个token可以短至一个字符或长至一个单词(例如,“a”或“apple”)。API调用中的总token数影响:

  • API调用的成本,因为您按token付费
  • API调用的时间,因为写入更多token需要更多时间
  • API调用是否成功,因为总token数必须低于模型的最大限制(对于gpt-3.5-turbo为4097个token)

参数详情

频率和存在惩罚

frequencypresence惩罚参数可以用来减少采样重复token序列的可能性。合理的惩罚系数值大约在0.1到1之间,如果目的是稍微减少重复样本。如果目的是强烈抑制重复,则可以将系数增加到2,但这可能显著降低样本质量。

Completions API

completions API端点在2023年7月进行了最终更新,并且与新的chat completions端点有不同的接口。输入是一段自由格式的文本字符串,称为提示(prompt)。

示例调用

1
from openai import OpenAI
2
client = OpenAI()
3
4
response = client.completions.create(
5
model="gpt-3.5-turbo-instruct",
6
prompt="Write a tagline for an ice cream shop."
7
)

Chat Completions vs. Completions

Chat Completions格式可以通过构造使用单个用户消息的请求,使其类似于completions格式。区别在于底层模型的可用性。chat completions API是功能最强大的模型(gpt-4o)和最具成本效益的模型(gpt-3.5-turbo)的接口。

哪个模型适合?

我们通常建议您使用gpt-4o或gpt-3.5-turbo。使用哪个取决于您使用模型的任务的复杂性。gpt-4o在广泛的评估中表现更好,特别是在仔细遵循复杂指令方面。相比之下,gpt-3.5-turbo更可能只遵循复杂多部分指令的一部分。gpt-4o不太可能编造信息,这种行为被称为“幻觉”。gpt-4o还有一个更大的上下文窗口,最大为128,000个token,而gpt-3.5-turbo为4,096个token。然而,gpt-3.5-turbo返回输出的延迟较低,每个token的成本也低得多。

常见问题

如何设置温度参数?

温度值较低(例如0.2)会产生更一致的输出,而较高的温度值(例如1.0)会生成更多样化和创造性的结果。根据您的具体应用选择温度值,以在连贯性和创造性之间取得平衡。温度范围从0到2。

最新模型是否可以进行微调?

目前可以微调gpt-3.5-turbo和基础模型(babbage-002和davinci-002)。

应该使用ChatGPT还是API?

ChatGPT为模型提供了一个聊天界面,并内置了一系列功能,如集成浏览、代码执行、插件等。相比之下,使用OpenAI的API提供了更多的灵活性,但需要编写代码或以编程方式向模型发送请求。

美团外卖红包 饿了么红包 支付宝红包