智能问答接口文档
目录
接口描述
创建一个聊天完成请求,支持流式和非流式响应。该接口接收一系列消息作为输入,并返回模型生成的完成内容。 本协议在OpenAI的Chat Completions API基础上扩展,支持了reasoning_content字段。最新的完整的OpenAI Chat Completions API参数可以参考OpenAI Chat Completions API。
请求
HTTP 请求
POST /v1/chat/completions
请求体
参数 | 类型 | 必填 | 描述 |
---|---|---|---|
model | string | 是 | 要使用的模型 ID |
messages | array | 是 | 包含对话历史的消息数组。根据使用的模型不同,支持不同的消息类型(模态),如文本、图像和音频 |
tools | array | 否 | 模型可以调用的工具列表。目前仅支持函数作为工具。使用此参数提供模型可能生成JSON输入的函数列表。最多支持128个函数 |
tool_choice | string/object | 否 | 控制模型是否调用工具。 - "none" : 模型不会调用任何工具,而是生成消息- "auto" : 模型可以在生成消息或调用一个或多个工具之间选择- "required" : 模型必须调用一个或多个工具- 也可以通过对象指定特定工具: {"type": "function", "function": {"name": "my_function"}} 当没有工具时,默认为 "none" ;有工具时,默认为"auto" |
temperature | number | 否 | 采样温度,默认为 1。较低的值使输出更加确定性 |
top_p | number | 否 | 核采样的概率质量,默认为 1 |
n | integer | 否 | 为每个输入消息生成的聊天 完成数量,默认为 1 |
stream | boolean | 否 | 是否启用流式响应,默认为 false |
stream_options | object | 否 | 流式响应选项,仅在 stream=true 时设置 |
stop | string/array | 否 | 最多 4 个序列,API 将在生成这些序列时停止 |
max_tokens | integer | 否 | 生成的最大令牌数 |
presence_penalty | number | 否 | 存在惩罚,范围 -2.0 到 2.0,默认为 0 |
frequency_penalty | number | 否 | 频率惩罚,范围 -2.0 到 2.0,默认为 0 |
logit_bias | object | 否 | 修改指定令牌出现在完成中的可能性 |
response_format | object | 否 | 指定模型必须输出的格式 |
seed | integer | 否 | 用于确定性采样的种子值 |
parallel_tool_calls | boolean | 否 | 是否允许并行工具调用 |
user | string | 否 | 表示最终用户的唯一标识符 |
Message对象类型
Developer 消息(开发者消息)
{
"role": "developer",
"content": "你是一个有帮助的助手,专注于回答用户的问题。"
}
开发者提供的指令,无论用户发送什么消息,模型都应遵循。在较新的OpenAI模型(如o1系列)中,开发者消息替代了之前的系 统消息。
System 消息(系统消息)
{
"role": "system",
"content": "你是一个有帮助的助手,专注于回答用户的问题。"
}
开发者提供的指令,无论用户发送什么消息,模型都应遵循。在较新的OpenAI模型(如o1系列)中,建议使用开发者消息代替系统消息。
User 消息(用户消息)
{
"role": "user",
"content": "你好,请介绍一下自己。"
}
终端用户发送的消息,包含提示或额外的上下文信息。
Assistant 消息(助手消息)
{
"role": "assistant",
"content": "我是一个AI助手,可以回答问题和提供信息。"
}
模型响应用户消息发送的消息。
Tool 消息(工具消息)
{
"role": "tool",
"content": "{\"temperature\":32,\"unit\":\"celsius\",\"description\":\"晴朗\",\"humidity\":45}",
"tool_call_id": "call_abc123"
}
工具消息包含工具调用的结果,必须包含以下字段:
content
: 工具消息的内容(字符串)role
: 消息作者的角色,在这种情况下为"tool"tool_call_id
: 此消息响应的工具调用ID
工具和函数定义
Tool 对象
{
"type": "function",
"function": {
"name": "get_weather",
"description": "获取指定城市的天气信息",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "城市名称,如北京、上海"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "温度单位"
}
},
"required": ["location"]
},
"strict": true
}
}
工具对象包含以下字段:
type
: 工具类型,目前仅支持"function"function
: 函数定义,包含以下字段:name
: 函数名称(必填)。必须是a-z、A-Z、0-9或包含下划线和破折号,最大长度为64description
: 函数功能描述(可选)。模型用它来决定何时以及如何调用函数parameters
: 函数接受的参数,描述为JSON Schema对象(可选)strict
: 是否在生成函数调用时启用严格的模式遵循(可选,默认为false)
Tool Choice 对象
用于指定特定工具:
{
"type": "function",
"function": {
"name": "get_weather"
}
}
消息内容格式
文本内容
{
"role": "user",
"content": "你好,请介绍一下自己。"
}
图片内容
{
"role": "user",
"content": [
{
"type": "text",
"text": "这张图片是什么内容?"
},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/image.jpg",
"detail": "high"
}
}
]
}
工具调用内容
{
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_abc123",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"location\":\"北京\",\"unit\":\"celsius\"}"
}
}
]
}
响应
非流式响应
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"model": "gpt-4o",
"system_fingerprint": "fp_44709d6fcb",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "你好!我能帮你什么忙吗?",
"reasoning_content": "用户用中文问候,我应该用中文回复。"
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
流式响应
当 stream=true
时,服务器将发送一系列 Server-Sent Events (SSE),每个事件包含部分响应。每个事件的格式如下:
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"gpt-3.5-turbo","system_fingerprint":"fp_44709d6fcb","choices":[{"index":0,"delta":{"reasoning_content":"用户用中文问候,"},"finish_reason":null}]}
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"gpt-3.5-turbo","system_fingerprint":"fp_44709d6fcb","choices":[{"index":0,"delta":{"reasoning_content":"我应该用中文回复。"},"finish_reason":null}]}
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"gpt-3.5-turbo","system_fingerprint":"fp_44709d6fcb","choices":[{"index":0,"delta":{"content":"你"},"finish_reason":null}]}
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"gpt-3.5-turbo","system_fingerprint":"fp_44709d6fcb","choices":[{"index":0,"delta":{"content":"好"},"finish_reason":null}]}
data: {"id":"chatcmpl-123","object":"chat.completion.chunk","created":1677652288,"model":"gpt-3.5-turbo","system_fingerprint":"fp_44709d6fcb","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]
reasoning_content 字段
Bella OpenAPI 在标准 OpenAI 接口基础上扩展了 reasoning_content
字段,用于提供模型的推理过程:
- 只有输出推理过程的模型才会返回
reasoning_content
字段 - 在非流式响应中,
reasoning_content
作为 Message 对象的一个属性返回 - 在流式响应中,
reasoning_content
通过 delta 对象分块返回 - 推理内容可以帮助开发者理解模型的思考过程和决策依据