概述

OpenClaw 有两个独立的流式层:**块流式(Block Streaming)**向渠道发送完整块,**预览流式(Preview Streaming)**在生成过程中更新临时预览消息。目前没有真正的 token 级 delta 流式到渠道消息。

核心要点

块流式(Block Streaming):

  • 将助手输出分块发送,每块是一条正常渠道消息
  • 默认关闭(agents.defaults.blockStreamingDefault: "off")
  • 非 Telegram 渠道需显式设置 *.blockStreaming: true
  • 两种边界语义:
    • text_end:边生成边发送(实时感强)
    • message_end:消息完成后一次性刷新

分块算法(EmbeddedBlockChunker):

  • 低水位:buffer < minChars 时不发送
  • 高水位:超过 maxChars 时强制分割
  • 分割偏好:段落 → 换行 → 句子 → 空白 → 硬分割
  • 代码块内不分割,强制分割时关闭并重新打开 fence

合并(Coalescing):等待空闲间隙(idleMs)后批量发送,减少单行垃圾消息

预览流式模式:

模式行为
off禁用预览
partial单条预览,持续替换为最新文本
block分块/追加步骤更新预览
progress生成中显示进度,完成后发送最终答案

渠道支持:Telegram、Discord、Slack、Mattermost 支持全部模式;MS Teams 使用原生进度流

工具进度预览:预览流式激活时,工具执行状态(“正在搜索网络”、“正在读取文件”)会实时更新到预览消息中

媒体去重:块流式提前发送媒体后,最终回复中的重复媒体 URL 会被自动过滤

配置/使用

{
  agents: {
    defaults: {
      blockStreamingDefault: "on",
      blockStreamingBreak: "text_end",
      blockStreamingChunk: { minChars: 800, maxChars: 1200 },
      blockStreamingCoalesce: { idleMs: 500 }
    }
  },
  channels: {
    telegram: {
      streaming: {
        mode: "partial",
        preview: {
          toolProgress: true,
          commandText: "status"
        }
      }
    }
  }
}

相关页面