openclaw_qq 2026-03-20 默认行为调整说明

openclaw_qq 2026-03-20 默认行为调整说明

这一轮的重点不是去改 OpenClaw core 的工作方式,而是把 openclaw_qq 的默认值和默认输出策略调得更保守一些,更贴近 QQ 的实际使用场景。

原则上,这轮变更主要是:

  • 调整 QQ 插件默认配置。
  • 修正 QQ 插件层的若干实现细节,让默认策略真正按文档落地。
  • 不强行替换旧体验;如果你更喜欢之前的行为,仍然可以通过配置项手动改回去。

这轮为什么要调

前面连续排查了几类实际问题:

  • 长回复虽然已经走了合并转发,但仍然会继续被拆成多个转发节点,阅读体验不好。
  • 过程句和长正文之间的边界不稳定,有时该普通发的短过程句没发出来,有时一条最终长文又被拆成多条消息。
  • QQ 侧引用消息、合并转发里的原文线索,没有稳定读进模型上下文。
  • interruptOnNewMessage 文档虽然写的是默认关闭,但实现里实际接近“默认开启”,会影响 OpenClaw 自己的任务链路。
  • 群聊里的 /model 这类 slash 指令会和普通聊天文本混在一起,既可能误触发,也可能输出过长后刷屏。
  • 插件层自己扩出来的“动态探测 provider /models 全量目录”默认太激进,不够接近 OpenClaw 原本的 /model 使用习惯。

所以这轮做法不是大改逻辑,而是把默认行为收敛成更符合 QQ 场景的一套策略。

本轮默认值调整

1. 默认关闭“新消息打断旧回复”

  • interruptOnNewMessage=false

并且实现上也改成了:只有你显式配置为 true 时,才会因为同会话新消息而中断上一轮回复。

这意味着默认情况下,机器人会更倾向于把当前任务完整走完,不再因为中途又来一条消息就打断自己。

2. 默认按完整 assistant message 落地

  • blockStreaming=true
  • blockStreamingBreak=message_end

这组默认值的目标是:

  • 短 commentary 过程句还能正常发出来。
  • 但不会退回到更碎的逐段切片输出。
  • commentary / final 尽量按完整消息边界落地,更适合 QQ 群聊阅读。

3. 默认长正文超过 300 字就改成 QQ 合并转发

  • forwardLongReplyThreshold=300

默认策略现在是:

  • 短 commentary:普通消息直接发送。
  • final_answer:超过 300 字时自动改用 QQ 合并转发。

这样群里还能看到简短过程句,但长正文不会刷成一大片碎消息。

4. 默认转发不再按长度拆节点

  • forwardNodeCharLimit=0

这里的 0 不是关闭转发,而是表示:

  • 启用合并转发后,不再继续按“每个节点多少字”人为拆分。
  • 同一轮长回复会尽量合并进一个转发里。

如果你已经决定让长文走合并转发,那默认就不该再切成多个节点去影响阅读。

5. 默认关闭群聊裸 slash 指令

  • allowBareGroupCommands=false

默认情况下,群聊里单独发送 /model/models/newsession 这类 slash 指令不会直接触发。

当前更推荐的默认用法是:

  • 椰子 /model
  • 椰子 /models
  • 椰子 /newsession

也就是说,默认是“先用唤醒词命中 QQ 插件,再执行本地指令”,而不是让群里的裸 slash 直接跑命令。

6. 默认关闭 /model 的动态全量模型探测

  • enableDynamicModelCatalog=false

这项配置关闭时,本地 /model 列表不会主动去探测各 provider 的 /models 接口拉取全量目录,而是优先按本地配置展示。

这样做的目的是让默认行为更保守,也更接近 OpenClaw 原本“按现有配置/allowlist 工作”的思路;如果你确实需要插件层动态聚合所有模型目录,再手动开启即可。

这轮插件层补强了什么

除了默认值调整,这轮还补了几处 QQ 插件层实现,让上面的默认策略真的能工作:

1. reply / forward 上下文读取补强

现在 QQ 消息里的:

  • 引用消息原文
  • 合并转发里的文本线索

会更稳定地进入上下文构建,模型更容易读到“你在引用谁、引用内容是什么”。

2. 单轮长回复不再因为 block 被拆成多个转发节点

排查时发现一个实际问题:OpenClaw core 在某些情况下会把同一轮最终回答拆成多个 block 派发给插件,而 QQ 插件拿不到稳定 phase 时,之前会把这些内容继续拆开发。

这轮在 QQ 插件层补了更保守的聚合策略:

  • 连续 unknown block 会先短暂缓冲。
  • 短过程句可以单独发。
  • 真正的长正文则作为一个整体判断是否走合并转发。
  • 如果走转发,默认不再按节点长度继续拆。

