流式传输

以 Markdown 格式查看

当你想在模型生成内容时即时展示输出,而不是等待完整响应时,请使用 streaming。OpenModels 通过带有 stream: truePOST /chat/completions 支持兼容 OpenAI 的 streaming。

基础 URL:

https://api.getopenmodels.com/v1

端点:

POST /chat/completions

请求

在请求 body 中将 stream 设置为 true

{
"model": "qwen3.5-flash",
"route": { "provider": "<provider-for-this-model>" },
"route_mode": "balanced",
"messages": [
{
"role": "user",
"content": "Write a concise launch announcement for OpenModels."
}
],
"stream": true,
"max_tokens": 512
}

cURL

使用 -N,让 cURL 不缓冲响应:

curl -N https://api.getopenmodels.com/v1/chat/completions \
-H "Authorization: Bearer $OM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3.5-flash",
"route": { "provider": "<provider-for-this-model>" },
"route_mode": "balanced",
"messages": [
{
"role": "user",
"content": "Write a concise launch announcement for OpenModels."
}
],
"stream": true,
"max_tokens": 512
}'

响应会作为 server-sent events 发送:

data: {"choices":[{"delta":{"content":"OpenModels"}}]}
data: {"choices":[{"delta":{"content":" gives developers"}}]}
data: [DONE]

读取每个 data: event,在存在 choices[0].delta.content 时追加内容,并在收到 [DONE] 时停止。

Python

import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.getopenmodels.com/v1",
api_key=os.environ["OM_API_KEY"],
)
stream = client.chat.completions.create(
model="qwen3.5-flash",
messages=[
{
"role": "user",
"content": "Write a concise launch announcement for OpenModels.",
}
],
stream=True,
max_tokens=512,
extra_body={
"route": {"provider": "<provider-for-this-model>"},
"route_mode": "balanced",
},
)
for chunk in stream:
delta = chunk.choices[0].delta
if delta.content:
print(delta.content, end="", flush=True)

Node.js

import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.getopenmodels.com/v1",
apiKey: process.env.OM_API_KEY,
});
const stream = await client.chat.completions.create({
model: "qwen3.5-flash",
route: { provider: "<provider-for-this-model>" },
route_mode: "balanced",
messages: [
{
role: "user",
content: "Write a concise launch announcement for OpenModels.",
},
],
stream: true,
max_tokens: 512,
});
for await (const chunk of stream) {
const content = chunk.choices[0]?.delta?.content;
if (content) {
process.stdout.write(content);
}
}

处理流式输出

  • 按顺序追加文本 deltas。
  • 将缺少 delta.content 视为正常情况。有些 chunks 只携带元数据。
  • 如果需要保存最终答案,请维护一个本地 buffer。
  • 如果连接在文本开始 streaming 后断开,请判断重试是否可能复制用户可见输出。
  • 记录你的客户端请求 ID、模型 ID、端点,以及网关返回的任何 error.request_id

计费

流式传输改变的是输出交付方式,而不是用量计费方式。积分基于实际输入和输出 token 用量消耗。