Ouroboros
演化

演化

评估结束不等于活干完了。演化拿评估里发现的问题去改 Seed,再跑一遍。关键不在于它会重跑,而在于它什么时候停

1. 跑起来

ooo evolve "待办应用:刷新之后要保留已完成状态"

预期结果:一份反映评估结果的 Seed 修改提案、运行结果,以及一个 lineage_id。只想看 Seed 会怎么改、不想重建代码,加 --no-execute。之后用 ooo evolve --status <lineage_id> 看后续。

2. 一代都经过什么

代码里的世代阶段是这几个:wondering(先找还有什么没搞清楚)→ reflecting(起草改动)→ seeding(生成新 Seed)→ executingevaluating,终态是 completed / failed / cancelled

同一份工作的 Seed 修订链叫 lineage,其中一次「新 Seed + 一次运行」叫一 代(generation)

3. 停止条件是四选一,不是一条

这一节值得看仔细:收敛的判定是 ANY-of,命中任意一条就停。

条件判定
本体稳定最近两代的本体相似度 ≥ 0.95
停滞相似度在 3 代里连续保持在阈值以上——这是「没进展」,不是「做好了」
反复反馈同类的疑问在世代之间反复出现
预算耗尽达到 30 代上限,强制终止

还有一个振荡检测:结构在两代之前的样子和现在之间来回跳,也会停。至少要跑满 2 代才开始看前三条信号。

0.95 常被写成「达到这个数就算收敛」的必要条件,那是误读。它是四条路里的一条。

4. 光是相似不够,还得有通过的评估

相似度到了 0.95 也不一定收敛。代码里有一道闸:在期望有评估的模式下,如果最新一代没有评估结果、或者评估是被拒绝的,就不会因为「稳定」而收敛。

理由很直接:两代长得一样,可能是稳定了,也可能是两代都一样地做错了。没有通过的评估作证,相似只是相似。

5. 下一代会重做哪些验收标准

演化时工作会集中到没通过的标准上:代码里把 Seed 的验收标准切成 activefrozen 两组,两组互不重叠、并起来正好是全部(evolution/frugality.py)。

但有一点要说清楚,免得读成比实际更强的保证:「冻结」是把力气集中到该做的地方,不是「已经过的从此不会再挂」。代码里另有一个回归检测器,专门看上一代通过、这一代却挂掉的验收标准(evolution/regression.py)。如果冻结真能保证不回退,这个检测器就没有存在的必要。另外还有一个不冻结任何标准的 full_graph 对照组。

6. 记住这个 ID

ooo evolve 会打印 lineage_idlin_…),修订历史查询和 ooo ralph 都要用它。

这一页的数字都对着当前源码核过:0.95、3 代停滞窗口、最少 2 代、上限 30 代、振荡检测默认开启,都在 evolution/convergence.pyConvergenceCriteria 里;第 4 节那道评估闸也在同一个文件里。第 5 节的说法比英文版和韩文版更保守——它们没有提回归检测器和对照组。有对不上的地方,欢迎到 GitHub Issues 说一声。