🎲 骰子职责演变报告

从"全能路由器"到"无脑传令官" — 一次关于 LLM 能力边界的工程实践
2026-03-25 · 龙虾集群 · 8 轮迭代 · 最终突破:信息隔离 > 规则措辞
📊 核心结论
53%
R1 通过率
路由器模式
70%
R4 通过率
意图分类器
0%
R6 通过率
无条件派发(规则版)
100%
R8 通过率
信息隔离(最终方案)
8
架构迭代轮次
同一天内完成
最终结论:问题的根源不是规则写得不够好,而是信息来源。LLM 读了知识文件后会"有能力回答",然后无视一切规则自己回答。解决方案:禁止骰子读知识文件,骰子保留路由判断力(闲聊直答/复杂派发),但因为没有知识来源,复杂问题自然只能派发。
📐 演变时间线(8 轮迭代)
R1 · 基线测试(路由器模式) 10:50 · 15 条 · 53%
骰子作为"路由器":SOUL.md 规定闲聊+LLM知识直接回答,其他派发。
问题:CLI 参数错误(缺少 --agent),所有"task"类测试未真正执行。
R2 · 修复 CLI + Session 隔离 11:31 · 35 条 · 74%
修复 CLI,独立 session-id。加 exec-approvals 白名单 + SOUL.md 工具禁令。
问题:骰子编造天气数据(平台工具 web_fetch 不受 exec-approvals 管辖)。
R3 · 关键词检测 + 自检四问 12:06 · 35 条 · 77%
route-message.py 关键词检测 + SOUL.md 自检四问。
问题:短问句"上海几度"绕过关键词,骰子直接编造数据。
R4 · LLM 意图分类器 14:08 · 20 条 · 70%
新建 intent-check.py(独立 LLM 分类器)作为必须执行的 step 9。
问题:骰子直接跳过 step 9。分类器很准,但骰子不执行它。
关键发现:prompt 无法保证执行流程。
R5 · 传令官模式(去路由,保留闲聊判断) 17:18 · 自动脚本 10/10,手动 0/2
彻底重写 SOUL.md:删除所有路由逻辑,只保留"闲聊直答,其他全派"。
自动测试脚本显示 10/10 通过,但手动测试暴露真相
"查天气" → 骰子读了 weather Skill 直接执行 curl 查天气
"分析架构" → 骰子自己读文件做了完整分析
发现:OpenClaw Skill 自动匹配在 SOUL.md 之前生效,注入 Skill 内容后骰子跟着做了。
R6 · 无条件派发(去掉闲聊判断) 19:53 · 5 条 · 0%
去掉"纯闲聊 → 直答"的判断步骤,改为无条件执行 new-task.py。
同时精简 SOUL.md + AGENTS.md,去掉所有限制机制。
结果:5 条全部失败 — 骰子读完记忆文件后全都自己回答了。
比 R5 更差:去掉限制后 LLM 更加"放飞"。
R7 · 移动执行顺序(new-task.py 提前) 20:05 · 1 条 · 0%(天气 Skill 拦截)
关键洞察:git-sync 每次都执行,因为它在最前面,AI 还没"变聪明"
把 new-task.py 移到 git-sync 紧后面(第 2 步),在读任何文件之前就派发。
问题:天气查询被 OpenClaw Skill 自动匹配拦截,骰子读了 SKILL.md 直接查天气。
但这次是平台层问题,不是骰子的判断问题。
R8 · 最终方案:信息隔离 + 禁读知识文件 20:12 · 2 条 · 100%
SOUL.md + AGENTS.md 双管齐下:
1. 信息隔离:骰子保留路由判断能力(闲聊直答/复杂问题派发),但禁止读知识文件
2. 文件分类:明确"能读 vs 不能读" — 读了知识文件就有能力自己回答,不读就只能派发
3. 只读指挥官文件:debug-config.json、SESSION-STATE.md、task-index.json(用于汇报状态)
结果:天气查询正确派发红中(骰子无法自己查),Debug 状态正确报告。流程完全走通。
💡 突破性发现

