桃子桃子快讯
返回首页
工具

reel:面向 AI 代理工作区状态与副作用管理的协议

reel 提出 AI 代理事务化边界协议,通过内容寻址块统一状态、副作用与能力,丢弃路径上副作用无法触发,项目处于预发布…

2026.07.26 · 周日4 分钟阅读

reel 是一个面向 AI 代理工作区状态与副作用管理的开源协议,目标是把代理的「试探性推理」与「对外部系统的实际影响」之间的边界做成事务化的:决定丢弃的副作用,从一开始就不会真正执行。

问题:副作用不可撤回

AI 代理通过「尝试」来推理:发一条消息、写一行数据库、发起一次支付。一旦这些动作跨过边界进入外部系统,即便代理后来决定放弃这条推理路径,也无法撤回。reel 要解决的正是这一类不可逆副作用的边界管理问题,让被系统判定丢弃的动作从一开始就压根不会发生。

设计核心:六类型、三动作、三不变量

协议定义了六个内容寻址类型——Hash、Block、Ref、Delta、Capability、View——以及三个动作动词 fork、commit、abort,外加三条不变量:可达性、被丢弃副作用的静默、能力收窄。

关键设计是:View 的待定副作用本身也是一个内容寻址的 Block。commit 把这个 Block 移入已提交日志并按序排干触发;abort 则丢弃对该 Block 的引用,使它变得不可达,进而被回收。由于触发不可逆副作用所需的「能力」仅在 commit 阶段的排干过程中被构造出来,abort 路径上「由构造决定」无法触发任何外部副作用。

来源与定位

协议中的动作语义、View 的快照隔离读法、能力模型与副作用分类,均取自既有研究:Gray(1981)、Wang & Zheng(2026)、Berenson 等(1995)、Miller、Yee 与 Shapiro(2003)、Garcia-Molina 与 Salem(1987)。reel 的贡献在于把这些要素在单一内容寻址表示下组合成统一内核。

这一组合的实用价值是:状态、副作用、能力用同一种内容寻址 Block 表示,一个事务化内核即可同时为整个工作区提供回滚、审计与共享能力,而不必在每个特性里各自重新实现事务逻辑。代理路由跨多个外部资源时,也能在这一内核上重建状态与副作用层,而无需逐个资源地处理事务性。

当前实现状态

项目以 Rust 实现,采用 Apache-2.0 许可,工作区基于 Rust 1.95 stable 与 edition 2024。已构建的组件包括:

  • reel-spec:协议类型。命名空间是持久化的写时复制映射,fork 可在常数时间内共享。
  • reel-store:内容寻址的 Block 与 Ref 存储,含内存后端和 redb 持久化后端,以及用于回收的可达性遍历器。
  • reel-effects:密封的副作用类 trait 与线性 fire-capability。
  • reel-core:内核。fork(常数时间写时复制继承并伴随能力收窄)与 abort 已实现,commit 仍在开发中。
  • adapters/、reel-cli:文件系统与远程适配器、命令行界面,进度中。

代码已通过工作区测试套件,其中包含针对内核不变量的属性化测试。构建命令为 cargo build --workspacecargo test --workspace

下一步与项目状态

后续重点包括:commit 的前置条件校验与有序排干;提供 dry-run 循环的命令行工具,展示进程待定副作用并由用户选择提交或丢弃;以及可替换后端的副作用拦截层,使接入新服务只需为它分类即可。

项目目前为预发布状态:规范已确定,内核沿前述路径构建中,接口仍可能发生变化。

信源