1 接口描述
- | 描述 |
---|---|
接口名称 | 对话完成 |
请求路径 | /v1/chat/completions |
功能描述 | 针对描述会话的消息列表,请求模型得到响应 |
2 请求参数
2.1 请求头参数
参数 | 示例值 | 描述 |
---|---|---|
Authorization | Bearer $OPEN_API_KEY | 鉴权信息填入Api Key |
Content-Type | application/json |
2.2 请求参数
参数名称 | 二级参数 | 三级参数 | 四级参数 | 类型 | 必选 | 描述 |
---|---|---|---|---|---|---|
model | string | 是 | 模型ID,包括预置模型、用户自定义部署模型 | |||
messages | array | 是 | 对话列表,每个列表项为一个message object ,message object 中包含用户role 和content 两部分信息:role 可选值为user、assistant、system 。role 为system 时,不校验content 空值,且message 中system 只能位于开头,即messages[0] 位置role 为user 时说明是用户提问,role 为assistant 时说明是模型回答,而content 为实际的对话内容单轮/多轮对话中,最后一个message 中role 必须为user ,content 为用户输入的最新问题,其余结果除system 角色外都为历史信息拼接送入messages 中,assistant 和user 的role 只能交替出现,assistant 后只能跟user ,user 后只能跟assistant |
|||
- | role | string | 否 | 对话角色,role 类型枚举值:user、assistant、system |
||
- | content | string/array | 是 | 对话内容,内容目前有两种格式:string,array 。string 类型:表示文本对话内容。array 类型:表示多个对话内容列表,每个列表项为一个content object ,每个content object 包含type、image_url、text 等信息。type 可选值为text、image_url``type 为text 时,取text 字段作为对话内容type 为image_url 时,取image_url 字段作为对话内容 |
||
- | - | type | string | 否 | 对话内容类型,type 类型枚举值:text,image_url 。 |
|
- | - | text | string | 否 | 文本对话内容,type 为text 时传入。 |
|
- | - | image_url | object | 否 | 图片对话内容,type 为image_url 时传入。 |
|
- | - | - | url | string | 否 | 图片对话内容中的图片地址,目前可以为图片url或是 图片二进制数据的base64编码。 |
frequency_penalty | float | 否 | 频率惩罚。一般取值范围[-2, 2] ,默认值为0.0 。它影响模型如何根据文本中词汇(token)的现有频率惩罚新词汇(token)。值大于0 ,会根据新标记在文本中的现有频率来惩罚新标记,从而降低模型逐字重复同一行的可能性。 |
|||
max_tokens | int | 否 | 最大标记数目。一般取值范围 (0, 2048] 。控制最大生成长度,超过该值则截断。 |
|||
n | int | 否 | 1-n 个choices |
|||
presence_penalty | float | 否 | 存在惩罚。一般取值范围[-2.0, 2.0] 。它影响模型如何根据到目前为止是否出现在文本中来惩罚新token。值大于0,将通过惩罚已经使用的词,增加模型谈论新主题的可能性。 |
|||
response_format | object | 否 | 返回格式 | |||
- | type | string | 否 | 返回格式枚举值:text,json_object |
||
seed | int | 否 | 随机种子。一般取值范围(0, 9223372036854775807] 。用于指定推理过程的随机种子,相同的seed值可以确保推理结果的可重现性,不同的seed值会提升推理结果的随机性。 |
|||
service_tier | string | 否 | Beta | |||
stop | string/array | 否 | 生成停止标识。当模型生成结果以stop 中某个元素结尾时,停止文本生成。 |
|||
stream | bool | 否 | 是否以流式接口的形式返回数据。默认为False ,非流式。 |
|||
stream_options | object | 否 | 流式选项,stream为True 有效 |
|||
- | include_usage | bool | 否 | 是否在返回中包含usage,stream为True 有效取值为True 时,会在流式返回的最后一个chunk里返回usage信息,并该chunk中choices列表为空 |
||
temperature | float | 否 | 温度采样。一般取值范围 (0, 2) 。控制生成的随机性,值比1 大,则会生成更加随机的文本;值比1 小,则生成的文本更加保守。 |
|||
top_p | int | 否 | top-p 采样。一般取值范围 (0, 1] 。控制模型生成过程中考虑的词汇范围,使用累计概率选择候选词,直到累计概率超过给定的阈值。取值越大,生成的随机性越高;取值越低,生成的确定性越高。 |
|||
user | string | 否 | 用户唯一身份ID |
请求参数示例
{
"model": "gpt-4o-mini",
"stream": false,
"messages": [
{
"role": "user",
"content": "Hello!"
}
]
}
3、请求返回
3.1 非流式返回
3.1.1 非流式正常返回
字段名称 | 二级字段 | 三级字段 | 字段类型 | 描述 |
---|---|---|---|---|
id | string | 唯一标识符 | ||
choices | string | choices列表 | ||
- | index | int | choice索引 | |
- | message | object | 模型生成的消息 | |
- | - | role | string | 对话角色 |
- | - | content | string | 对话消息内容 |
- | finish_reason | string | 模型停止生成标记的原因。stop : 模型生成遇到自然停止点或提供的停止序列;length : 达到请求中指定的最大标记数;content_filter :如果由于内容过滤器中的标志而省略了内容tool_calls/function_call : 模型调用了函数。 |
|
created | int | Unix时间戳(以秒为单位)。 | ||
model | string | 调用的模型名称。 | ||
object | string | 返回的对象类型。非流式返回始终为:chat.completion |
||
service_tier | string | |||
system_fingerprint | string | Beta | ||
usage | object | 请求使用情况的统计信息。 | ||
- | completion_tokens | int | 生成token数。 | |
- | prompt_tokens | int | 输入token数。 | |
- | total_tokens | int | 使用的token总数(prompt + completion )。 |
返回结果示例
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"model": "gpt-4o-mini",
"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
}
}
3.1.2 非流式异常返回
非流式异常返回时:
- http code 返回非200。
- http body 中返回 error 结构,error结构中包含code、type、message、param等信息,具体可见OpenAI接口文档中的error结构描述及错误码部分介绍。
错误结果示例
{
"error": {
"message": "You exceeded your current quota, please check your plan and billing details.",
"type": "rate_limit_error",
"param": null,
"code": "rate_limit_exceeded"
}
}
3.2 流式返回
3.2.1 流式正常返回
字段名称 | 二级字段 | 三级字段 | 字段类型 | 描述 |
---|---|---|---|---|
id | string | 唯一标识符 | ||
choices | string | choices列表 | ||
- | index | int | choice索引 | |
- | delta | object | 模型生成的消息 | |
- | - | role | string | 对话角色 |
- | - | content | string | 对话消息内容 |
- | finish_reason | string | 模型停止生成标记的原因。stop : 模型生成遇到自然停止点或提供的停止序列;length : 达到请求中指定的最大标记数;content_filter :如果由于内容过滤器中的标志而省略了内容tool_calls/function_call : 模型调用了函数。 |
|
created | int | Unix时间戳(以秒为单位)。 | ||
model | string | 调用的模型名称。 | ||
object | string | 返回的对象类型。流式返回始终为:chat.completion.chunk |
||
service_tier | string | |||
system_fingerprint | string | Beta | ||
usage | object | 请求使用情况的统计信息。仅在stream_options: {"include_usage": true} 设置时显示。如果存在,则它包含一个 null 值,但最后一个块包含整个请求的token 使用情况的统计信息。 |
||
- | completion_tokens | int | 生成token数。 | |
- | prompt_tokens | int | 输入token数。 | |
- | total_tokens | int | 使用的token总数(prompt + completion )。 |
返回结果示例
{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-4o-mini", "choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-4o-mini", "choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
....
{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268190,"model":"gpt-4o-mini", "choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
**stream_options.include_usage
为 True
时多返回一条包含usage
流式消息**。
{"id":"chatcmpl-123","object":"chat.completion.chunk","created":1694268199,"model":"gpt-4o-mini", "choices":[], "usage": {"prompt_tokens": 9,"completion_tokens": 120,"total_tokens": 129}}
3.2.2 流式异常返回
流式异常分为两种:
- 如果在流式请求接收处理之前发生了异常,如鉴权、参数校验等问题,与普通的非流式一样返回
http code
,并带有error
结构。 - 如果在流式请求已经接收,会先对外返回流式请求连接建立的信息,此时
http code
为200
,而在后续模型流式返回过程中发生了异常,会在流失返回的chunk
返回异常信息,并终止当前的流式请求。
4、请求示例代码
4.1 curl方式请求
curl --request POST \
--url $OPEN_AI_HOST/v1/chat/completions \
--header 'Accept: */*' \
--header 'Accept-Encoding: gzip, deflate, br' \
--header 'Authorization: Bearer $OPEN_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"model": "gpt-4o-mini",
"messages": [
{
"role": "user",
"content": "Hello"
}
]
}'
4.2 python方式请求
import json
import requests
URL = "$OPEN_AI_HOST/v1/chat/completions"
headers = {
"Authorization": "Bearer $OPEN_API_KEY",
"Content-Type": "application/json"
}
data = {
"model": "gpt-4o-mini",
"messages": [
{"role": "user", "content": "Hello"}
]
,"stream": True
}
try:
response = requests.post(URL, json=data, stream=True)
if response.status_code != 200:
print(response.json())
else:
# 流式
for line in response.iter_lines(chunk_size=8192, decode_unicode=True):
// 处理请求
# 非流式直接处理
message = response.json()["choices"][0]["message"]["content"]
except Exception as e:
print(f"Exception: {e}")
4.3 openai python客户端示例代码
import openai
from openai import OpenAI
client = OpenAI(base_url="$OPEN_AI_HOST/v1", api_key="$OPEN_API_KEY")
messages = [
{"role": "user", "content": "Hello"}
]
try:
stream = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages,
stream=True
)
# 流式
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="", flush=True)
except openai.APIStatusError as e:
print(f"APIStatusError: {e.status_code}, {e.message}, {e.body}")
except openai.APIError as e:
print(f"APIError: {e.body}")
except Exception as e:
print(f"Exception: {e}")
5 参考文档
- OpenAI 官网API接口:/docs/api-reference/introduction
- OpenAI 官网文档:/api-reference/chat
- GitHub openai cookbook:/openai/openai-cookbook