promptgarten 🌱
🌍 DE
术语●○○3 分钟 · +20 XP

流式输出(Streaming):为什么回答是逐字逐句出现的

Claude Code、ChatGPT等工具通常是一点点显示回答,而不是一次性全部呈现——流式输出并不会改变回答的质量或成本。

什么是流式输出

没有流式输出时,你需要等模型把完整回答全部生成完,然后才能一次性看到全部内容。有了流式输出,API会在每个词元(Token)生成完成后立刻单独发送——你能实时看到回答逐渐“长出来”,就像看着有人在打字一样。

为什么工具要这样做

流式输出并不会改变模型整体完成所需的时间——但主观等待感会明显下降,因为你能立刻看到最初的几个词,而不是盯着一片空白。此外,如果回答一开始就明显走偏,还可以提前中止,而不必等整个生成过程结束。

背后的技术

实现这一点的常见机制叫服务器发送事件(Server-Sent Events,SSE)——一种简单成熟的Web技术,服务器利用一个保持打开的连接,持续不断地向客户端发送小块数据。Claude和OpenAI的API都通过SSE提供流式输出,只需在请求中开启一个简单的参数(stream: true)即可。

流式输出不会改变什么

流式输出既不影响回答的质量,也不影响总成本——计费依然按Token数量计算,无论这些Token是逐个到达还是一次性到达。它纯粹是一种呈现技术,用来改善主观体验,并不涉及内容上的任何变化。

示例

curl -N https://api.anthropic.com/v1/messages \ -H "anthropic-version: 2023-06-01" \ -d '{"model":"claude-sonnet-5","stream":true,"max_tokens":100,"messages":[{"role":"user","content":"数到5"}]}' # 输出以一连串SSE事件(event: content_block_delta, ...)的形式到达,而不是一次性完整的单条回答。

🛠️ 练习——自己动手试试

分别以开启和关闭流式输出的方式调用Claude API,在终端中直接观察差异。

  1. 发送一个stream: false的请求,等待完整回答返回。
  2. 用stream: true发送同样的请求(例如通过curl -N),观察回答是如何分块到达的。
  3. 比较两种方式从发送请求到收到最后一个字符所用的总时长。

自查清单

  • 尽管总耗时相近,流式输出的主观等待感是否更短?
  • 你能否在流式输出的原始数据中识别出一个个SSE事件(event: ...)?

小测验

流式输出会对API的回答产生什么改变?

分享:𝕏in💬

来源

相关主题

什么是 API?(说人话版) ●○○工具使用(Tool Use):LLM 如何调用工具 ●●○Claude Code:Anthropic 的命令行 agent ●●○Rate Limit(速率限制)和 Quota(配额):AI 工具为什么有时会让你慢下来 ●○○