OC
OpenClaw 中文解释版

给五岁小朋友也能看懂的说明书

简要总结

Streaming and Chunking

这页说明书在讲 OpenClaw 是怎么“一块一块”地把大段回答送给你的,就像把一大块蛋糕切成小块,一块一块地递给你。它还会讲怎么让这些“小块”看起来更自然,就像朋友在慢慢跟你说话一样。如果你想让机器人回答时不要一次全出来,而是像打字一样慢慢出现,或者想调整它“切蛋糕”的大小,就看这一页。

五岁小孩版解释

OpenClaw 有两种“慢慢送东西”的方法。第一种叫“块流”,就像把机器人写好的回答,切成一块一块的“积木”,然后一块一块地发出来。第二种叫“预览流”,就像在机器人打字的时候,先给你看一个临时的草稿,它会一边写,一边更新这个草稿。

控制“块流”的开关和大小 有几个地方可以控制“块流”怎么工作:

  1. 总开关:在 agents.defaults.blockStreamingDefault 这里,可以把它设成 "on"(开)或 "off"(关)。默认是关着的。
  2. 每个频道单独控制:比如 *.blockStreaming,可以给某个聊天软件(比如微信)单独设置成 "on""off"
  3. 什么时候切块:在 agents.defaults.blockStreamingBreak 这里,可以选 "text_end""message_end"
    • "text_end",就是机器人每写完一小段,就马上切一块发出来。
    • "message_end",就是等机器人把整段话都写完了,再一次性把所有“块”都发出来。但如果话太长,还是会切成好几块的。
  4. 每块多大:在 agents.defaults.blockStreamingChunk 这里,可以设置 minChars(最小字数)和 maxChars(最大字数)。机器人会尽量在达到最大字数前,找个合适的地方(比如句号那里)把“块”切开。
  5. 把小块合并:在 agents.defaults.blockStreamingCoalesce 这里,可以设置把几个刚切出来的小块,稍微等一下(idleMs),如果后面没有新内容了,就把它们合并成一个大块再发出去。这样就不会一下子发太多条很短的消息了。
  6. 每个频道的字数限制:每个聊天软件自己也有字数限制,比如 channels.whatsapp.textChunkLimit。我们设置的 maxChars 不能超过这个限制。
  7. 怎么切更聪明:在 *.chunkMode 这里,可以选 length(按字数切)或 newline(先按空行切,再按字数切)。newline 会尽量让每一块是一个完整的段落。

让“块”之间的停顿更自然 如果打开了“块流”,你还可以让机器人在发完第一块之后,等一小会儿再发下一块。这样看起来就像它在边想边说,更自然。

  1. 在哪里设置:在 agents.defaults.humanDelay 这里。
  2. 怎么设置:可以选 off(关掉)、natural(自然的停顿,800到2500毫秒)、或者 custom(自己设定最短和最长的停顿时间)。

“预览流”的不同模式 “预览流”就是那个会不断更新的草稿。不同聊天软件支持的模式不一样:

  1. 在哪里设置:在 channels.<channel>.streaming 这里,把 <channel> 换成比如 telegram
  2. 模式有哪些
    • off:关掉预览。
    • partial:只有一个预览,会不断被最新的文字替换。
    • block:预览会像“块流”一样,一块一块地更新或添加。
    • progress:在生成回答时,先显示一个进度状态,等全部完成后才显示最终答案。
  3. 要小心:对于 Telegram 和 Discord,如果你已经明确打开了它们的“块流”功能,那么“预览流”就会被跳过,这是为了防止同样的内容出现两次。

重要提醒 所有这些关于“块流”的设置(像 blockStreamingDefault),都放在 agents.defaults 这个配置区域里,不要放错地方了。而关于“预览流”的设置(像 streaming),是放在 channels.<channel> 这个区域里的。