简要总结
Streaming and Chunking
这页说明书在讲 OpenClaw 是怎么“一块一块”地把大段回答送给你的,就像把一大块蛋糕切成小块,一块一块地递给你。它还会讲怎么让这些“小块”看起来更自然,就像朋友在慢慢跟你说话一样。如果你想让机器人回答时不要一次全出来,而是像打字一样慢慢出现,或者想调整它“切蛋糕”的大小,就看这一页。
五岁小孩版解释
OpenClaw 有两种“慢慢送东西”的方法。第一种叫“块流”,就像把机器人写好的回答,切成一块一块的“积木”,然后一块一块地发出来。第二种叫“预览流”,就像在机器人打字的时候,先给你看一个临时的草稿,它会一边写,一边更新这个草稿。
控制“块流”的开关和大小 有几个地方可以控制“块流”怎么工作:
- 总开关:在
agents.defaults.blockStreamingDefault这里,可以把它设成"on"(开)或"off"(关)。默认是关着的。 - 每个频道单独控制:比如
*.blockStreaming,可以给某个聊天软件(比如微信)单独设置成"on"或"off"。 - 什么时候切块:在
agents.defaults.blockStreamingBreak这里,可以选"text_end"或"message_end"。- 选
"text_end",就是机器人每写完一小段,就马上切一块发出来。 - 选
"message_end",就是等机器人把整段话都写完了,再一次性把所有“块”都发出来。但如果话太长,还是会切成好几块的。
- 选
- 每块多大:在
agents.defaults.blockStreamingChunk这里,可以设置minChars(最小字数)和maxChars(最大字数)。机器人会尽量在达到最大字数前,找个合适的地方(比如句号那里)把“块”切开。 - 把小块合并:在
agents.defaults.blockStreamingCoalesce这里,可以设置把几个刚切出来的小块,稍微等一下(idleMs),如果后面没有新内容了,就把它们合并成一个大块再发出去。这样就不会一下子发太多条很短的消息了。 - 每个频道的字数限制:每个聊天软件自己也有字数限制,比如
channels.whatsapp.textChunkLimit。我们设置的maxChars不能超过这个限制。 - 怎么切更聪明:在
*.chunkMode这里,可以选length(按字数切)或newline(先按空行切,再按字数切)。newline会尽量让每一块是一个完整的段落。
让“块”之间的停顿更自然 如果打开了“块流”,你还可以让机器人在发完第一块之后,等一小会儿再发下一块。这样看起来就像它在边想边说,更自然。
- 在哪里设置:在
agents.defaults.humanDelay这里。 - 怎么设置:可以选
off(关掉)、natural(自然的停顿,800到2500毫秒)、或者custom(自己设定最短和最长的停顿时间)。
“预览流”的不同模式 “预览流”就是那个会不断更新的草稿。不同聊天软件支持的模式不一样:
- 在哪里设置:在
channels.<channel>.streaming这里,把<channel>换成比如telegram。 - 模式有哪些:
off:关掉预览。partial:只有一个预览,会不断被最新的文字替换。block:预览会像“块流”一样,一块一块地更新或添加。progress:在生成回答时,先显示一个进度状态,等全部完成后才显示最终答案。
- 要小心:对于 Telegram 和 Discord,如果你已经明确打开了它们的“块流”功能,那么“预览流”就会被跳过,这是为了防止同样的内容出现两次。
重要提醒
所有这些关于“块流”的设置(像 blockStreamingDefault),都放在 agents.defaults 这个配置区域里,不要放错地方了。而关于“预览流”的设置(像 streaming),是放在 channels.<channel> 这个区域里的。