Concepts 导读

Streaming 不是逐字推送,是“写完一段发一段”

OpenClaw 的 streaming 分两层:block streaming 把助手写完的整块内容发到频道,preview streaming 在 Telegram/Discord/Slack 上临时更新一条预览消息。没有真正的 token 级流式输出到频道。配置时先搞清楚你要的是“边写边发完整段落”还是“生成完再发最终结果”,block streaming 默认关闭,需在 agents.defaults.blockStreamingDefault 或频道覆盖中开启。

先讲这一页到底在解决什么

Streaming 不是逐字推送,是“写完一段发一段”

OpenClaw 的 streaming 分两层:block streaming 把助手写完的整块内容发到频道,preview streaming 在 Telegram/Discord/Slack 上临时更新一条预览消息。没有真正的 token 级流式输出到频道。配置时先搞清楚你要的是“边写边发完整段落”还是“生成完再发最终结果”,block streaming 默认关闭,需在 agents.defaults.blockStreamingDefault 或频道覆盖中开启。

原文共 12 节,先看 Start Here 路径:/concepts/streaming 查看官方原文

第一站

🪄 OpenClaw 其实有两种“流”

原文一开始就说得很清楚:它不是只有一种流式,而是两层。

🧱

Block streaming

像一块一块地把写好的内容递出来。不是每个字都飞出来,而是攒成段,再发消息。

👀

Preview streaming

像先在一个临时小黑板上不断擦写,让你看到它正在生成,最后再给出正式版本。

🚫

没有真 token 雨

官方明确说了,目前不是那种“字粒子雨”式 streaming。它仍然是按消息块在工作。

🎯

为什么要分两层

因为不同渠道能做的事不一样。有的更适合不断改同一条预览,有的更适合分块发多条消息。

第二站

🧱 Block streaming 像边写边递纸条

模型写出一段内容后,chunker 会先看看这一小段够不够发、要不要再攒一会儿、要不要先找个更好看的断点。

📏 minChars

像“太短先别递”。一句半句就飞出去会很碎,所以会先攒到差不多。

✂️ maxChars

像“太长也别憋着”。到了这个上限,就要找地方切开,先发一块出去。

🪶 breakPreference

像优先按自然段、换行、句号这些地方切,尽量别把一句话从中间硬砍开。

📌 代码块为什么被特别照顾

因为官方不想把代码围栏切坏。所以如果逼不得已要中间断,也会先帮你把围栏收好,再在下一块重新打开。

第三站

🧺 Coalescing 像先把几张小纸条叠一起,再递给你

如果每攒一点点就发一条,很容易像被消息雨砸脸。所以 OpenClaw 还会先把连续小块再合一下。

⏳ idleMs

像等一小会儿,看看后面还有没有接着写。如果还有,就先别急着发。

📦 maxChars

像合并篮子也不能太大,太大了就得先倒出来一部分。

🎈 这节一句话版

Coalescing 不是新的流式,是为了别让 block streaming 碎成满地纸屑。

🧠 为什么 Slack / Discord / Signal 默认更想合并

因为这些地方如果一行一个气泡,读感会特别吵,所以官方会更偏向先攒大一点再发。

第四站

👀 Preview streaming 更像临时草稿板

有些渠道支持不断改一条预览消息。这时候你看到的是“草稿板在更新”,不一定是正式多条消息已经发出去了。

🪄

partial

像一块草稿板,上面的字不断被更新成最新版本。

🧱

block

像草稿板不是整块重写,而是一步步往下追加几块内容。

📊

progress

像先显示“正在做事”的状态提示,等真正写完再把正式答案递出来。

📣

渠道映射不完全一样

Telegram、Discord、Slack 都能做预览,但每家的玩法不完全一样,别以为一个配置 everywhere 都同样表现。

第五站

🛠 配置项别硬背,先看它们在现场控制什么

这一页的配置很多,但本质上都在管“什么时候发、发多大、发成什么样”。

agents.defaults.blockStreamingDefault

像总开关,决定默认要不要用“边写边递纸条”这一套。

blockStreamingBreak: "text_end"

像一写完一小块就尝试往外递,节奏更快。

blockStreamingBreak: "message_end"

像等整段大作文基本写好,再一次或分几块送出去,节奏更稳。

channels.<channel>.streaming

像给某个具体聊天门口单独决定:这个地方是用草稿板预览,还是干脆不要预览。

第六站

🧍 Human delay 是什么?像故意别把多条消息喷得太像机关枪

原文这段很可爱。它不是技术必须,而是读感优化。

⏸ natural

像在多条 block 回复之间故意停一小下,更像人类发消息,不像脚本喷射器。

🎛 custom

像你自己决定停顿区间,让节奏更快或更慢。

📌 注意它只影响什么

它只影响多块 block 回复之间的间隔,不是让整条最终答案都慢下来。

🎈 一句话收住

Human delay 是读感化妆,不是功能核心。

最后总结

🎈 把 Streaming 这页压成一句最好记的话

OpenClaw 的 streaming 更像“边写边分块递纸条”或“先用草稿板不断更新”,而不是每个字都像雨点一样掉出来。

如果你下一页只想继续看一页,我建议看 /tools/browser。因为浏览器工具和流式回复很像,表面看起来很丝滑,背后其实也分“即时预览”和“真正动作”两层。