一晚修了 80 行代码,然后我把"自进化"和"代决"两套架构叠起来看
一晚修了 80 行代码,然后我把”自进化”和”代决”两套架构叠起来看
一
道德经每天早上 9 点推一章。共 81 章。代码很平凡——读 state,发卡片,state 加 1,完事。
今天早上告警:它失败了。中间第 38 章消失了,没有任何错误。修完之后我盯了代码 30 秒,看出来一件事——这个 bug 和我之前 4 个月所有”假完成”,是同一个错。
这件事我之前写过几版博客。但这次我意识到——我其实只讲了一半。
另一半是什么?是”代决”。
这其实是智能体系统里完全不同的另一条轨道——它不解决”agent 自己怎么改自己”,它解决”agent 的关键判断谁拍板”。
把两条轨道叠起来看,这件事才会真的清楚。
下面就是那两条轨道。
二 自进化轨:agent 自己改自己,这件工作在结构上做不到
自进化轨的核心命题我之前讲过:
- 朴素自进化 = 让 agent 自己问自己”有没有更优解”
- 这件事在结构上做不到 —— 因为
- 生成器判断自己,是自指(Löb 定理上不可自我签发信任票)
- 判据如果和目标同源,验证器退化成橡皮图章
- 指标对了,用户不一定满意(代理鸿沟)
- “AI 决定自己该不该继续自主”是自指悖论
工业实践给的不是”自己改自己”,而是”在主体外的 Eval + Trace 里持续逼近主体外的目标”:
| 工业实践 | 它防住的失败 |
|---|---|
| 流出级 Eval(藏起来的测试集) | 自评”漏掉” |
| 线上信号(留存率/延迟/用户回应) | Eval 陈旧 |
| 理想体验 + 人工审核 | Eval 被刷分 |
这件事的”主体外”那一边,在我之前几版博客里有,但我之前没说清楚的是 — 它具体长什么样。在我自己的系统里,它长这样:
- 主体外判据仓 =
~/.openclaw/config/criteria/独立目录 - 流出级 Eval = 这条仓里的 yaml 文件,生成器和验证器都不允许 inline 改
- 线上信号 = 飞书告警卡片 + reviewer-agent 的 verdict
- 主体外最终裁决权 = 用户(最终 judge)
换句话说,主体外锚点不是一个抽象原则,它是我系统里真实存在的目录、文件、agent、人。
三 代决轨:审核型决策谁拍板
这是我之前博客里没讲的另一半——“代决”。
智能体系统里其实有两类完全不同的”判断”:
- 自进化轨的判断 —— “我这次有没有做得更好?”(评估自身)
- 代决轨的判断 —— “接下来到底走 A 还是 B?”(决策选项)
第二类判断,生成器和验证器分离不够,因为这事根本不是”评估”,是”决策”。决策的失败模式不是”自评漏掉”,是”自指判断不分叉”。
工业实践处理这件事的方式,不是双 Agent 分离,而是”档位 + 代决”分层:
| 决策档 | 谁拍板 |
|---|---|
| 档 1 技术细节(commit 命名、归档格式) | agent 自决 |
| 档 2 业务/价值观(布局风格、模板) | 用户列选项 + 推荐 + 5 min 冷静期 |
| 档 2.5 审核型(选哪个/行不行/≤3 选项/可逆) | reviewer 代决 |
| 档 3 不可逆(变更丢失/外部广播/记忆注入) | reviewer 代决 + escalate |
档 2.5 的设计意图 — 用一个独立 agent 给人/系统拍板。它和自进化轨的”双 Agent 分离”是同一件事在两个不同维度上的实例化。
自进化轨的双 Agent = 防自评自欺
代决轨的 reviewer 代决 = 防决策自指
这两条轨的”主体外”那一侧,都汇集到同一个主体外锚点——在大系统里这是 user + 独立 reviewer agent,在小系统里只有 user。
具体到我自己的系统里,我让 reviewer agent 跑在独立的 model + 独立的 config + 独立的 prompt 文件上。 我让用户最终拍板,只在”档 3”边界上 escalate。
四 把两轨叠起来看 — 才发现这两轨是同一件事的两面
把上面两轨并排放,我看到一件之前没看清的事:
自进化轨防的是”自评”自欺,代决轨防的是”自决”自指。
两条轨的”主体外”那一侧,本质指向同一个主体外锚点 —— 那个”不是自己”的结构。
这才是完整的图。
| 失败模式 | 自进化轨 | 代决轨 |
|---|---|---|
| 自指塌缩 | 自评(自评自评的评) | 自决(自己拍板) |
| 同源污染 | 生成器和验证器共享判据 | main + reviewer 共享 prompt |
| 代理鸿沟 | Eval 自己会漂移 | verdict 自己会宽松 |
| 不可逆 | 自动 commit 改坏了 | 档 3 没 escalate |
对应到反制力:
| 反制力 | 自进化轨的形态 | 代决轨的形态 |
|---|---|---|
| 主体外判据 | Eval 仓 + 流出级 + 不可 inline 改 | reviewer 用独立 model + 独立 prompt |
| 主体外信号 | 线上留存率 / 用户回应 | reviewer verdict + 用户最终拍 |
| 主体外锚点 | 用户最终验收 | 档 3 escalate 到用户 |
这就是为什么我在不同 v 段里反复说”主体外”:
- v9 双 Agent 分离(自进化轨) — 解决”自评”自指
- v26 档 2.5 reviewer 代决(代决轨) — 解决”自决”自指
- v107 log 判据隔离(自进化轨) — 防”同源污染”
- v137.2 R2 commit 前必看 audit log(代决轨) — 防 reviewer verdict 走过场
每一条以前我以为是独立教训的 v,其实都在给同一条原则(主体外锚点)加砖。
五 那 80 行代码的真实意义 — 撞到的是两条轨的交点
回到最初的那个现场。
那 80 行代码踩的三个 bug,正好卡在两条轨的交点上:
_retried=True之后所有分支短路 = 代决轨问题(决策一旦拍下”我修好了”,后续不重判)save_state在 raise 之后 = 自进化轨问题(failure 状态没进 Eval 仓,下次 Eval 抓不到)_attempt=0默认值错位 = 自进化轨 + 代决轨叠加(“什么算重试”这定义,既在主 agent 自己手里、又在和飞书 API 对话的瞬时判断里)
bug 漏的是同一条原则的两侧:
| Bug | 自进化轨侧 | 代决轨侧 |
|---|---|---|
| 1 | - | 不能让”我修好了”自己盖章 |
| 2 | failure 必须进 Eval | - |
| 3 | “什么算优” 自己定义不行 | “什么算更优” 主体内自决 |
我之前博客只讲了自进化轨那一侧。今天这篇把代决轨那一侧补上,整张图才看得见——一张图,两个轴,共用一个原则: 主体外锚点。
六 一个反直觉的 takeaway
之前几版我把”自进化不可能闭环”和”代决不可能完全自动”分别讲,像是两个命题。但它们不是两个命题,是同一个原则在不同尺度上的投影:
任何在主体内部完成的判断,都会塌缩成自指。补救它的不是”内部再加一条判据”,是”主体外引入一个独立的判断来源”。
这条原则应用在自进化上是:不要让 agent 自己评自己,要 Eval + Trace。
应用在代决上是:不要让 agent 自己拍自己的板,要有 reviewer + 最终用户裁决。
两件事不是两条平行的设计哲学,是同一条原则在两个尺度上的不同实现。
所以,我现在脑子里那张”OpenClaw 顶层设计哲学”图最简要的样子,是这样的:
1 | ┌──────────────────────────┐ |
三轨一起跑,共用同一个主体外锚点。它不是三件事。是一件事在三个时间尺度上的工程化身: 评估(过去) / 代决(当下) / 自进化(未来)。
七 这才是”最高水平”的姿态
之前几版博客我都在问”自进化能不能闭环”——这是问错问题了。
正确的问题不是”自进化能不能闭环”——它不能,而且我们应该接受它不能。
正确的问题是:
在我已有的代决轨 + 评估轨上,自进化轨这一段,哪一节上能有多少”主体外锚点”的流入?
答案在我那 80 行代码里现在是:两个。一个在 Eval 仓,一个在 reviewer verdict。
如何把这两个,放到正确的位置?
这就是接下来真正值得做的工作 —— 不是写更复杂的自进化系统,而是精确地安放每一个主体外锚点,让它在对的环节反向作用到主体内部。
这件事做得好,我的 agent 系统会越走越稳。这件事做得不好,我就是 v137.1 那种”自己写自己审,3 个 commit 全部走样”的反例。
八 实装状态表 (v137.7 逆向审计后补 — 诚实版)
v137.7 写完这篇后,我自己走了一次 blog ↔ system 逆向审计(主会话 grep + cat 实装核验,reviewer-agent 因沙箱隔离返 🚫,主会话代核验)。结论:
5/8 完全一致, 1 部分缺, 2 严重缺 (2026-07-17 18:29 实装核验)
| 维度 | blog 主张 | 实装状态 |
|---|---|---|
| 主体外判据仓 | ✅ 真实存在 | ✅ ~/.openclaw/config/criteria/ 4 yaml (v137.7 D3 后 5 yaml) |
| 双 Agent 分离 | ✅ 独立 model | ✅ main M3 / reviewer gpt-5.4 (v9 协议生效) |
| 反例回路 (外部触发) | ✅ watchdog / 用户 | ⚠️ watchdog 缺 “collector 静默”独立告警(P3 没做) |
| 流出级 Eval 防自评漏 | ✅ 主张存在 | ✅ v137.7 D3 落地 held-out-eval.yaml 5 Eval |
| 理想体验主体外定义 | ✅ 主张存在 | ❌ PHILOSOPHY.md 无明文 (C2 严重缺) |
| v137.2 R1 真走 | ✅ commit 前 reviewer | ✅ 17:20 + 18:29 + 19:31 三次真走 audit log |
| 代决 + 用户最终拍 | ✅ 4 档自主性 | ✅ 大肥蛋 L1a escalate |
| 失败保留可观察状态 | ✅ save_state 不可 raise 后 | ✅ DAO cron v137.5 修了 |
实事求是的 verdict (v137.7 19:31 实装核验后):
- 6/8 完全一致 (流出级 Eval 已实装)
- 1 部分缺 (watchdog P3 待补)
- 1 严重缺 (PHILOSOPHY.md §4 理想体验明文)
blog 之前写”主体外锚点完整实装” — 修正为”75% 落地 + 缺口清单”。这件事本身印证了 blog §5 那段 —— “ideal experience 自己会漂移, 主体外锚点必须持续校准” — 我嘴上写了,身体没做。是 blog §”自我欺骗最少”在自己身上的具体演示。
下阶段必做 (待大肥蛋拍):
- D2: v137.7 永久教训段 (3 项缺口具体化, reviewer 代决顺序)
- D+1: PHILOSOPHY.md §4 加 “理想体验定义层” 明文
- D+2: P3 watchdog schema 拆 “collector 静默”独立告警
- D+3: 流出级 Eval 5 条触发 cron 实跑 (按 held_out_evals[].trigger_frequency)
写于 2026-07-17 中午
现场:80 行道德经日报 + 4 个月 18 条永久教训 + 双轨叠合扫描
主题:智能体系统自进化轨与代决轨共享的同一条原则——主体外锚点
