首页/AI/提示词工程速查/流式输出处理

流式输出处理

流式返回要处理增量解析、断流与取消:按事件边界组装(SSE 事件或按行分隔的 JSON),中途异常时保留已产出内容并标注不完整。

提示词工程速查AI更新于 2026-10-13

流式输出要处理什么

流式把生成过程分段返回,首 token 一到用户就能看到反馈,交互体感明显好于等整段返回。代价是客户端要处理增量拼接、事件边界、断流与取消:必须按事件边界分帧而不是按字节切割,遇到半截数据要留在缓冲区等下一次,断流时要保留已产出内容并明确标注不完整。

基本信息

常见协议SSE 以 data: 行加空行分帧;也有按行分隔的 JSON
拼接方式维护缓冲区,凑齐完整事件再解析
断流保留已输出内容,标注不完整并记录原因
取消关闭连接并同步停止统计与上游请求
存档流结束后保存完整文本与终态,作为后续审计依据

典型使用场景

  • 长文生成:用户边看边判断方向对不对,可及时打断省下费用
  • 对话机器人:逐段渲染并节流刷新,避免高频重排卡顿
  • 代码补全:按行或按块输出,配合语法高亮逐段上色
  • 语音播报:分段转语音,前端与后端并行流水
  • 导出场景:流式收集后在服务端落库,避免丢半段

流式处理要点(伪代码)

流式处理要点(伪代码)
buffer = 空
for chunk in stream:
    buffer += chunk
    while 缓冲区存在完整事件(buffer):
        取出一个事件并输出给前端
        buffer = 剩余部分          # 半截数据留在缓冲区
# 正常结束: 标记完成并保存完整文本
# 断流: 已输出内容标注不完整,记录断开原因与已输出长度
# 取消: 关闭连接、中止上游、停止计费统计

异常情形与处理

情形处理用户侧
收到半截事件留在缓冲区等下一批无感,继续输出
连接中断保留已输出并标记不完整显示内容不完整提示
用户取消关闭连接并中止上游立即停止,费用相应减少
上游返回错误帧解析错误并终止该次流给出可重试提示
前端逐段渲染要节流:每个 token 都触发一次重排会让长回答越写越卡,按时间片批量刷新更稳。

易错点

  • 按字节切割 JSON,半截对象直接解析失败,前端报错但服务端日志看不出问题
  • 断流后前端仍显示加载动画,用户误以为还在生成而继续等待
  • 取消只关前端连接,上游请求继续跑到结束,费用照扣
  • 流结束后不保存完整文本,后续需要审计时只剩残缺片段

数据来源与参考

  • WHATWG HTML 规范 Server-Sent Events(EventSource);流式 API 文档概念
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