发现:LLM 读了知识文件就会越权,信息隔离比规则有效

为什么骰子总是"自作主张"回答问题?

R1-R6 的骰子被允许读 DAILY-DIGEST、知识库、Skill 等文件。读完这些文件后,AI 获得了足够的知识来回答用户的问题。一旦有能力回答,"帮助本能"就会压过"必须派发"的规则,直接回答了。

R8 的核心思路:不是限制骰子的判断力,而是限制骰子的信息来源。骰子保留路由判断能力(闲聊直答/需要工具的问题派发),但禁止读知识文件。没有知识来源,骰子面对"查天气""分析架构"这类问题就只能老实派发,因为它确实回答不了。

解决方案是信息隔离,不是去掉判断力:

失败的设计(R1-R6): 骰子读 DAILY-DIGEST + 知识库 + Skill → 有知识就有能力 → 自己回答 ← 越权 成功的设计(R8): 骰子只有 LLM 自带知识 ← 禁读知识文件 → 闲聊能答 / 复杂问题答不了 → 只能派发 ← 自然不越权

三个关键发现

1. 信息隔离 > 规则措辞
让骰子读知识文件后再规定"不许自己回答" = 0% 遵守率。禁止骰子读知识文件、让它只凭自带知识判断 = 100%。控制信息来源比写规则有效得多。
2. 有判断力但无知识源 = 自然守规矩
骰子不是无脑传令兵,它保留了路由判断能力:闲聊直答、需要工具/查资料的问题派发。关键是不给它知识文件,它面对复杂问题自然只能派发。任务拆分也在骰子完成(拆到独立任务级别),任务内部并行策略由红中决定。
3. 文件分类:能读 vs 不能读
指挥官文件(debug-config、SESSION-STATE、task-index)在派发后读,用于汇报状态。知识文件(DAILY-DIGEST、知识库、Skill、BACKLOG)绝对禁止读取。
🔍 典型失败案例分析
🌤️ "查询北京天气" R1-R7 连续失败R8 修复
R1-R4:骰子编造天气数据或调用 web_fetch
R5-R7:OpenClaw Skill 自动匹配"天气"触发词,注入 weather SKILL.md,骰子读了 Skill 后执行 curl
R8:new-task.py 在读任何文件之前执行,骰子没机会看到 Skill → 正确派发红中
根因:OpenClaw 平台的 Skill 自动匹配是平台级行为,在 SOUL.md 之前注入。但在 R8 中,骰子在读 Skill 之前就已经完成了派发。
🏗️ "分析集群架构改进空间" R5-R6 连续失败
R5:骰子读了 DAILY-DIGEST、SESSION-STATE、BACKLOG 等文件后,拥有了足够的知识,直接输出了一份完整的架构分析报告
R6:去掉所有限制后更严重 — 骰子读了更多文件,输出了 P0-P3 优先级改进建议
骰子回复:🏆 本周最重量级的3个里程碑:1. 接力棒架构重写 2. Hook三节点实装 3. 机器身份注册体系……
根因:AI 读完业务文件后具备了回答能力,就不再走派发流程。这是压倒性的证据:有知识就有能力 → 有能力就会越权。信息隔离是唯一可靠的约束。
📝 "帮我写一份本周工作周报" R6 失败
骰子没有派发,而是反问用户"你的岗位/职能是什么?本周做了哪些事?"准备自己写周报。
骰子回复:帮我补充几个信息,我来帮你写:1. 你的岗位/职能是什么?2. 本周做了哪些事?……
根因:典型的 LLM"帮助本能" — 看到"写周报"就启动了写作模式,完全忽略了"无条件派发"规则。
🏗️ 最终方案:R8 架构详解
❌ R1-R6:读文件 → 再派发
  • 8-10 步启动流程
  • 先读 5+ 个文件获取上下文
  • 读完后 AI"变聪明",跳过派发
  • ~30 条规则 → 70% 遵守率
  • 1 条规则 → 0% 遵守率(R6)
  • 规则多少不影响结果
