对话补全 API
POST https://api.yu-yu.ai/v1/chat/completions
对话补全接口用于向对话模型发送一段或多段消息,并获取模型生成的回复。本接口兼容通用的对话补全调用协议,本网关中所有以对话方式调用的模型均通过本接口访问,例如文本对话、多模态理解等模型。
调用前请先在 https://api.yu-yu.ai/console 确认目标模型名称与可用状态,模型名请直接使用控制台中展示的模型 ID。
适用场景
- 单轮问答与多轮对话
- 系统提示词(
system)约束模型行为 - 多模态输入(文本 + 图片)
- 函数 / 工具调用(
tools) - 流式输出(
stream: true)
鉴权
本接口使用 API Key 鉴权。请在 https://api.yu-yu.ai/console 获取 API Key,并在请求头中携带:
text
Authorization: Bearer <API_KEY>
Content-Type: application/json凭证安全
请勿将 API Key 写入前端代码、公开仓库、日志或截图。生产环境建议通过服务端环境变量或密钥管理服务注入,并为不同环境使用不同的 Key。
请求参数
Body 参数
请求体为 JSON。除 model 与 messages 外,其余字段均为可选,可按需传入。
model string 必选
要调用的模型 ID。取值请使用调用方在 https://api.yu-yu.ai/console 中看到的模型名称,例如 deepseek-v4.1-flash、gpt-4o、qwen-max。
请不要填写展示名称、自己的备注或供应商名称,模型名需与控制台完全一致。
messages object[] 必选
对话消息列表,按时间顺序排列,至少包含 1 条消息。每条消息包含 role 与 content 两个核心子字段。
支持的角色:
system:系统提示词,用于设定模型的身份、语气与约束。建议放在列表第一条。user:用户输入。assistant:模型此前的回复,用于构造多轮对话上下文。tool:工具调用结果回传,需配合tool_call_id使用。
子字段说明:
- messages.role
string必选:消息角色,取值system/user/assistant/tool。 - messages.content
string | object[]必选:消息内容。纯文本场景直接传字符串;多模态场景传内容数组。 - messages.name
string可选:参与者名称,用于区分同一角色下的不同参与者。 - messages.tool_calls
object[]可选:assistant消息中由模型产生的工具调用列表,用于多轮工具调用。 - messages.tool_call_id
string可选:tool角色消息对应的工具调用 ID。
多模态 content 数组写法
当 content 为数组时,数组元素按 type 区分,常见取值:
text:文本片段,配text字段。image_url:图片片段,配image_url对象。
image_url 对象的子字段:
- content[].image_url.url
string必选:图片地址,支持公网可访问的图片 URL,或data:image/<格式>;base64,<Base64编码>形式的内联图片,例如data:image/png;base64,{base64_image}。 - content[].image_url.detail
string可选:图片理解精细度。
多模态请求示例
json
{
"model": "YOUR_MODEL",
"messages": [
{
"role": "user",
"content": [
{ "type": "text", "text": "请描述这张图片的内容。" },
{
"type": "image_url",
"image_url": { "url": "https://example.com/image.png" }
}
]
}
]
}多模态能力因模型而异
并非所有模型都支持图片输入。请先确认所选模型具备视觉理解能力,否则请求可能返回参数错误。
temperature number 可选
采样温度,控制输出的随机性。取值范围 0 到 2,值越大输出越发散、越有创造性,值越小输出越稳定、越确定。默认值 1。
建议只调整 temperature 与 top_p 中的一个,不要同时大幅调整二者。
top_p number 可选
核采样参数,模型仅从累积概率达到 top_p 的候选词中采样。取值范围 0 到 1,默认值 1。值越小输出越保守。
建议只调整 temperature 与 top_p 中的一个。
max_tokens integer 可选
本次回复允许生成的最大 token 数。prompt 与生成内容的总长度受模型上下文长度限制。
不同模型的上限不同;未设置时,上限由所选模型决定。
max_completion_tokens integer 可选
与 max_tokens 作用相同,用于部分较新的模型。部分模型可能不接受该字段,如遇到参数报错,请改用 max_tokens。
stream boolean 可选
是否以流式方式返回结果,默认 false。
false:一次性返回完整 JSON 响应体。true:以 Server-Sent Events(SSE)方式分块返回,最后以data: [DONE]结束。
stream_options object 可选
流式响应的附加选项,仅在 stream 为 true 时生效;若 stream 不为 true 而传入本字段,可能返回 400 错误。
- stream_options.include_usage
boolean可选:为true时,在流式响应中包含 token 用量统计信息。
stop string | string[] 可选
停止序列。模型生成到该内容时停止继续生成。可传单个字符串,也可传字符串数组。不同模型支持的最大停止序列数量不同。
n integer 可选
为每条输入消息生成的候选回复数量,默认 1。大于 1 时,响应中的 choices 会包含多个结果。并非所有模型都支持该字段。
response_format object 可选
指定模型的输出格式。
- response_format.type
string可选:输出格式类型。text表示普通文本输出,json_object表示要求模型输出合法 JSON 对象。 - response_format.json_schema
object可选:结构化输出使用的 JSON Schema 定义,仅在支持结构化输出的模型上生效。
使用 JSON 输出时的注意事项
当 type 为 json_object 时,仍需在 system 或 user 消息中明确要求模型输出 JSON,否则模型可能持续输出空白内容直到达到 token 上限。另外,若响应的 finish_reason 为 length,说明输出被截断,此时 JSON 可能不完整。
tools object[] 可选
可供模型调用的工具列表。当前仅支持 function 类型,可以一次传入多个函数定义,函数名需唯一。
单个工具的子字段:
- tools[].type
string必选:工具类型,当前取值为function。 - tools[].function
object必选:函数定义。- tools[].function.name
string必选:函数名,仅允许字母、数字、下划线与短横线,最大长度 128。 - tools[].function.description
string可选:函数用途说明,模型据此判断何时调用该函数。 - tools[].function.parameters
object可选:函数参数,使用 JSON Schema 描述。省略该字段表示函数无参数。
- tools[].function.name
工具定义示例
json
{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询指定城市的天气",
"parameters": {
"type": "object",
"properties": {
"city": { "type": "string", "description": "城市名称" }
},
"required": ["city"]
}
}
}tool_choice string | object 可选
控制模型是否以及调用哪个工具。
none:不调用任何工具,直接生成消息。auto:由模型自行决定是生成消息还是调用工具。required:强制模型调用一个或多个工具。- 指定具体工具:传
{"type": "function", "function": {"name": "get_weather"}},强制调用该函数。
未传入 tools 时默认 none;传入 tools 时默认 auto。
parallel_tool_calls boolean 可选
是否允许模型在一次回复中并行调用多个工具。关闭后模型每次最多调用一个工具。
frequency_penalty number 可选
频率惩罚,按 token 在文本中已出现的次数进行惩罚,降低模型逐字重复的概率。通常取值范围为 -2.0 到 2.0,默认 0。
部分模型不支持
该字段属于通用兼容参数,部分模型可能不支持,传入后可能不生效或被忽略。如无明确需求可不传。
presence_penalty number 可选
存在惩罚,按 token 是否已在文本中出现过进行惩罚,鼓励模型引入新话题。通常取值范围为 -2.0 到 2.0,默认 0。
部分模型不支持
与 frequency_penalty 相同,该字段可能不生效或被忽略。
logprobs boolean 可选
是否返回输出 token 的对数概率信息。为 true 时,响应中会包含 logprobs 字段。
top_logprobs integer 可选
在每个 token 位置返回概率最高的候选 token 数量,取值范围 0 到 20。使用该字段时必须同时将 logprobs 设为 true。
seed integer 可选
随机种子。在相同参数与相同种子的情况下,接口会尽量返回相同结果,但不保证完全可复现,请勿将其用于需要严格确定性的场景。
user string 可选
调用方的终端用户标识,用于区分不同来源的请求,便于内容安全审查与问题排查。请勿在其中携带用户隐私信息。
响应参数
非流式请求返回 application/json,主要字段如下。
id string
本次补全的唯一标识。
object string
对象类型,固定为 chat.completion。
created integer
响应创建时间的 Unix 时间戳(秒)。
model string
实际用于生成该响应的模型名称。
choices object[]
模型生成的候选回复列表,n 为 1 时通常只包含 1 个元素。
- choices[].index
integer:该结果在列表中的序号。 - choices[].finish_reason
string:生成停止原因。常见取值:stop:正常结束,或命中了stop停止序列。length:达到max_tokens或上下文长度上限,输出被截断。tool_calls:模型决定调用工具。content_filter:内容被安全策略过滤。
- choices[].message
object:模型生成的消息。- choices[].message.role
string:消息角色,固定为assistant。 - choices[].message.content
string:模型回复的正文内容。 - choices[].message.reasoning_content
string:思维链内容。仅支持思考模式(推理)的模型会返回该字段,普通模型通常不返回。 - choices[].message.tool_calls
object[]:模型产生的工具调用列表。仅当finish_reason为tool_calls时返回。- choices[].message.tool_calls[].id
string:工具调用 ID,回传工具结果时需要带上。 - choices[].message.tool_calls[].type
string:工具类型,当前为function。 - choices[].message.tool_calls[].function.name
string:被调用的函数名。 - choices[].message.tool_calls[].function.arguments
string:函数参数的 JSON 字符串。该字符串不保证一定是合法 JSON,调用前请在代码中做校验。
- choices[].message.tool_calls[].id
- choices[].message.role
- choices[].logprobs
object:token 对数概率信息。仅当请求中logprobs为true时返回,否则可能为null。
工具调用参数需要校验
function.arguments 是模型生成的字符串,可能出现不合法 JSON 或包含未在 schema 中定义的参数。请在服务端解析并校验后再执行实际动作。
usage object
本次请求的 token 用量统计。
- usage.prompt_tokens
integer:输入(提示)token 数。 - usage.completion_tokens
integer:输出(生成)token 数。 - usage.total_tokens
integer:总 token 数,等于输入与输出之和。 - usage.prompt_tokens_details
object:输入 token 的明细,例如cached_tokens表示命中上下文缓存的 token 数。具体包含哪些明细字段取决于模型。 - usage.completion_tokens_details
object:输出 token 的明细,例如reasoning_tokens表示推理消耗的 token 数。具体包含哪些明细字段取决于模型。
用量字段以实际返回为准
不同模型返回的用量明细不完全一致,部分明细字段可能缺失。请以实际响应内容为准,不要依赖固定的字段集合。
system_fingerprint string
后端配置的指纹信息,便于排查后端变更带来的结果差异。该字段不一定返回。
流式响应
当请求体中 stream 为 true 时,接口以 SSE 方式返回,响应头为 Content-Type: text/event-stream。每个分块形如 data: {JSON},最后以一行 data: [DONE] 结束。
分块结构与完整响应基本一致,区别在于 object 为 chat.completion.chunk,且增量内容位于 choices[].delta 中:
text
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1710000000,"model":"YOUR_MODEL","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1710000000,"model":"YOUR_MODEL","choices":[{"index":0,"delta":{"content":"你好"},"finish_reason":null}]}
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1710000000,"model":"YOUR_MODEL","choices":[{"index":0,"delta":{"content":",很高兴"},"finish_reason":null}]}
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","created":1710000000,"model":"YOUR_MODEL","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]分块字段说明:
- choices[].delta.role
string:通常在第一个分块中出现,值为assistant。 - choices[].delta.content
string:本次分块新增的正文内容,需要按顺序拼接。最后一个分块可能不含content。 - choices[].delta.reasoning_content
string:思维链增量内容,仅推理模型可能返回。 - choices[].delta.tool_calls
object[]:工具调用增量。流式场景下function.arguments会分多次返回,需要按index拼接后才是完整参数。 - choices[].finish_reason
string:为null表示尚未结束;出现非空值表示本次生成结束。 - usage
object:token 用量统计。未开启stream_options.include_usage时,通常只在最后一个分块中出现。
流式解析建议
按行读取响应,跳过空行,忽略 data: [DONE];对每行去掉 data: 前缀后解析 JSON,只拼接增量字段。请注意网络中断可能导致 [DONE] 未到达,客户端需要自行处理超时与中断。
工具调用与流式组合
流式返回工具调用时,id 与 function.name 通常只在首个相关分块中出现,后续分块只携带 function.arguments 片段。请按 choices[].index 与 tool_calls[].index 归并后再拼接参数。
请求示例
基础对话
bash
curl -X POST "https://api.yu-yu.ai/v1/chat/completions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4.1-flash",
"messages": [
{"role": "system", "content": "你是一个简洁的助手。"},
{"role": "user", "content": "请用一句话介绍你自己。"}
],
"temperature": 0.7,
"max_tokens": 512
}'流式对话
bash
curl -N -X POST "https://api.yu-yu.ai/v1/chat/completions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4.1-flash",
"messages": [
{"role": "user", "content": "写一首关于秋天的五言绝句。"}
],
"stream": true,
"stream_options": {"include_usage": true}
}'工具调用
bash
curl -X POST "https://api.yu-yu.ai/v1/chat/completions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "YOUR_MODEL",
"messages": [
{"role": "user", "content": "北京今天天气怎么样?"}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询指定城市的天气",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称"}
},
"required": ["city"]
}
}
}
],
"tool_choice": "auto"
}'响应示例
非流式响应的完整 JSON 结构:
json
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1710000000,
"model": "deepseek-v4.1-flash",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "我是一个可以帮你解答问题、撰写文字和处理图片的 AI 助手。"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 24,
"completion_tokens": 18,
"total_tokens": 42
}
}返回工具调用时的响应片段:
json
{
"id": "chatcmpl-def456",
"object": "chat.completion",
"created": 1710000001,
"model": "YOUR_MODEL",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "",
"tool_calls": [
{
"id": "call_abc123",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"city\":\"北京\"}"
}
}
]
},
"finish_reason": "tool_calls"
}
],
"usage": {
"prompt_tokens": 88,
"completion_tokens": 21,
"total_tokens": 109
}
}常见错误
接口错误通常返回如下结构:
json
{
"error": {
"message": "错误描述",
"type": "invalid_request_error",
"param": "model",
"code": "invalid_model"
}
}| 状态码 | 含义 | 处理建议 |
|---|---|---|
400 | 请求参数不合法,如缺少必填字段、字段类型错误、字段取值越界 | 对照「请求参数」逐项检查请求体;确认 model 与 messages 存在且格式正确 |
400 | 上下文超长,输入 token 数超过模型上下文长度 | 精简历史消息或提示词,或改用上下文更长的模型 |
401 | 鉴权失败,API Key 缺失、错误或已失效 | 确认请求头为 Authorization: Bearer <API_KEY>,并检查 Key 是否仍然有效 |
403 | 当前 API Key 无权访问该模型或该能力 | 在 https://api.yu-yu.ai/console 确认目标模型处于可用状态、当前 Key 是否可调用该模型;Key 可用的模型范围由服务端决定,调用方无需自行配置 |
404 | 模型不存在或路径错误 | 确认 model 与控制台中展示的模型名完全一致,并确认请求路径为 /v1/chat/completions |
413 | 请求体过大,多模态输入或图片 Base64 体积超出限制 | 压缩图片体积,或改用图片 URL 而不是内联 Base64 |
429 | 请求过于频繁,短时间内提交的请求数过多 | 降低请求频率与并发,采用指数退避后重试;长期未恢复时请稍后再试或更换其他可用模型 |
500 | 服务端内部错误 | 稍后重试;若持续出现,请携带请求时间与请求 ID 反馈 |
503 | 服务暂不可用或当前负载过高 | 指数退避后重试;持续失败时更换其他可用模型 |
排查顺序建议
先确认请求路径、鉴权头和请求体格式,再用文档中的 cURL 示例复现,最后才迁移到 SDK 或 CLI 工具,这样能快速区分是接入配置问题还是模型侧问题。
