第六部分 · 结语

第 17 章:结语——可编程性的赌注

七个赌注、三份代价,与复杂性守恒的第三种形态

回到那三个问题

第 1 章开篇问了三个问题:模型如何行动,系统如何记住,会话如何活得久。十六个章节走下来,Prime Agent 的答案可以压缩成三句话——

  • 行动:住在持久 IPython 里写代码。工具面收缩为一个 ipython,子代理是 await rlm(...),宿主权威是一座类型化的桥。
  • 记住:harness 分不可变基座与可变持久层;/refine 用证据纪律、快照回滚与作用域隔离把「agent 写自己的记忆」变成可审计的操作;重到需要代码的经验沉淀为可安装的 Python 技能。
  • 活得久:执行属于 daemon。goal 用续跑钩子跨轮,heartbeat/cron 用 claim-before-delivery 跨时间,autonomous 用预算与质量门跨失败,断线只是 detach。

但这本书真正想讲的不是答案本身,而是每个答案背后的赌注结构——押上了什么,换回了什么,代价以什么形态存在。结语把它们摆上桌面。

七个赌注

赌注一:持久 REPL 值得一个真实进程

把模型的解释器做成常驻进程,换来的是变量、导入、数据帧跨轮次存活,压缩杀不死工作状态,快照还能让它跨会话复活。押上的是第 3 章整整一章的复杂性:fork-server 的全部防御工程、boot-gate 的实测校准、venv 的内容哈希失效、逐变量 dill 快照的部分失败容忍。

源码里有一处罕见的 TODO,把这个赌注的期限写得明明白白:kernel 与工具两个文件的顶部都提到,等自研模型权重落地后要「重新考虑持久 kernel 还是无状态执行」。这不是摇摆——Prime 把持久 REPL 视为与模型能力共演化的选择,并且提前把重审的触发条件写进了代码。

赌注二:一个工具胜过一张工具表

删掉 read/write/edit/bash/grep/find/ls,只留 ipython。押上的是枚举式工具面的可发现性与每个工具的精细治理,换回的是组合性(循环、条件、变量传递天然成立)、提示词面的收缩,以及「技能即能力」的统一分发。第 12 章那处化石(文件操作追踪只剩 edit)说明这个收缩是彻底执行到底的。

赌注三:子代理永不返回答案

rlm() 准入即返回,结果只走消息与文件。押上的是「调用-等待-拿结果」这个最直觉的编程心智,换回的是父上下文不被子输出污染、扇出不阻塞、压缩/重启/断线都不破坏编排。第 6 章的注册表与第 7 章的窄通道是它的两半基础设施。

赌注四:agent 可以改自己的 harness

这是全部赌注里风险面最大的一个——自我改进的系统天然趋向自我污染。Prime 押注的方式是第 9 章那套约束工程:证据字段、历史回显、基线乐观并发、原子写、before/after 回滚、基座三层不可变守卫、自动模式的三道闸门。赌的是约束的形状比禁止更有生命力——禁止只会把改进推向系统看不见的角落。

赌注五:执行属于守护进程

终端降级为窗口,换来长任务的全部可能性。押上的是第 14、15 章两章的进程基础设施:协议版本学、所有权注册表、启动门、两份恢复 journal、倒置看门狗、generation 游标。这部分代码的密度是全书之最——寿命是用基础设施换的

赌注六:权威与操作分治

Python 里什么都能干,但决策权永远在 TypeScript:凭据不过桥、转录归宿主、状态机只暴露 create/complete、handler 按能力注册。押上的是桥本身的维护成本(每次新能力都要两端对齐,RUNTIME_READY_CHECK 的十三条断言就是这份成本的对账单),换回的是「模型生成的代码」与「会话的正确性」之间一条可审计的边界。

赌注七:技能即包

能力沉淀的最终形态是可安装的 Python 包而不是 markdown 说明书。押上的是信任面(技能就是代码,README 的警告不是修辞),换回的是模型可参与的能力生命周期——skill-creator 教的是模型自己。

三份代价

