创建聊天识图 (流式) best64
接口描述: 给定一个提示,该模型将返回一个或多个预测的完成,并且还可以返回每个位置的替代标记的概率。此接口主要用于创建包含图像识别(基于Base64)和文本提示的对话完成。
官方参考:OpenAI API 文档
接口详情
- 请求方式:
POST - 请求地址:
https://api.codingplanx.ai/v1/chat/completions - 数据格式:
application/json
请求头 (Request Headers)
| 参数名称 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|
| Content-Type | 是 | string | application/json | 数据格式 |
| Accept | 是 | string | application/json | 接收格式 |
| Authorization | 否 | string | Bearer {{YOUR_API_KEY}} | 身份验证令牌 |
请求参数 (Request Body)
| 字段名称 | 类型 | 必填 | 描述 |
|---|---|---|---|
| model | string | 是 | 要使用的模型的 ID(如:gpt-4o-mini)。 |
| messages | array | 是 | 至今为止对话所包含的消息列表。包含 role 和 content。对于识图,content 可以是包含文本和 image_url (Base64) 的数组。 |
| tools | array | 是 | 模型可以调用的一组工具列表。目前只支持作为工具的函数。用于提供模型可为其生成 JSON 输入的函数列表。 |
| tool_choice | object | 是 | 控制模型调用哪个函数。none 表示不调用;auto 表示自动选择;也可强制调用特定函数。 |
| temperature | integer | 否 | 采样温度,介于 0 和 2 之间。较高的值(如 0.8)使输出更随机,较低的值(如 0.2)使输出更确定。建议不要与 top_p 同时修改。 |
| top_p | integer | 否 | 核采样参数。0.1 意味着只考虑构成前 10% 概率质量的标记。建议不要与 temperature 同时修改。 |
| n | integer | 否 | 为每个输入消息生成多少个聊天补全选择。默认为 1。 |
| stream | boolean | 否 | 流式输出开关。默认为 false。如果设置为 true,将以服务器发送事件 (SSE) 的形式发送部分消息增量,并在 data: [DONE] 时终止。 |
| stop | string | 否 | API 将停止进一步生成标记的序列(最多 4 个)。默认为 null。 |
| max_tokens | integer | 否 | 在聊天补全中生成的最大标记数。默认为 inf(无限)。 |
| presence_penalty | number | 否 | 存在惩罚(-2.0 到 2.0)。正值会根据文本中是否已出现新标记来对其进行惩罚,增加模型谈论新主题的可能性。 |
| frequency_penalty | number | 否 | 频率惩罚(-2.0 到 2.0)。正值会根据标记在文本中目前的出现频率对其进行惩罚,降低模型重复相同内容的可能性。默认为 0。 |
| logit_bias | object | 否 | 修改指定标记出现在补全中的可能性。接受一个将标记 ID 映射到偏差值(-100 到 100)的 JSON 对象。 |
| user | string | 否 | 代表您的最终用户的唯一标识符,帮助监控和检测滥用行为。 |
| response_format | object | 否 | 指定模型必须输出的格式。将 { "type": "json_object" } 传递可启用 JSON 模式。使用时需在提示词中要求模型输出 JSON。 |
| seen | integer | 否 | Beta 功能。确定性采样种子,使用相同的种子和参数重复请求应返回相同的结果(不保证绝对确定性)。 |
请求示例
{
"model": "gpt-4o-mini",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "这张图片里有什么?请详细描述。"
},
{
"type": "image_url",
"image_url": {
"url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAiEAAAIhCAYAAACYF2qHAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOy9ebxtWVXf+x1zrrX2Pud2VRQUjUVf0glIYvOJLdJ8iCagIor... (此处省略过长的base64字符串)"
}
}
]
}
]
}
响应参数 (Response Body)
| 字段名称 | 类型 | 描述 |
|---|---|---|
| id | string | 聊天完成的唯一标识符。 |
| object | string | 对象类型,通常为 chat.completion(或流式情况下的 chat.completion.chunk)。 |
| created | integer | 创建时间的 Unix 时间戳。 |
| choices | array | 补全选择列表。 |
| └─ index | integer | 选项在列表中的索引。 |
| └─ message | object | 模型生成的消息对象,包含 role 和 content。 |
| └─ finish_reason | string | 模型停止生成的原因(例如:stop 代表正常结束,length 代表达到 max_tokens 限制)。 |
| usage | object | 此次请求的令牌 (Token) 消耗统计。 |
| └─ prompt_tokens | integer | 提示词消耗的 Token 数量(包含图片计算出的 Token)。 |
| └─ completion_tokens | integer | 生成的内容消耗的 Token 数量。 |
| └─ total_tokens | integer | 此次请求消耗的总 Token 数量。 |
响应示例 (成功 200 OK)
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "\r
\r
Hello there, how may I assist you today?"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
常见问题解答 (FAQs)
Q1: 如何开启流式输出(Streaming)?
A: 在请求体中将 stream 参数设置为 true。开启后,接口将不再等待整个回答生成完毕再返回,而是通过服务器发送事件(Server-Sent Events, SSE)逐字/逐句返回 data: {...} 格式的数据块,直到收到 data: [DONE] 标志生成结束。
Q2: 对于识图的 Base64 编码有什么要求?
A: 图像的 Base64 字符串必须包含正确的 MIME 类型前缀,例如 data:image/png;base64, 或 data:image/jpeg;base64,。建议在将图片转换为 Base64 前适当压缩图片尺寸,以减少网络传输延迟并降低 prompt_tokens 的消耗(过大的图片会消耗大量 Token 甚至超出上下文限制)。
Q3: 为什么模型的回答被截断了?
A: 请检查响应体中 choices[0].finish_reason 的值。如果是 length,说明生成的文本达到了您设置的 max_tokens 上限,或者整个对话超过了该模型的最大上下文窗口限制。您可以通过调大 max_tokens 来解决此问题。
Q4: 如何强制模型输出 JSON 格式的数据?
A: 首先,需要在请求体中设置 "response_format": { "type": "json_object" }。重要提示:除了设置该参数,您还必须在 messages 的系统提示 (system prompt) 或用户提示中,明确使用自然语言要求模型输出 JSON(例如:"请以JSON格式输出结果")。如果不这样做,模型可能会陷入无限的空白生成直到耗尽 Token。
Q5: 如果遇到 401 Unauthorized 错误怎么办?
A: 请检查请求头中的 Authorization 参数是否正确携带了 API Key,格式必须严格为 Bearer 你的API_KEY(注意 Bearer 和 Key 之间有一个空格)。