开发文档
Chat Completions
POST/v1/chat/completions
目录里的所有文本模型都能用 OpenAI 兼容的 Chat Completions 调用。官方 OpenAI SDK 把 base URL 设为 https://api.boostrail.com/v1 即可使用。
示例
curl https://api.boostrail.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4.1-flash",
"messages": [{"role": "user", "content": "你好"}]
}'from openai import OpenAI
client = OpenAI(api_key="YOUR_API_KEY", base_url="https://api.boostrail.com/v1")
stream = client.chat.completions.create(
model="deepseek-v4.1-flash",
messages=[{"role": "user", "content": "写一首关于火车的俳句。"}],
max_tokens=200,
stream=True,
)
for chunk in stream:
if chunk.choices:
print(chunk.choices[0].delta.content or "", end="")
if chunk.usage:
print("\n", chunk.usage)import OpenAI from "openai";
const client = new OpenAI({ apiKey: "YOUR_API_KEY", baseURL: "https://api.boostrail.com/v1" });
const completion = await client.chat.completions.create({
model: "deepseek-v4.1-flash",
messages: [{ role: "user", content: "你好" }],
});
console.log(completion.choices[0].message.content);请求体
| 字段 | 类型 | 说明 |
|---|---|---|
model | string,必填 | 模型页 上的模型 ID。 |
messages | array,必填 | 角色有 system、user、assistant 和 tool。content 可以是字符串、分段数组(text、image_url),在只带 tool_calls 的 assistant 轮次里也可以是 null。图片分段需要模型支持图片输入。 |
max_tokens, max_completion_tokens | integer | 输出 token 的上限;没有 max_tokens 时使用 max_completion_tokens。它同时决定冻结多少余额,见 余额与 max_tokens。 |
stream | boolean | 服务器推送事件(SSE),见 流式输出。 |
stream_options | object | 可以传。不管这里怎么设,用量都会在最后一个分块里返回。 |
temperature, top_p, stop, frequency_penalty, presence_penalty, seed | 原样传给模型。 | |
tools, tool_choice, parallel_tool_calls | 原样传给模型。messages 里可以带工具调用的历史。 | |
response_format | object | 原样传给模型:JSON 模式或 json_schema,需要模型本身支持。 |
reasoning_effort, thinking, reasoning, enable_thinking | 四种写法都可以开关思考或设定思考预算,按你的客户端习惯任选一种,系统会按承接这个模型的线路自动换成它认可的写法。 | |
logprobs, top_logprobs | 原样传给模型。 | |
user | string | 用作路由的会话 ID(见 会话保持),不传给模型。 |
n | integer | 只支持 1,其他值返回 400 invalid_request。 |
上表以外的字段
audio、web_search_options,以及["text"]以外的modalities,返回400 unsupported_parameter,param会指出是哪个字段。- 其他字段不会传给模型。请求照常执行,响应头
x-boostrail-degraded会列出被丢掉的字段。
流式输出
设置 stream: true 后,响应是一串 OpenAI 分块格式的 data: 行,以 data: [DONE] 结束。[DONE] 之前的最后一个分块带 usage。
如果承接请求的线路 45 秒内没有返回任何内容,请求会在任何数据发给你之前换到另一条线路。一旦已经开始返回数据,请求就不再换线。详见 报错与换线。
响应
标准的 chat.completion 对象。usage 包含 prompt_tokens、completion_tokens 和 total_tokens;提示词有一部分读自缓存时,还会带 prompt_tokens_details.cached_tokens。缓存 token 按该模型的缓存读取价格计费。
请求开始前的检查
- 模型 ID 不存在:
400 model_not_found。 - 输入过长:估算超出模型输入上限的请求,在冻结任何余额之前就返回
400 context_length_exceeded。报错信息会写明上限和估算值,遇到这个报错会自动压缩历史的客户端可以照常工作。 - 非流式请求的时限是 180 秒,超时返回
504 provider_timeout。生成内容较长时请改用流式。
余额与 max_tokens
每个请求先按「输入 + 最大输出」冻结余额,结束后按实际用量结算,多冻结的部分退回。
- 设置了
max_tokens:余额不够覆盖「输入 +max_tokens」时,返回402 insufficient_balance。 - 没设置
max_tokens:余额不足时,输出上限会降到余额能覆盖的长度,请求照常执行。连很短的回复都覆盖不了时,返回402 insufficient_balance。 - 已经为这个模型添加了自己的厂商 Key(BYOK):余额不够时,请求只用你自己的 Key 执行,不再回落到平台线路,而不是返回
402。如果你的 Key 也失败,报错信息会说明只尝试了你的 Key。 - 失败的请求不计费,冻结的余额全部退回。