API
Chat Completions
使用 OpenAI-compatible Chat Completions 结构完成文本、视觉、工具调用与流式输出。
概述
Chat Completions 是最常用的对话接口。它接收一组 `messages`,返回模型生成的 assistant 消息;当 `stream` 为 `true` 时,响应以 SSE chunk 逐段返回。
UOUODUO Gateway 兼容主流 OpenAI SDK,也会把请求、模型、路由、token 和成本写入控制台日志。
请求
`POST https://api.example.com/v1/chat/completions`
Headers
| Header | 必需 | 说明 |
|---|---|---|
| Authorization | ✓ | `Bearer $UOUODUO_API_KEY` |
| Content-Type | ✓ | `application/json` |
Body 参数
| 参数 | 类型 | 必需 | 默认 | 说明 |
|---|---|---|---|---|
| model | string | ✓ | - | 模型 ID,例如 `gpt-4o-mini` |
| messages | array<object> | ✓ | - | 对话消息列表 |
| temperature | number | 否 | 1 | 采样温度,范围 0 到 2 |
| top_p | number | 否 | 1 | nucleus sampling,范围 0 到 1 |
| n | integer | 否 | 1 | 返回候选数量 |
| stream | boolean | 否 | false | 是否启用 SSE 流式响应 |
| stream_options | object | 否 | - | 可包含 `include_usage` 等流式选项 |
| stop | string 或 array<string> | 否 | - | 停止序列 |
| max_tokens | integer | 否 | - | 最大输出 token 数,legacy 字段 |
| max_completion_tokens | integer | 否 | - | 最大补全 token 数 |
| presence_penalty | number | 否 | 0 | 主题新颖度惩罚,范围 -2 到 2 |
| frequency_penalty | number | 否 | 0 | 重复频率惩罚,范围 -2 到 2 |
| logit_bias | object | 否 | - | 对特定 token 做概率偏置 |
| user | string | 否 | - | 终端用户标识,用于审计和风控 |
| tools | array<object> | 否 | - | 工具定义,兼容 function calling |
| tool_choice | string 或 object | 否 | auto | 指定或限制工具调用 |
| response_format | object | 否 | - | JSON object / JSON schema 等输出约束 |
| seed | integer | 否 | - | 尽量稳定采样结果 |
| reasoning_effort | string | 否 | - | 推理强度:`low` / `medium` / `high` |
| modalities | array<string> | 否 | - | 输出模态,例如 text、audio |
| audio | object | 否 | - | 请求音频输出时的配置 |
示例
curl https://api.example.com/v1/chat/completions \
-H "Authorization: Bearer $UOUODUO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-4o-mini",
"messages": [
{ "role": "system", "content": "你是一个简洁的生产环境助手。" },
{ "role": "user", "content": "用三点总结本周上线风险。" }
],
"temperature": 0.3
}'响应
同步响应
| 字段 | 类型 | 说明 |
|---|---|---|
| id | string | 本次补全 ID |
| object | string | `chat.completion` |
| created | integer | Unix 秒级时间戳 |
| model | string | 实际执行的模型 |
| choices | array | 候选结果列表 |
| choices[].message | object | assistant 消息 |
| choices[].finish_reason | string | `stop`、`length`、`tool_calls`、`content_filter` 等 |
| usage | object | prompt / completion / total token 统计 |
| system_fingerprint | string | 上游系统指纹,可能为空 |
{
"id": "chatcmpl_abc",
"object": "chat.completion",
"created": 1779483000,
"model": "gpt-4o-mini",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "1. ..." },
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 32,
"completion_tokens": 80,
"total_tokens": 112
}
}流式响应
设置 `"stream": true` 后,服务端会返回 `text/event-stream`。每个事件以 `data:` 开头,最后以 `data: [DONE]` 结束。
data: {"id":"chatcmpl_abc","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"第一"},"finish_reason":null}]}
data: {"id":"chatcmpl_abc","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"点"},"finish_reason":null}]}
data: [DONE]如果设置 `stream_options.include_usage=true`,结束前可能会额外返回一个包含 `usage` 的 chunk;如果网络中断,最终 usage chunk 可能收不到,请以 `/app/logs` 为准。
错误
| HTTP | code | 说明 | 处理建议 |
|---|---|---|---|
| 400 | invalid_request_error | 请求体格式、参数范围或 messages 不合法 | 按字段表校验请求 |
| 401 | unauthorized | API key 缺失、错误或过期 | 重新在 `/app/keys` 创建 key |
| 403 | forbidden | key 没有访问模型或分组权限 | 检查模型限制与项目预算 |
| 429 | rate_limit_exceeded | RPM/TPM/余额或上游限流 | 参考 `/docs/guides/rate-limits` |
| 500 | internal_error | 网关或上游异常 | 记录 request id 并查看 `/status` |
注意事项
- Vision 输入需选择支持图像的模型,并用 content parts 传入 `image_url`。
- 工具调用时模型可能返回不完整 JSON,服务端应对 `tool_calls[].function.arguments` 做校验。
- 不同供应商对 `seed`、`reasoning_effort`、`response_format` 的支持并不完全一致。
- 控制成本时优先设置 `max_completion_tokens`,并在 `/app/usage` 按 key 或 project 观察趋势。