小龙虾(OpenClaw)源码分析7:流式输出机制,回复为什么又快又稳
文章目录
很多同学体验AI助手时,最在意的一点就是“回得快不快”。
但真实工程里,快和稳经常打架。OpenClaw在这块做了不少折中。
两种常见输出模式
先把概念捋清:
- 非流式:模型算完再一次性返回
- 流式:边生成边发(用户感知更快)
OpenClaw在此基础上还有一层“块级流式(block streaming)”策略,让输出更可控。
为什么不是永远全流式
现实里各渠道能力不同:
- 有些渠道支持消息编辑,流式体验好
- 有些渠道不适合频繁改消息,容易刷屏或失败
所以工程上不能只追求“token级推送”,还要考虑渠道兼容和失败回退。
block streaming在解决什么
文档里提到text_end、message_end、chunk范围这些配置。
核心目标是:
- 不要每个字都发一次(太碎)
- 尽量按段落或句子切块(可读性更好)
- 降低渠道侧API压力
简单说就是:在流式速度和可读性之间找平衡点。
体验层面的三个关键点
我觉得这块最关键是三件事:
- chunk边界策略(段落优先)
- coalesce合并策略(减少碎片刷屏)
- 失败时回退到最终完整消息
这三点做好了,用户才会觉得“快且不乱”。
配置示意
{
agents: {
defaults: {
blockStreamingDefault: "off",
blockStreamingBreak: "text_end"
}
}
}
建议先在你最常用渠道上小范围开启,观察日志和用户体验,再扩大范围。
实战建议
- 群聊场景优先稳,别过度细粒度流式
- 私聊场景可以更激进,提升响应感知速度
- 工具调用多的场景,配合工具事件摘要,避免“沉默等待”
小结
这篇的核心结论:
- 流式不是越细越好,而是越“合适”越好
- block streaming是工程折中,不是功能炫技
- 渠道能力差异决定了最终策略
下一篇我们看AGENTS.md / SOUL.md / TOOLS.md这些工作空间文件,看看它们是如何实质影响Agent行为的。
