解析

谁允许机器改写自己

规范讲的是智能体如何为自己写出新代码,以及这段代码如何进入运行。我们只从一个角度看:这样做会带来哪些危险,构造中的哪一部分对应哪一种。

为什么要允许这种事

普通程序不改自己:它的行为由写它的人设定,只随新版本变化。这很可靠,在多数情形下也是对的。

支持自我修改的理由很简单:运行多年的智能体会遇到写它时并不存在的任务。靠人工更新,就意味着永远把人留在回路里——而这恰恰是当初想摆脱的。

有意思的地方由此开始。一旦允许机器改写自己,就出现一个没有现成答案的问题:由谁、依据什么,判定新版本优于旧版本。

三种威胁,性质各不相同

规范把它们直白列出,这是它的长处之一。第一种是植入隐蔽缺陷:代码看着能用,里头带着后门。

第二种属于算力层面。合成出的代码可能含有低效递归或内存泄漏,足以把负责校验它的那个节点挂住。此处攻击的不是数据,而是校验环节本身。

第三种叫对齐漂移,比前两种难缠得多。每一次单独的代码变异看起来都无害,也都能通过检查。可它们一步一步把行为带得离最初的伦理约束越来越远。没有哪一步算违规;违规的是它们的总和。

这与记忆里的认知漂移是同一类风险:什么都没坏,只有缓慢的位移,而若只盯着单独一步,是察觉不到的。

沙箱:为什么偏偏是 WebAssembly

第一道防线是把新代码放在隔离环境里执行。选定 WebAssembly,理由是它的两项性质:严格隔离与确定性。

在这里,第二项比第一项更要紧,尽管人们通常反过来讲。确定性意味着同一段代码、同一批数据,在任何人那里运行都给出同一个结果。没有这一点,节点之间的投票就无从谈起:各自得到各自的答案,也就无从达成一致。

挂死问题单独处理:防范无限循环与算力失控。若没有它,一次糟糕的递归就足以让校验节点停摆。

怎样衡量新版本更好

此处规范做了在我看来最诚实的一步:引入显式的适应度函数,并写成公式——`F(C) = w₁ · P(C) + w₂ · E(C) − w₃ · G(C)`。

其意义在于,「更好」不再是一个词,而成了带有具名项的数值:性能、效率与惩罚。现在可以争论的是权重,而这才是该争的东西——它是具体的。

薄弱之处也在同一处。任何目标函数奖励的都恰恰是写进它里面的东西,而优化它的智能体会找到出人意料的路子去攒分。公式并不消除这个问题,它只是让问题变得可以讨论。

用证明代替信任

写好的变异不会被口头采信。智能体附上零知识证明:在不公开代码本身的前提下,确认它满足既定约束。随后是集群节点投票,被采纳的版本登记进 Solana 上的遗传代码注册表。

注册表的价值不在时髦词汇,而在普通更新所没有的一项性质:变更历史不可篡改。若一年后发现漂移确实发生过,可以查出是哪一次变异、在什么时候起的头——而这不取决于记录者是否愿意如实记录。

仍未解决的部分

其一:投票能防少数人的伪造,却防不住集体的看走眼。如果所有节点同样没看出某次变异里的问题,多数就会把它通过。

其二,也是我读这份文本最主要的感受:三种威胁被覆盖得很不均衡。后门与挂死是技术问题,解法清楚:隔离、限额、证明。对齐漂移属于另一个量级,靠检查单独一步是关不住的,因为每一步单独看都是老实的。

规范也承认这一点:它把最初的伦理不变量说成是由架构师设定的。也就是说,参照点被放在了演化之外,仍然属于人。只要如此,漂移至少还有可以对照测量的东西。

原始出处

全文涵盖完整的威胁建模、适应度函数与零知识约束的数学、Solana 程序规范、集群投票的设计,以及代码示例。