流式输出

流式输出可以持续返回生成内容,不必等待完整响应。当所选模型和渠道支持时,GetRouter 的 Chat Completions 与 Responses 接口可以使用流式请求字段。

使用 cURL 调用 Chat Completions

stream 设置为 true,并使用 curl -N 禁用客户端缓冲:

curl -N https://getrouter.ai/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MODEL_ID",
    "stream": true,
    "messages": [
      {"role": "user", "content": "写一首四行短诗。"}
    ]
  }'

Chat Completions 使用 Server-Sent Events,文本位于:

choices[0].delta.content

流通常以 [DONE] 等终止事件结束。

Python

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://getrouter.ai/v1",
)

stream = client.chat.completions.create(
    model="MODEL_ID",
    stream=True,
    messages=[{"role": "user", "content": "写一首四行短诗。"}],
)

for chunk in stream:
    text = chunk.choices[0].delta.content
    if text:
        print(text, end="", flush=True)

Responses API 流式输出

curl -N https://getrouter.ai/v1/responses \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MODEL_ID",
    "stream": true,
    "input": "列出流式 API 的三个优点。"
  }'

Responses 使用专用事件对象,而不是 Chat Completions 的 choices[].delta Chunk。请按照事件的 type 解析,不要复用只支持 Chat Completions 的解析器。

stream_options

Chat Completions Schema 接受 stream_options,但支持情况取决于模型渠道。如果兼容选项被上游拒绝,请移除该字段,仅保留 stream: true 后重试。

流式 Tool Calls

Tool Call 参数可能分散在多个 Chunk 中。请按照索引或 Tool Call ID 累积数据,等参数完整后再解析和执行。

处理连接中断

客户端超时、代理超时、网络中断或上游错误都可能导致流在终止事件前断开。

客户端应当:

  • 将缺少终止事件的响应视为未完成
  • 根据业务需要保留已经接收的文本
  • 不要盲目重试包含非幂等操作的 Tool 工作流
  • 为所选模型设置足够长的超时时间
  • 记录 Request ID 和错误,但不要记录 API Key
Warning

除非应用能够避免重复副作用,否则不要自动重放已经部分执行的 Agent 或 Tool 工作流。

常见问题

内容一次性返回

客户端、反向代理或中间件可能缓冲 SSE。请先使用 curl -N 直连测试,再排查前端 UI。

连接立即关闭

确认模型支持当前接口的流式输出,并在将问题判断为网络错误前检查 HTTP 响应或错误事件。

Chunk 中没有 Usage

流式请求中的 Usage 返回方式取决于协议、请求选项和模型渠道。不要要求每个 Chunk 都包含 Usage。

下一步