Router One

一个端点,流式输出所有模型

流式输出把 chat completion 变成 Server-Sent Events:Token 边生成边渲染,用户边读模型边写。Router One 遵循 OpenAI Chat Completions 规范——把 stream 设为 true,同一条代码路径即可流式调用 GPT、Claude、Gemini、DeepSeek 等模型,具体支持因模型而异。本页覆盖线上格式、经得住生产环境的客户端写法,以及流式绕不开的两个运维问题:超时与计费。

开启流式

只需一个字段。-N 参数让 curl 不做缓冲,分块到达即打印。模型 ID 从 /models 目录里选:

stream.sh
curl -N https://api.router.one/v1/chat/completions \
  -H "Authorization: Bearer sk-your-router-one-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "<model-id-from-/models>",
    "messages": [{"role": "user", "content": "写一首俳句"}],
    "stream": true
  }'

线上传的是什么

响应是 text/event-stream:每条 SSE 行携带一个 chat.completion.chunk 对象,choices[].delta 里是片段——第一块通常带 role,后续块携带 content 片段,最后以字面量 [DONE] 结束:

wire-format.txt
data: {"object":"chat.completion.chunk","choices":[{"delta":{"role":"assistant"},"index":0}]}

data: {"object":"chat.completion.chunk","choices":[{"delta":{"content":"秋"},"index":0}]}

data: {"object":"chat.completion.chunk","choices":[{"delta":{"content":"月"},"index":0}]}

data: {"object":"chat.completion.chunk","choices":[{"delta":{},"finish_reason":"stop","index":0}]}

data: [DONE]

客户端写法

官方 SDK 把 SSE 解析藏在了内部——你只管迭代分块、拼接 delta。同一个循环适用于端点上的所有模型家族:

stream.py
from openai import OpenAI

client = OpenAI(
    base_url="https://api.router.one/v1",
    api_key="sk-your-router-one-key",
)

stream = client.chat.completions.create(
    model="<model-id-from-/models>",
    messages=[{"role": "user", "content": "写一首俳句"}],
    stream=True,
)
for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)

超时、取消与长生成

  • 首 Token 时间和总时长是两个不同的预算。大 prompt 或深推理模型在第一块到达前会「想」一阵——这段安静是正常现象,不是卡死。
  • 不要给生成类接口设激进的客户端超时;它只会把健康的长生成变成客户端侧的失败。真要设限,就限分块之间的空闲时间,并放宽松。
  • 取消就是关闭 HTTP 连接——没有专门的 API。把 UI 的停止按钮接到请求的 abort 上即可。
  • 判断快慢看 Trace 不靠体感:Dashboard → Logs 的请求记录带端到端耗时,网络慢还是生成慢,一眼分清。

流式请求照样全程记账

流式改变的是交付方式,不是记账方式。每个流式请求在 Dashboard → Logs 里都是一行完整记录:最终模型、Token、花费、延迟、状态——和非流式请求同样的每请求可观测,同样受按 Key 预算约束。流在半途断掉时,这行记录的状态能告诉你生成到底开始过没有。

常见问题

流式会更贵吗?
不会。相同内容下 Token 计费与非流式完全一致——流式只改变响应的交付方式。每请求成本 Trace 展示的字段两种方式相同。
好几秒没有任何输出——请求卡住了吗?
通常没有:模型在产出第一个 Token 前要先处理你的 prompt,长 prompt 或深推理模型会拉长这一阶段。忍住别加短超时——先到 Dashboard → Logs 看这个请求的端到端延迟,再下结论。
工具调用可以流式吗?
可以——工具调用的片段在 delta 分块中逐步到达:累积 id、函数名和参数片段,直到流以 finish_reason 为 tool_calls 结束,然后走正常的工具循环。见 LLM 工具调用指南。
流到一半上游挂了怎么办?
可重试的上游失败在生成尚未展开前可以转移到其他符合条件的路由;一旦你已经在接收 Token,上游硬故障会表现为流中断,客户端应当处理。哪些失败可重试,见自动故障转移页。
所有模型都支持流式吗?
Router One 遵循 OpenAI Chat Completions 规范,包括流式输出,具体支持程度因底层模型而异。先查 /models 目录里该模型的条目,各功能的最新细节见文档。