Streaming
流式输出模型边生成边返回 token,让用户更早看到首字。
详解
Streaming(流式输出)是指模型每生成一个 token 就立刻通过网络推送给客户端,而不是等整个回答生成完毕再一次性返回。底层协议是 SSE(Server-Sent Events,服务器推送事件):服务端持续向客户端发送 data: ... 格式的数据块,直到发送 [DONE] 信号。对用户体验而言,最关键的指标是 TTFT(Time to First Token,首 token 时间)——用户从发送问题到看到第一个字的等待时间。非流式模式下,用户必须等模型生成完整段落才能看到任何内容,TTFT 等于总生成时间;流式模式下,TTFT 通常只有几百毫秒,用户感知到的"卡顿"大幅降低。流式输出不改变模型生成的总 token 数和最终内容,只改变内容何时抵达客户端。工程注意事项:流式响应中无法提前知道总 token 数(无法在流中途显示 usage 统计),且中途断流需要处理重连逻辑。
一个类比
非流式就像点了外卖,等厨师把整桌菜全做完再一次性送来——你饿着等,门一开全端上来。流式就像在餐厅吃饭,厨师做好一道上一道,你不用等所有菜齐了才能动筷子。先上的那道菜就是"首 token",你先吃着,后面的还在做。
举个例子
import anthropic
client = anthropic.Anthropic()
# stream=True 开启流式:每来一个 token 立刻打印,无需等待全部完成
with client.messages.stream(
model="claude-sonnet-4-6",
max_tokens=256,
messages=[{"role": "user", "content": "用三句话解释量子纠缠"}]
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True) # 每个 token 立刻输出,不换行
print() # 最终换行
# 对比:非流式要等模型生成完所有内容才返回
# resp = client.messages.create(...)
# print(resp.content[0].text) # 一次性全部输出PYTHON 示例
相关概念
- → Latency / TTFT· 延迟与首 Token 时间