流式输出

Streaming Output (SSE)

流式输出是 API 按 Server-Sent Events(SSE)协议逐 Token 返回结果的响应方式,让用户能边生成边阅读,显著改善交互体感。

详细解释

流式输出(Streaming Output) 是现在所有聊天 API 的标配。开启方式很简单:在请求里加 stream: true(或 SDK 里的 .stream() 方法),模型每生成一个或一小段 Token 就立刻推给你,不用等全部生成完才一次性返回。

底层协议一般用 Server-Sent Events (SSE):响应 Content-Type 为 text/event-stream,每一行形如 data: {...}

为什么必须用流式

以一次生成 800 Token 的回答为例:

  • 非流式:用户等了 8 秒才看到完整回答(漫长的空白,体感非常差);
  • 流式:500ms 后开始蹦字,5–10 秒逐步显现完(感觉模型”正在思考并打字”)。

同样的 TPS,流式会让用户主观感觉”快了 5–10 倍”。

唯元智创(Weimeta)的聚合 API 对所有支持模型均开启流式,并增加了服务端分片合并逻辑,避免返回过于细碎的事件。

代码示例(Python + SDK)

from weimeta import Weimeta

client = Weimeta(api_key="wm-xxxx")

# 非流式
resp = client.chat.completions.create(
    model="deepseek-v3", messages=messages
)
print(resp.choices[0].message.content)

# 流式
for chunk in client.chat.completions.create(
    model="deepseek-v3", messages=messages, stream=True
):
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")

常见问题

流式输出的结果怎么拿到完整 usage token 统计?
OpenAI 兼容格式会在流的最后一条 data: [DONE] 之前,发一条 usage 字段不为空的事件。把每个 chunk 的 delta 累加 + 最后一条 usage 记录,就是精确 Token 数。