问题场景
用户在聊天中经常会连续发多条消息:
用户:帮我查一下
用户:上海明天的天气
用户:还有后天的
如果不做合并处理,OpenClaw 会对每条消息分别调用模型,造成不必要的 token 消耗和重复回复。
消息队列配置
在 openclaw.json 中通过 routing.queue 配置消息合并策略:
{
routing: {
queue: {
mode: "collect", // 队列模式
debounceMs: 1000, // 等待窗口(毫秒)
cap: 20, // 单次最大合并条数
drop: "summarize", // 超出上限的处理方式
byChannel: {
whatsapp: "collect",
discord: "collect",
slack: "collect",
webchat: "collect",
}
}
}
}
参数说明
-
mode:队列模式collect:收集同一发送者的连续纯文本消息,合并为一条发给模型(推荐)steer:将消息分流到不同的 agentinterrupt:新消息打断正在进行的回复
-
debounceMs:等待窗口时间。收到一条消息后等待该时间,如果期间有新消息则继续等待,直到超时后统一发给模型。默认1000(1 秒)。 -
cap:单次合并的最大消息条数。默认20。 -
drop:超过cap后的处理方式。summarize表示对溢出消息做摘要。 -
byChannel:可以对每个频道单独设置队列模式。
注意:媒体附件(图片、语音、文件)会立即刷新队列,不参与合并等待。
确认回执
配置 ackReaction 可以让 OpenClaw 在收到消息时立即回一个表情,告知用户"消息已收到,正在处理":
{
messages: {
ackReaction: "👀",
ackReactionScope: "group-mentions" // 仅在群聊被 @mention 时显示
}
}
回复前缀
给 AI 的每条回复加上标识前缀:
{
messages: {
responsePrefix: ">"
}
}
按频道微调
不同频道的使用习惯不同,可以分别配置:
{
routing: {
queue: {
mode: "collect",
debounceMs: 1000,
byChannel: {
whatsapp: "collect", // 微信/WhatsApp 用户习惯连续发短消息
slack: "collect", // Slack 也常见连续消息
webchat: "interrupt", // 网页聊天更适合打断模式
}
}
}
}