所以现在更接近下面这个目标行为:

  1. 过程句不长,就普通发出来。
  2. 后面的完整长文如果超过阈值,就整体进一个 QQ 合并转发。
  3. 不再把一轮 final 因为内部 block 边界继续切成多个转发节点或多条零碎消息。

3. 椰子 /model 现在走稳定的本地命令分支

这轮还把群聊 slash 命令识别收紧成了更明确的规则:

  • 只认消息开头的 /...
  • 或认“唤醒词后面紧跟的 /...

这样做有两个目的:

  • 椰子 /model 这类真正想执行的管理指令,可以稳定落到 QQ 插件本地 /model 分支。
  • 普通聊天文本里夹带 /model/token 这类片段时,不再更容易被误判成指令。

4. 群聊 /model 默认强制优先走合并转发

针对 /model / /models 这类天然容易很长的输出,这轮默认行为已经改成:

  • 群聊里先尝试 QQ 合并转发。
  • 默认不按节点长度拆。
  • 如果单节点转发失败,再自动回退到“同一个合并转发里的多节点”。
  • 只有转发路径全失败,才会退回普通分段消息。

所以默认目标不是让 /model 再刷成四五条普通消息,而是尽量收敛成一个 QQ 合并转发。

如果你想恢复之前的体验

这轮不是删功能,而是调整默认值。

如果你更喜欢以前那种更激进的切换/拆分方式,可以手动改回,例如:

{
  "channels": {
    "qq": {
      "interruptOnNewMessage": true,
      "allowBareGroupCommands": true,
      "enableDynamicModelCatalog": true,
      "blockStreamingBreak": "text_end",
      "forwardLongReplyThreshold": 800,
      "forwardNodeCharLimit": 1000
    }
  }
}

这样会更接近旧体验:

  • 新消息可以打断旧回复。
  • 群聊里裸 /model 这类命令又可以直接触发。
  • /model 会重新主动探测 provider /models 全量目录。
  • 输出边界更碎。
  • 长文需要更长才转发。
  • 转发节点会继续按长度切分。

补充(2026-03-20 晚):会话命令交互补齐

前面一轮默认值收口之后,又继续补了一轮“会话”交互层,重点仍然是只改 QQ 插件层,不去碰 OpenClaw core 的底层会话结构。

1. /临时 系列命令统一收口为 /会话

现在对外主命令改成:

  • /会话
  • /会话列表
  • /会话状态
  • /会话重命名
  • /退出会话
  • /会话结束

旧别名仍然保留兼容:

  • /临时/临时列表/临时状态/临时重命名/退出临时/临时结束
  • tmptmplisttmpstatustmprenameexittemptmpend

也就是说,老用法不会坏,但默认文案和帮助提示全部收口到“会话”体系。

2. /会话列表 现在默认会显示“默认会话”

之前的一个实际问题是:列表里只显示命名会话槽,不显示最开始那条主线会话,所以命名会话能切,默认会话反而切不回去。

现在一个全新的群里直接执行:

/会话列表

就会看到:

1. 默认会话

如果再执行:

/会话 任务二

那么再次 /会话列表 就会看到:

1. 默认会话
2. 任务二

3. /会话 <序号> 现在支持数字切换

这次还补上了按编号直接切换:

  • /会话 1 直接切回默认会话
  • /会话 2 切到列表里的第 2 个会话
  • /会话 3 切到列表里的第 3 个会话

这样群里同时挂多个任务时,不需要每次重新输入完整会话名。

4. 兼容原则没有变

这部分仍然遵守同一个原则:

  • 不改 OpenClaw core 的会话主逻辑
  • 不改底层 tmp slot 的持久化结构
  • 只在 QQ 插件层调整命令入口、列表视图、数字切换和默认文案

所以如果你更喜欢旧的 /临时 叫法,旧命令和老数据都还能继续工作。

仓库与文档已同步

本轮代码和文档已经继续同步到 GitHub,当前对应两次连续提交:

本轮默认行为与会话交互说明文档:

这次补充后,仓库里同步更新的主要文档包括:

  • README.md
  • docs/2026-03-20-default-behavior-update.md
  • docs/config-reference.md
  • docs/advanced.md

结论

这一轮的核心不是“改 OpenClaw 的工作方式”,而是把 openclaw_qq 的默认行为调得更保守、更贴近 QQ 的实际交互习惯:

  • 默认不打断。
  • 过程句正常发。
  • 长正文超过阈值自动转发。
  • 转发后默认不再拆节点。
  • 群聊裸 slash 默认不触发,改成“唤醒词 + 指令”。
  • /model 默认不主动探测 provider /models 全量目录。
  • reply / forward 上下文读取更稳定。

如果你需要之前的体验,配置项仍然保留,可以自己切回去。