Skip to Content
👋 欢迎来到 HowToUseMoltbot 快速入门
核心概念Streaming 流式传输

流式传输与分块

Moltbot 有两个独立的”流式传输”层:

  • 块流式传输(频道):助手写入时发出已完成的。这些为正常频道消息(非 token 增量)。
  • Token-ish 流式传输(仅 Telegram):生成时用部分文本更新草稿气泡;最终消息在结束时发送。

今日无真正的 token 流式传输到外部频道消息。Telegram 草稿流式传输为唯一部分流表面。

块流式传输(频道消息)

块流式传输在内容可用时以粗粒度块发送助手输出。控制:agents.defaults.blockStreamingDefault"on"/"off",默认 off);频道覆盖:*.blockStreaming(按频道强制 "on"/"off");agents.defaults.blockStreamingBreak"text_end""message_end");agents.defaults.blockStreamingChunk{ minChars, maxChars, breakPreference? });agents.defaults.blockStreamingCoalesce{ minChars?, maxChars?, idleMs? },发送前合并流式块);频道硬上限:*.textChunkLimit;频道分块模式:*.chunkMode(默认 lengthnewline 在长度分块前按空行(段落边界)拆分);Discord 软上限:channels.discord.maxLinesPerMessage(默认 17)拆分高回复以避免 UI 裁剪。

边界语义:

  • text_end:分块器发出时立即流式块;每个 text_end 刷新。
  • message_end:等到助手消息结束,再刷新缓冲输出。

message_end 在缓冲文本超过 maxChars 时仍使用分块器,故可在最后发出多块。

分块算法(低/高界)

块分块由 EmbeddedBlockChunker 实现:低界(buffer >= minChars 前不发出,除非强制);高界(优先在 maxChars 前拆分;强制时在 maxChars 拆分);断点偏好(paragraphnewlinesentencewhitespace → 硬断);代码围栏(永不在围栏内拆分;强制在 maxChars 时关闭并重开围栏以保持 Markdown 有效)。maxChars 会被频道 textChunkLimit 限制,不会超过按频道上限。

合并(合并流式块)

启用块流式传输时,Moltbot 可在发送前合并连续块。减少”单行刷屏”,同时仍提供渐进输出。合并等待空闲间隙idleMs)再刷新;缓冲区按 maxChars 限制并在超出时刷新;minChars 防止微小片段发送直到累积足够文本(最终刷新始终发送剩余文本);joiner 由 blockStreamingChunk.breakPreference 派生。

块间类人间隔

启用块流式传输时,可在块回复间(首块后)添加随机暂停,使多气泡响应感觉更自然。配置:agents.defaults.humanDelay(按代理覆盖经 agents.list[].humanDelay);模式:off(默认)、natural(800–2500ms)、customminMs/maxMs)。仅适用于块回复,非最终回复或工具摘要。

Telegram 草稿流式传输(token-ish)

Telegram 为唯一具备草稿流式传输的频道:在带话题的私聊中使用 Bot API sendMessageDraftchannels.telegram.streamMode: "partial" | "block" | "off"partial:用最新流文本更新草稿;block:分块更新草稿(同分块器规则);off:无草稿流式传输);草稿块配置(仅 streamMode: "block"):channels.telegram.draftChunk(默认 minChars: 200maxChars: 800);草稿流式传输与块流式传输分离;非 Telegram 频道上块回复默认关闭,仅通过 *.blockStreaming: true 启用;最终回复仍为正常消息;/reasoning stream 将推理写入草稿气泡(仅 Telegram)。草稿流式传输活跃时,Moltbot 为该回复禁用块流式传输以避免双重流式传输。

最后更新于: