Chat
Given a chat conversation, the model will return a chat completion response.
例子
请求
curl
curl https://api.openai.com/v1/chat/completions \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{
"model": "gpt-3.5-turbo",
"messages": [{"role": "user", "content": "Hello!"}]
}'
Python
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)
Node
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);
const completion = await openai.createChatCompletion({
model: "gpt-3.5-turbo",
messages: [{role: "user", content: "Hello world"}],
});
console.log(completion.data.choices[0].message);
响应
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "\n\nHello there, how may I assist you today?",
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
Create chat completion
Creates a completion for the chat message
Request body
model
- string
- Required
ID of the model to use. Currently, only gpt-3.5-turbo
and gpt-3.5-turbo-0301
are supported.
messages
- array
- Required
The messages to generate chat completions for, in the chat format.
聊天模型将一系列的消息作为输入,并返回一个由模型生成的消息作为输出。
尽管聊天格式的设计旨在使多轮对话容易进行,但它同样适用于没有任何对话的单轮任务(例如以前由指令跟随模型(如text-davinci-003)服务的任务)。
Input format
# Note: you need to be using OpenAI Python v0.27.0 for the code below to work
import openai
openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)
系统消息有助于设置助手的行为。在上面的例子中,助手被指示为"You are a helpful assistant."
(“你是一个有用的助手”)。
消息必须是消息对象的数组,其中每个对象都有角色(可以是“系统”、“用户”或“助手”)和内容(消息内容)。对话可能很短,仅有1条消息,也可能填满很多页面。
一般情况下,对话的格式是先显示系统消息,然后是用户和助手的交替消息。
系统消息有助于设置助手的行为方式。在上面的示例中,使用“你是一个有用的助手”进行指导。
gpt-3.5-turbo-0301 并不总是对系统消息给予足够的关注。未来的模型将会接受更强的训练来关注系统消息。
用户信息有助于指导助手。它们可以由应用程序的最终用户生成,也可以由开发人员设置为指导。
助手信息有助于存储先前的回复。它们也可以由开发人员编写,以帮助给出所需行为的示例。
包括对话历史记录有助于用户指令涉及先前的消息时。在上面的例子中,“它是在哪里播放的?”用户的最终问题只有在2020年世界大赛的先前消息的背景下才有意义。由于模型没有记录过去的请求,所有相关信息必须通过对话提供。如果对话不能适应模型的令牌限制,它将需要以某种方式缩短。
Response format
An example API response looks as follows:
{
'id': 'chatcmpl-6p9XYPYSTTRi0xEviKjjilqrWU2Ve',
'object': 'chat.completion',
'created': 1677649420,
'model': 'gpt-3.5-turbo',
'usage': {'prompt_tokens': 56, 'completion_tokens': 31, 'total_tokens': 87},
'choices': [
{
'message': {
'role': 'assistant',
'content': 'The 2020 World Series was played in Arlington, Texas at the Globe Life Field, which was the new home stadium for the Texas Rangers.'},
'finish_reason': 'stop',
'index': 0
}
]
}
在Python中,助手的回复可以使用 response['choices'][0]['message']['content']
来提取。
每个回复都会包括一个 finish_reason。finish_reason的可能值如下:
- stop: API返回完整的模型输出
- length: 由于max_tokens参数或标记限制而导致模型输出不完整
- content_filter: 由于我们内容过滤器中的一个标志而省略的内容
- null: API响应仍在进行或不完整
temperature
- number
- Optional
- Defaults to 1
采样温度在0和2之间,应选择何种值?像0.8这样较高的值会使输出更加随机,而较低的值,例如0.2,则会使其更加集中和确定性。
我们通常建议更改此值或 top_p,但不要同时更改两个值。
top_p
- number
- Optional
- Defaults to 1
一种替代使用温度进行取样的方法叫做"核心取样"(nucleus sampling),在这种方法中,模型只考虑具有 top_p 概率质量的令牌的结果。例如,当 top_p 设置为 0.1 时,意味着只有占前 10% 概率质量的令牌被考虑。
我们通常建议只改变这两种方法中的一种,而不是同时改变两种。
n
- integer
- Optional
- Defaults to 1
为每条输入消息生成多少条聊天选项。
stream
- boolean
- Optional
- Defaults to false
如果设置了,将会发送部分消息增量,就像 ChatGPT 一样。令牌将作为仅数据的服务器推送事件在可用时发送,通过数据:[DONE] 消息终止流。
stop
- string or array
- Optional
- Defaults to null
API 最多生成4个序列,将停止生成的令牌。
max_tokens
- integer
- Optional
- Defaults to inf
生成的答案允许的最大令牌数。默认情况下,模型可以返回的令牌数为(4096-提示令牌数)。
presence_penalty
- number
- Optional
- Defaults to 0
-2.0和2.0之间的数字。正数惩罚基于在文本中出现的新标记,增加模型谈论新主题的可能性。
请参阅有关频率和存在惩罚的更多信息。
frequency_penalty
- number
- Optional
- Defaults to 0
在-2.0和2.0之间的数字。正值会根据单词在文本中的现有频率对新单词进行惩罚,降低模型重复完全相同语句的可能性。
See more information about frequency and presence penalties.
logit_bias
- map
- Optional
- Defaults to null
修改完成时特定标记出现的可能性。
接受一个json对象,将标记(通过标记器中的标记ID指定)映射到从-100到100的相关偏差值。数学上,在采样之前,模型生成的logits会增加偏差。具体效果因模型而异,但-1到1之间的值应该会降低或增加选择的可能性;像-100或100这样的值应该会导致相关标记被禁止或者是唯一的选择。
user
- string
- Optional
A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. Learn more
End-user IDs
在您的请求中发送最终用户 ID 可能是一个有用的工具,帮助 OpenAI 监测和检测滥用。这使得 OpenAI 可以在我们检测到您的应用程序中有任何政策违规时,向您的团队提供更具操作性的反馈。
这些 ID 应该是一个能唯一标识每个用户的字符串。我们建议对他们的用户名或电子邮件地址进行哈希处理,以避免向我们发送任何识别信息。如果您向非登录用户提供产品预览,您可以发送会话 ID。
您可以通过 user 参数在您的 API 请求中包含最终用户 ID,如下所示:
curl https://api.openai.com/v1/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "text-davinci-003",
"prompt": "This is a test",
"max_tokens": 5,
"user": "user123456"
}'