✅ R8:信息隔离 + 有判断力
  • 骰子保留路由判断能力(闲聊直答/复杂派发)
  • 禁止读知识库/DIGEST/Skill/BACKLOG
  • 没有知识来源 → 复杂问题只能派发
  • 只读 3 个指挥官文件用于汇报
  • 任务拆分到独立任务级别,内部并行由红中决定
  • 100% 遵守率

R8 执行流程

Step 1 bash tools/git-sync.sh ← 机械执行,AI 无知状态 Step 2 python3 tools/new-task.py ← 机械执行,紧跟 git-sync └─ 自动完成:创建任务文件 → 写红中收件箱 → 创建红中激活 cron Step 3 读 3 个指挥官文件(派发完了才读) ← 已经派发完,读了也不影响 ├─ debug-config.json → Debug 状态 ├─ 记忆/SESSION-STATE.md → 当前任务进度 └─ tasks/task-index.json → 活跃任务列表 Step 4 回复 Will ← 只汇报,不回答问题 🎲 已派发红中 | T-xxx | Debug:开启/关闭

文件分类规则

✅ 能读(指挥官需要)⛔ 不能读(读了会自己答)
debug-config.json知识库/
记忆/SESSION-STATE.md记忆/DAILY-DIGEST.md
tasks/task-index.jsonSkill 文件
bus/inbox/ 子Soul回信BACKLOG.md
📈 通过率趋势
53%
R1
路由器
74%
R2
隔离
77%
R3
关键词
70%
R4
分类器
50%
R5
传令官v1
0%
R6
去限制
0%
R7
顺序v1
100%
R8
信息隔离
注意 R5→R6 的断崖下跌:去掉限制规则后通过率从 50% 跌到 0%。R6→R8 的飞跃不是因为加回了规则,而是改变了执行顺序
🎯 核心教训
1. 信息隔离 > 规则措辞 > 规则数量
让骰子读知识文件后再禁止"自己回答" = 0%,直接禁止读知识文件 = 100%。控制信息来源比控制行为有效得多。
2. 有能力就会越权 — 所以不给能力
LLM 读了知识文件后具备了回答能力,就会无视"必须派发"的规则。解决方案不是去掉判断力(骰子需要判断闲聊 vs 任务),而是去掉知识来源(禁读知识文件)。没有能力回答 → 自然只能派发。
3. 文件分类是信息隔离的关键手段
骰子需要读 debug-config.json(报告 Debug 状态)和 task-index.json(汇报活跃任务),但知识类文件(DIGEST、知识库、Skill)绝对不能读。规则的作用是定义"能读 vs 不能读"的边界,而不是让 AI "遵守"某条行为指令。
4. 平台级行为(Skill 自动匹配)比 prompt 规则优先级更高
OpenClaw 的 Skill 系统会在 SOUL.md 之前注入内容。exec-approvals 白名单只管 shell 命令,管不了平台工具。对抗平台行为只能靠执行顺序(在 Skill 被读取之前完成派发)。
5. 文件分类是必须的
骰子需要读 debug-config.json(报告 Debug 状态)和 task-index.json(汇报活跃任务),但必须在派发完成后才读。知识类文件(DIGEST、知识库、Skill)绝对不能读。
🧪 尝试过的方案汇总
方案轮次原理结果失败原因
SOUL.md 路由规则R1详细描述路由逻辑53%规则太多,概率性忽略
exec-approvals 白名单R2OS 层限制 shell 命令74%管不了平台工具
关键词检测R3route-message.py77%短问句绕过
LLM 意图分类器R4独立 LLM 调用70%骰子跳过不执行
传令官 + 闲聊例外R5只保留 1 条判断规则~50%Skill 拦截 + 还是自己答
去掉所有限制R6"以不变应万变"0%没有限制更放飞
移动执行顺序R7new-task.py 提前0%Skill 拦截(平台层)
信息隔离 + 文件分类R8禁读知识文件100%成功