ActiveGraph:日志即 Agent——事件溯源的反应式图架构
一句话版本:Yohei Nakajima(BabyAGI 作者)提出了一种颠覆性的 agent 架构——不是用 LLM 对话循环驱动一切,而是让 append-only 事件日志成为源头真理,agent 行为只是对图状态变化的反应。这就实现了确定性重放、廉价分叉和完整因果溯源——三个现有 agent 框架做不到的事情。
来源
- 🔗 论文 (arXiv)
- 🔗 GitHub (Apache-2.0)
- 🔗 文档
日期: 2026-05-21 提交,Yohei Nakajima(Untapped Capital)
核心内容
现有架构的问题
所有主流 agent 框架(LangChain、CrewAI、AutoGPT 等)都是这么长的:
1. 先有 LLM 对话循环
2. 加上 工具调用
3. 加上 规则和护栏
4. 最后在外部"拧上"日志层做可观测性
5. 状态用某种 lossy 方式存成"memory"(摘要、嵌入、向量索引)
后果就是:日志是副产品,不是主体。你想回答"这个结论是怎么来的"?一场噩梦。
ActiveGraph 的颠倒设计
日志不是副产物——日志就是 agent 本身。
- append-only 事件日志是 源头真理(source of truth)
- 工作图(graph)是日志的 确定性投影(通过 fold/replay 重建)
- 行为(behaviors) 订阅图模式,对变化做出反应,emit 新事件
- 没有组件指令另一个组件——协调完全通过共享图隐式发生
事件的例子
{"id": "evt_002", "type": "goal.created", "actor": "user",
"caused_by": null, "payload": {"goal": "Diligence: Northwind Robotics"}}
{"id": "evt_003", "type": "behavior.started", "actor": "runtime",
"caused_by": "evt_002", "payload": {"behavior": "diligence.company_planner", ...}}
{"id": "evt_004", "type": "object.created", "actor": "diligence.company_planner",
"caused_by": "evt_002", "payload": {"object": {...}, "provenance": {...}}}
每个事件都有 caused_by 指针,构成完整的因果链路。
四种行为体
| 类型 | 说明 |
|---|---|
| 函数 | 纯逻辑反应 |
| 类 | 需要配置的行为 |
| LLM 驱动 | 触发 LLM 调用,请求和响应均被记录为事件 |
| 关系行为 | 附着在类型化边上——两个对象建立关系这一动作本身就能触发计算 |
三个关键能力
1. 确定性重放
理论上 LLM 调用是非确定性的,但 ActiveGraph 的做法:首次执行时把 LLM 响应作为事件记录下来;重放时通过内容寻址缓存(content-addressed cache,按请求哈希索引)直接返回缓存的响应,不做新的模型调用。
这就意味着你可以从一个日志文件完整重现 agent 的整个运行过程,包括中间每个 LLM 调用返回了什么。
2. 廉价分叉
在日志的任意事件处分叉,共享前缀不重新执行。这意味着你可以做反事实实验:
- "如果在 step 42 用了另一个 prompt,结果会怎样?"
- 分叉后自动缓存前缀,只需要执行分叉点之后的新路径
3. 端到端谱系
从高层目标("调研这家公司")到最底层的 single model call,完整的因果链都在日志里。每个对象都记录 created_by 和 caused_by_event。这不是事后追溯,而是架构第一性原理。
确定性契约
行为体必须是输入确定的函数:
- 不能直接读随机数、wall-clock 时间、新鲜 UUID(通过运行时确定性 ID 生成器获取)
- 不能做框架外的 I/O
- 违规行为首次运行正常,重放时检测为 divergence error
不是静态施加强制。违反契约的行为第一次跑没问题,只有重放或分叉时才会在第一个不一致的事件上报错。作者明确说:这已经足够了。
工作示例:投资尽职调查
论文附带了一个完整可复现的例子:一个 diligence pack,包含 93 个对象、76 个关系、3 家公司。零编排代码:planner 行为在 goal 创建时触发,创建 company;question_generator 响应 company 自动生成研究问题;researcher 响应每个问题自动研究——完全通过事件-订阅链驱动。
与 BabyAGI 的血缘关系
BabyAGI(也是 Nakajima 的作品)本质上是一个 while 循环 + 全局任务列表:执行当前任务 → 总结目标 → 生成后续任务。ActiveGraph 将同一个循环重新表达为共享图上的反应式行为。这个演进路径非常清晰。
为什么是图而不是纯日志?
事件溯源只能提供扁平的状态投影。图提供了三层价值:
1. 订阅可以是图结构模式(如"一个 claim 回应了一个未回答的问题"),纯事件流做不到
2. 关系行为让逻辑附着在边上(对象之间的关系本身可以触发计算)
3. 结构 diff 可以比较两个运行的图拓扑差异
"日志让状态可重现,图让反应式和比较可表达。两者缺一不可。"
分析与关联
与 OpenClaw 的关联
这是最有意思的关联性。OpenClaw 目前也在做 agent 编排和记忆管理,但用的是更传统的方式(lossless-claw 已经很接近事件溯源的思路了)。ActiveGraph 的论文直接给了我们一个理论框架来思考 OpenClaw 的架构方向:
| 维度 | ActiveGraph | OpenClaw 当前 | 启示 |
|---|---|---|---|
| 状态持久化 | 事件溯源 | lossless-claw 摘要 | 日志即 state,不需要单独的 memory |
| 可重放 | 确定性重放 | 回顾但不一定可重现 | ⭐ 可以借鉴 |
| 分叉/反事实 | 核心能力 | 不支持 | ⭐ 未来的可能性 |
| 谱系追踪 | 端点到端 | 有限 | ⭐ 日志可以增强 |
| 编排 | 隐式(事件驱动) | 显式(workflow) | 两种范式各有优劣 |
Lossless-claw 已经部分走在事件溯源的路上——保存事件日志、做紧凑摘要、支持回顾。ActiveGraph 的洞见是:如果把日志本身当做源头真理而不是副产物,就能获得 lossless-claw 提供不了的重放、分叉和谱系保证。
核心洞见值得注意
> "没有组件指令另一个组件;协调完全通过共享图发生。"
这实际上是一种 actor 模型 + 事件溯源 的混合体。和传统的 agent 框架(LangChain 等)有本质区别——传统的思维是"编排"(orchestration),ActiveGraph 的思维是"涌现"(emergence)。
作者克制的地方
Nakajima 非常诚实地说出了论文不做的事情:
- 不声称提升任务准确率
- 不声称可以证明自我改进 agent
- 只讨论架构 affordance
这种克制让论文更有价值——它是在提供一个新范式,而不是又一个刷分报告。
评分
| 维度 | 评分 | 说明 |
|---|---|---|
| **创新性** | ★★★★★ | 颠倒 agent architecture 的 Log-First 设计,有本质贡献 |
| **技术深度** | ★★★★☆ | 系统论文,但具体实现细节(如 Cypher subset、cache 策略)可再深 |
| **与项目关联** | ★★★★★ | 直接相关:事件溯源、agent 日志架构、确定性重放 |
| **可落地性** | ★★★☆☆ | Python 库可直接使用,但生产化需要更多工作 |
| **作者可信度** | ★★★★★ | Yohei Nakajima,BabyAGI 作者,AI agent 领域的早期探索者 |
| **社区反响** | — | 刚发布 3 天,暂无数据 |
报告生成: 2026-05-24 | 来源: arXiv:2605.21997, GitHub: yoheinakajima/activegraph