对话接口
这是生成文本响应的主要接口。传入一组对话消息,模型会返回对应的响应。
接口地址
POST https://api.routic.ai/v1/chat/completions
Content-Type: application/json
Authorization: Bearer sk-xxxxxxxx
如使用自定义部署,将域名替换为你的 Base URL。
请求参数
必填参数
| 参数 | 类型 | 说明 |
|---|---|---|
model | string | 标准模型名或智能路由名(如 deepseek-r1、auto/reasoning)。见模型目录。 |
messages | array | 对话消息列表,每条消息必须有 role(system、user 或 assistant)和 content(字符串)。 |
可选参数
| 参数 | 类型 | 默认值 | 范围 | 说明 |
|---|---|---|---|---|
stream | boolean | false | - | 设为 true 时以服务器发送事件流式输出。 |
temperature | number | 1.0 | 0–2 | 采样温度。值越低,输出越稳定;0 最稳定,2 最随机。 |
max_tokens | integer | 模型默认 | - | 最大生成 token 数。 |
top_p | number | 1.0 | 0–1 | 核采样概率阈值。 |
frequency_penalty | number | 0 | -2–2 | 根据 token 在已出现文本中的频率进行惩罚。 |
presence_penalty | number | 0 | -2–2 | 根据 token 是否已出现进行惩罚。 |
stop | array / string / null | null | - | 最多 4 个停止序列,模型生成到这些序列时停止。 |
tools | array | null | - | 工具定义列表,用于函数调用。见工具调用。 |
tool_choice | string / object | "none" | - | 控制调用哪个工具。"none" = 不调用,"auto" = 模型决定,或指定一个工具。 |
response_format | object | { "type": "text" } | - | 设为 { "type": "json_object" } 启用 JSON 输出模式。见JSON 输出。 |
thinking | object | null | - | 设为 { "type": "enabled" } 在推理模型上启用思维链模式。见思维链模式。 |
logprobs | boolean | false | - | 是否返回输出 token 的对数概率。 |
top_logprobs | integer | null | 0–20 | 每个位置返回最可能 top N 个 token 的概率。 |
stream_options | object | null | - | 流式输出配置。仅在 stream: true 时设置。 |
消息格式
messages 数组中的每条消息必须包含:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
role | string | 是 | system、user 或 assistant 之一。 |
content | string | 是 | 消息的文本内容。 |
系统消息示例(可选,引导模型行为):
{ "role": "system", "content": "你是一个有用的编程助手。" }
用户消息示例:
{ "role": "user", "content": "请解释 JWT 认证的工作原理。" }
助手消息示例(来自之前的响应):
{ "role": "assistant", "content": "JWT 认证的工作原理是..." }
响应体(非流式)
{
"id": "chatcmpl-abc123",
"object": "chat.completion",
"created": 1713593400,
"model": "deepseek-r1",
"system_fingerprint": "fp_xxxxx",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "以下是详细说明...",
"reasoning_content": "..." // 启用思维链模式时的思维链内容
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 25,
"completion_tokens": 120,
"total_tokens": 145,
"prompt_cache_hit_tokens": 0,
"prompt_cache_miss_tokens": 25
}
}
响应字段说明
| 字段 | 类型 | 说明 |
|---|---|---|
id | string | 本次响应的唯一标识符。 |
object | string | 始终为 "chat.completion"。 |
created | integer | 响应创建时的 Unix 时间戳。 |
model | string | 生成响应的模型名。 |
system_fingerprint | string | 代表后端配置的指纹。 |
choices | array | 响应选项列表,通常包含一个条目。 |
choices[].index | integer | 该选项在列表中的索引。 |
choices[].message | object | 生成的消息,包含 role 和 content。 |
choices[].message.reasoning_content | string | 思维链内容(仅在思维链模式启用时出现)。 |
choices[].finish_reason | string | 模型停止的原因:"stop"、"length"、"tool_calls" 或 "content_filter"。 |
usage | object | Token 使用量统计。 |
usage.prompt_tokens | integer | prompt 中的 token 数。 |
usage.completion_tokens | integer | 生成响应中的 token 数。 |
usage.total_tokens | integer | 总 token 数(prompt + 响应)。 |
usage.prompt_cache_hit_tokens | integer | 从缓存命中的 token 数(按较低费率计费)。 |
usage.prompt_cache_miss_tokens | integer | 未从缓存命中的 token 数(按正常费率计费)。 |
流式输出
设 stream: true 时,模型一边生成 token 一边推送事件。每个事件是一条 text/event-stream 消息:
data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1713593400,"model":"deepseek-r1","choices":[{"index":0,"delta":{"role":"assistant","content":"以下是"},"finish_reason":null}]}
data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1713593400,"model":"deepseek-r1","choices":[{"index":0,"delta":{"content":"详细说明"},"finish_reason":null}]}
data: {"id":"chatcmpl-abc123","object":"chat.completion.chunk","created":1713593400,"model":"deepseek-r1","choices":[{"index":0,"delta":{"content":"..."},"finish_reason":null}]}
data: [DONE]
流式增量格式
每个 chunk 包含:
| 字段 | 说明 |
|---|---|
delta.role | 消息的 role(仅在第一个 chunk 中出现)。 |
delta.content | 增量生成的文本。拼接所有 chunk 得到完整响应。 |
delta.reasoning_content | 增量思维链内容(启用思维链模式时)。 |
finish_reason | 生成中为 null,最终 chunk 为 "stop" / "length" / "tool_calls"。 |
流以 data: [DONE] 结束。
代码示例
cURL(基础)
curl -X POST "https://api.routic.ai/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-xxxxxxxx" \
-d '{
"model": "deepseek-r1",
"messages": [
{ "role": "user", "content": "请解释 REST 和 GraphQL 的区别。" }
],
"temperature": 0.7,
"max_tokens": 500
}'
cURL(流式)
curl -X POST "https://api.routic.ai/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-xxxxxxxx" \
-d '{
"model": "deepseek-v3",
"messages": [
{ "role": "user", "content": "写一首关于编程的俳句。" }
],
"stream": true
}'
cURL(智能路由名)
curl -X POST "https://api.routic.ai/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-xxxxxxxx" \
-d '{
"model": "auto/reasoning",
"messages": [
{ "role": "user", "content": "分析这个业务需求并给出下一步建议。" }
]
}'
Python(OpenAI SDK)
from openai import OpenAI
client = OpenAI(
base_url="https://api.routic.ai/v1",
api_key="sk-xxxxxxxx",
)
response = client.chat.completions.create(
model="deepseek-r1",
messages=[
{"role": "user", "content": "请解释 REST 和 GraphQL 的区别。"}
],
temperature=0.7,
max_tokens=500,
)
print(response.choices[0].message.content)
Node.js(OpenAI SDK)
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.routic.ai/v1",
apiKey: "sk-xxxxxxxx",
});
const response = await client.chat.completions.create({
model: "deepseek-r1",
messages: [{ role: "user", content: "请解释 REST 和 GraphQL 的区别。" }],
temperature: 0.7,
max_tokens: 500,
});
console.log(response.choices[0].message.content);
两种调用方式
方式一:标准模型名(推荐)
使用行业公认的模型名,精确控制调用哪个模型:
{ "model": "deepseek-r1", "messages": [...] }
方式二:智能路由名
使用 Routic 管理的路由标识符,由 Routic 自动选择该能力下最优的模型:
{ "model": "auto/reasoning", "messages": [...] }
两种方式走同一个接口。详见模型目录。
从其他平台迁移
如果你已经在用 OpenAI、OpenRouter 或其他兼容网关,迁移只需 3 步:
- 把
base_url改为 Routic 接入地址。 - 把 API 密钥改为你的 Routic API Key。
- 把
model参数改为 Routic 支持的标准模型名。
请求结构、消息格式和响应解析都不用改。