诚实地清点代价,是对一个开源项目最好的尊重:

  • 单点依赖的脆弱面。一切能力过 kernel:venv 坏了,技能全部失踪(到处是占位符与友好报错,这本身就是代价的证词);kernel 语义的任何变化都会波及技能契约。
  • 巨类的维护税。401KB 的 agent-session.ts、352KB 的 interactive-mode、243KB 的 daemon-mode——「五种模式共享一份编排语义」的红利由同一份文件支付,任何一行改动都站在所有模式的交叉点上。
  • 信任不是沙箱。worker 隔离是故障隔离,kernel 隔离是生命周期隔离,都不是权限隔离。模型生成的代码以你的用户权限运行——Prime 的文档反复重申这一点,读者也应反复记住。

还有几处活跃的债务:协议文档落后代码两个版本;事件 replay 机制完整存在但未启用;深度默认 1 让「递归语言模型」的递归大部分时间睡着。这些不是瑕疵清单——它们是这张架构地图的未定稿区域。

复杂性守恒的第三种形态

我们研读与写作的三个对象——作为参照的 Claude Code、前作里的 pi、以及本书的 Prime——恰好覆盖了三种复杂性策略:

复杂性的去向核心机制
Claude Code固化进单体每种故障模式一个 if 分支;权限、工具、钩子全部内置
pi挡在核心之外最小循环 + 契约回调;复杂性推给扩展、容器、可选包
Prime Agent推进解释器,再用边界管住模型以代码行动;宿主保留权威;进程架构承担寿命

三种策略没有高下,但有一个共同点:复杂性从未消失,只是换了住址。Claude Code 把它锁进单体的每个分支,pi 把它赶到核心之外的边缘,Prime 把它放进解释器与边界的张力里。评估一个 Agent 架构时,别问「它有多简单」,问「复杂性住在哪、房租由谁付、着火时烧到谁」。

可迁移的模式清单

如果这本书里有什么值得直接搬进你的系统,我会选这十条(它们大多与 RLM 无关):

  1. 正确性不依赖优化——每条快路径都有完整降级(fork-server → spawn)。
  2. 可执行断言做跨语言契约——在对方环境里跑一段断言,胜过版本号协商(RUNTIME_READY_CHECK)。
  3. 登记与执行切开——准入即返回,失败模式一分为二(rlm())。
  4. 结果通道越窄越稳——没有 join,编排就只剩「派生 → 结束 → 被唤醒」(agent_message)。
  5. 注册表跟随转录——谁的会话谁的孩子,作用域问题自动消失(rlm-subagents.jsonl)。
  6. 记忆注入要有预算——每 kind 6 条、每条 180 字符(harness overview)。
  7. 改进系统必须带纠错回路——expectedOutcome 回显、基线乐观并发、before/after 回滚(/refine)。
  8. 调度的崩溃正确性是存储语义——claim-before-delivery,错过即合并(cron)。
  9. 崩溃三态:完成/失败/不确定——不确定就显式标记,绝不重放(command journal)。
  10. 进程身份 = pid + 启动时间——PID 复用面前,一切判活都要双因子(lease/ownership/orphan journal)。

最后一页

回到序言的那个判断:Prime Agent 把「模型如何行动」重新回答了一遍,然后被迫把后两个问题也重写。读完这本书你会发现,所谓重写,其实是把一批古老的工程答案请了回来——进程所有权、租约、journal、幂等键、内容哈希、原子 rename、看门狗——这些属于分布式系统教科书的东西,在「让一个 agent 活得久、记得住、能改进」的新命题下全部复活了。

这大概是 RLM 范式最深沉的暗示:当模型开始以程序的方式行动,Agent 系统就重新变回了系统工程。提示词工程处理意图,而寿命、一致性、崩溃恢复、所有权——这些从来都归工程管。

kernel 还开着,变量还在。合上书,去写你自己的 harness。

免责声明

本书为独立的技术分析,纯属教育目的。Prime Agent 是其维护者的产品,本书与其无关,未获背书或赞助。书中所有代码引用均可在 prime-agent-src/(monorepo v0.7.2)中检索核对;如有错漏,以源码为准。