概述
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"
}
}
}
}
}相关页面
- agent-loop — 流式输出在执行循环中的位置
- queue — 消息队列与并发控制
- queue-steering — Steering 与流式的交互