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
聊天模型接受一系列消息作为输入,并返回由模型生成的消息作为输出。虽然聊天格式设计为便于多轮对话,但它同样适用于没有任何对话的单轮任务。
示例调用
1from openai import OpenAI2client = OpenAI()3
4response = 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模式。
示例调用
1from openai import OpenAI2client = OpenAI()3
4response = 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)12print(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)
参数详情
频率和存在惩罚
frequency
和presence
惩罚参数可以用来减少采样重复token序列的可能性。合理的惩罚系数值大约在0.1到1之间,如果目的是稍微减少重复样本。如果目的是强烈抑制重复,则可以将系数增加到2,但这可能显著降低样本质量。
Completions API
completions
API端点在2023年7月进行了最终更新,并且与新的chat completions
端点有不同的接口。输入是一段自由格式的文本字符串,称为提示(prompt)。
示例调用
1from openai import OpenAI2client = OpenAI()3
4response = 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提供了更多的灵活性,但需要编写代码或以编程方式向模型发送请求。


