日志即智能体
摘要
本文介绍ActiveGraph,这是一个运行时,它将仅追加的事件日志作为智能体系统的中央事实来源,实现确定性重放、廉价分叉以及从目标到模型调用的端到端溯源。
暂无内容
查看缓存全文
缓存时间: 2026/07/05 10:32
# 日志即智能体
开源(Apache-2.0):https://github.com/yoheinakajima/activegraph。通过 `pip install activegraph` 安装,并使用 `activegraph quickstart` 再现工作示例。文档:https://docs.activegraph.ai。事件溯源响应式图——用于可审计、可分叉的智能体系统
来源:https://arxiv.org/html/2605.21997
###### 摘要
大多数智能体框架都是*围绕*语言模型构建的:对话循环优先,然后是工具,再是规则,最后附加一个日志层用于可观测性,状态以可检索的“记忆”形式持久化。我们描述了一种颠覆这种安排的运行时系统——ActiveGraph。仅追加的事件日志是真相源;工作图是日志的确定性投影;而行为——普通函数、类、LLM支持的程序或附加在类型化边上的逻辑——对图中的变化做出反应并发出新事件。没有组件直接指令另一个组件;协调完全通过共享图进行。这一单一设计决策带来了检索与摘要记忆系统无法提供的三个特性:从日志对任何运行进行确定性*重放*、廉价*分叉*(无需重新执行共享前缀即可在任意事件处分支运行)、以及从高层目标到产生每个工件具体模型调用的端到端*谱系*。我们展示了该架构、使重放可靠的确定性合约、以及一个完整的尽职调查示例——其完整的因果结构仅从日志即可重建。我们讨论(但不声称已证明)为何该基底特别适合自我改进型智能体,以及它如何延续BabyAGI血统和先前的图记忆研究。
## 1 引言
构建LLM智能体的主流模式是逐步叠加的。我们从聊天循环开始,因为对话是模型训练时面对的接口。当模型需要与世界交互时,我们添加工具。当行为偏离时,我们添加规则和护栏。在生产中我们需要知道发生了什么,因此添加日志记录。我们存储交互的某种压缩形式——摘要、嵌入、向量索引——以便智能体跨轮次“记住”。在这种安排下,日志是一个*副产品*:与真实计算一同写入的审计工件,而非计算的基底。
本文描述了一种基于相反假设构建的运行时系统。如果日志不是副产品,而是智能体本身呢?具体来说:如果智能体遵循的规则(以及这些规则的变化)、它获得的工具及其调用、以及它产生的内容都是同一种东西——单一仅追加日志中的事件——而智能体的行为不过是一组反应:当日志增长时触发,并将新事件写回日志,会怎样?
ActiveGraph正是这样的运行时。事件日志是真相源。行为读取和写入的图是日志的投影,通过保证确定性的*重放*操作重新计算。行为订阅事件模式和图形状模式;当匹配的变化发生时,行为触发,可能调用模型或工具,并将结果事实作为新事件发出。没有编排器在步骤间传递状态,也没有通常意义上的工作流——只有一群类似规则的行为,有时会因为一个行为的输出是另一个行为的触发条件而链接。
这直接源于BabyAGI[1 (https://arxiv.org/html/2605.21997#bib.bib1)],它通过一个全局任务列表上的while循环来表达智能体:执行当前任务,对照目标进行总结,生成后续任务。ActiveGraph将相同的循环重新表达为对共享图的响应式行为,从而将智能体的瞬态状态转化为持久、可检查、可重放的工件。
### 贡献
这是一篇系统论文;其贡献是架构性的,而非关于任务性能的经验性声明:
1. 1.**一种事件溯源智能体模型**,其中图状态是仅追加事件日志上的确定性折叠,所有智能体动作都被表达为对图变化做出反应并发出事件的行为(§2 (https://arxiv.org/html/2605.21997#S2),§3 (https://arxiv.org/html/2605.21997#S3))。
2. 2.**一种确定性合约和重放机制**,使得任何运行都能从其日志中字节级重现,包括一个内容寻址缓存,记录模型和工具响应,从而重放时不进行任何新的模型调用(§4 (https://arxiv.org/html/2605.21997#S4))。
3. 3.**一种分叉和结构差异原语**,可在任意事件处分叉运行,并在不重新执行共享前缀的情况下回答反事实的“如果我当时做了不同选择会怎样”问题(§5 (https://arxiv.org/html/2605.21997#S5))。
4. 4.**一个完整且完全可重现的示例**(投资尽职调查包),其中从目标到备忘录的完整因果链均可从事件日志中恢复,展示了谱系作为一等交付物(§6 (https://arxiv.org/html/2605.21997#S6))。
我们谨慎地声明我们*不*声称的内容。我们未报告ActiveGraph在任务准确性上优于任何基线;贡献在于该基底及其保证。我们在§7 (https://arxiv.org/html/2605.21997#S7)中讨论自我改进型智能体时,严格将其视为该架构所提供的能力,而非我们评估的结果。
## 2 动机:围绕模型构建 vs. 基于日志构建
思考一下智能体的状态实际上包含什么。有目标。有它运行时所依据的规则——这些规则本身可能在运行过程中发生变化。有可用工具以及哪些工具被用什么参数调用的记录。有对话或推理轨迹。还有智能体所产生的内容。在传统架构中,这些存在于不同的地方:目标在提示词中,规则在代码或系统消息中,工具调用在框架的内部状态中,轨迹在转录文本中,输出在数据库中,而所有内容的有损投影存在于通过相似性查询的“记忆”存储中。
ActiveGraph将它们全部压缩到一个基底中。每一个都是事件。规则变化是事件。工具调用及其响应是事件。产生的主张是创建对象的事件,而该主张与支持它的证据之间的链接是创建关系的另一个事件。因为它们都是有序日志中的事件,所以在传统架构中尴尬或不可能的问题变得微不足道:*为什么这个事实在智能体工作集中?智能体在更改规则R之前相信什么?如果它在第42步选择了另一分支会发生什么?*每个问题都是对日志的查询或重新投影。
很容易通过类比人类认知来论证这一点——我们或许更像是被积累的经验历史及其产生的信念所塑造,而非推理引擎。我们仅提一下这个类比,并不以此作为论证基础;该架构的理由是机械的,而非认知的,并在后续章节中阐述。
这些借鉴的思想单独来看并不新鲜。事件溯源和命令查询责任分离是数据系统中的成熟模式,从变化输入中对派生状态进行响应式重计算是增量数据流和电子表格引擎的核心。这里的贡献在于重新组合:将事件溯源、响应式基底应用于长时间运行的智能体系统这一特定问题,其回报——可审计的谱系、确定性重放、以及包含非确定性模型调用的计算上的廉价反事实分叉——既非显而易见,我们认为是异常有价值的。
## 3 架构
参照图注图1:ActiveGraph运行时作为一个循环。仅追加事件日志(底部)是真相源。*重放*将日志折叠成图(类型化对象和关系的投影)。行为订阅图形状模式,对匹配的变化做出反应,通过调用模型或工具,并将新事件发回日志。对日志的操作——确定性重放、分叉与差异、以及谱系——源于日志是首要的。### 图是日志的投影。
运行时持有一个仅追加的事件序列。图状态——类型化对象和关系的集合——从不被外部代码直接修改;它通过将事件日志向前折叠来计算。从存储中加载运行、分叉它、或验证它都调用相同的底层*重放*操作,该操作从事件重建图。同一日志的两次重放产生确定性的相同状态。
### 事件。
每个事件携带一个id、一个类型、一个载荷、产生它的actor、一个可选的指向触发它的事件的caused_by指针,以及一个时间戳。列表1 (https://arxiv.org/html/2605.21997#LST1)展示了真实运行的起始事件:加载包,用户创建目标,行为启动作为响应,并创建一个对象,该对象携带一个provenance块,命名创建它的行为和引发它的事件。
{
"id": "evt_001",
"type": "pack.loaded",
"actor": "runtime",
"caused_by": null,
"payload": {
"name": "diligence",
"version": "0.1.0",
"object_types": [
"company",
"document",
"question",
"claim",
"..."
],
"behaviors": [
"diligence.company_planner",
"diligence.question_generator",
"..."
]
}
}
{
"id": "evt_002",
"type": "goal.created",
"actor": "user",
"caused_by": null,
"payload": {
"goal": "Diligence: NorthwindRobotics"
}
}
{
"id": "evt_003",
"type": "behavior.started",
"actor": "runtime",
"caused_by": "evt_002",
"payload": {
"behavior": "diligence.company_planner",
"event_id": "evt_002"
}
}
{
"id": "evt_004",
"type": "object.created",
"actor": "diligence.company_planner",
"caused_by": "evt_002",
"payload": {
"object": {
"id": "company#1",
"type": "company",
"data": {
"name": "NorthwindRobotics"
},
"provenance": {
"created_by": "diligence.company_planner",
"caused_by_event": "evt_002"
}
}
}
}
{
"id": "evt_005",
"type": "behavior.completed",
"actor": "runtime",
"caused_by": "evt_002",
"payload": {
"behavior": "diligence.company_planner",
"event_id": "evt_002"
}
}
列表1:一个真实运行的起始事件(从捕获的671个事件日志中节选)。每个对象的provenance记录创建它的行为和引发的事件;没有东西是无源可寻地被创建的。
### 行为。
行为是一种反应。它声明一个订阅——一个事件类型加上可选的谓词和用Cypher子集表达的图形状模式——和一个主体。当匹配的变化出现在图上时,运行时触发主体,提供触发事件、图的视图和一个上下文句柄。主体可以创建对象和关系、对现有对象应用补丁、调用工具或调用模型;它所做的一切都被记录为事件。主体有四种形式:普通函数、类(用于携带配置的行为)、LLM支持的程序(其请求和响应本身也是被记录的事件)、以及*关系行为*——附加在类型化边上的逻辑,因此关联两个对象的行为本身可以携带计算。
### 为什么是图,而不仅仅是日志?
单纯的事件溯源会给出一个日志和当前值的扁平投影;图的价值在于它改变了行为可以*订阅*什么以及哪些操作是廉价的。有三个东西特别依赖于图。首先,订阅是图形状模式,而不仅仅是事件类型过滤器:一个行为可以触发于“一个*主张*,它*指向*一个未回答的问题”,这是对拓扑的谓词,扁平事件流无法在没有消费者自己重建图的情况下表达。其次,关系行为使得类型化边成为逻辑的一等载体,因此计算附加在对象之间的*关系*上,而不仅仅是对象上——这在键值投影中没有天然的位置。第三,§5 (https://arxiv.org/html/2605.21997#S5)的结构差异是图拓扑上的差异(两个运行之间哪些对象、关系和补丁不同),这之所以定义良好,正是因为投影是图而非不透明的大块。日志使状态可重现;图使响应性和比较可表达。两者单独都不足够。表1 (https://arxiv.org/html/2605.21997#S3.T1)总结了这些特性如何区分日志优先设计与传统的智能体循环和记忆层系统。
表1:架构差异之处。ActiveGraph的列源于将事件日志视为首要而非副产品。“部分”表示系统以有限或非保证形式提供的特性。
### 无工作流——但并非无协调。
没有顶层脚本来排序运行的步骤。§6 (https://arxiv.org/html/2605.21997#S6)中的尽职调查示例在三个公司上产生了93个对象和76个关系,而没有一行编排代码:规划器行为对目标做出反应,创建公司;问题生成器行为对公司做出反应,发出研究问题;研究人员行为对每个问题做出反应;依此类推。控制流是哪些事件匹配哪些订阅的涌现结果。我们谨慎地不过度强调这一点:协调并没有消失,它移动了。在工作流引擎中原本是显式编排的东西,变成了通过共享图及其订阅的隐式协调。我们并不是说协调消失,而是说让它变得隐式且数据驱动——而不是编码在控制流脚本中——使得运行统一可重放、可分叉和可检查,因为每一个协调决策本身都是一个事件,而不是某些外部程序计数器中的位置。
### 确定性合约。
由于状态是日志上的折叠,重放只有在行为主体是其输入的确定性函数时才可靠。因此运行时施加了一个合约:行为主体不得直接读取random、壁钟时间或新鲜UUID(它从事件中获取这些,事件携带记录的时间戳,或从运行时的确定性id生成器获取);它不得在框架的工具和模型原语之外执行I/O;并且它不得依赖于在多次触发间变化的可变全局状态。该合约不是静态强制执行的。违反合约的行为第一次运行正确,并在以后的重放或分叉时被捕获,表现为一个发散错误,定位到第一个未能重现的事件。下一节解释为何这已经足够。
表面上的例外是最重要的情况:LLM支持的行为,这正是使ActiveGraph成为智能体而非工作流引擎的原因。模型调用不是其输入的确定性函数,因此这样的行为在*首次执行*时不满足合约。框架也不要求它满足。调用实时发出,其响应被记录为事件;合约适用于*重放*,其中记录的响应从缓存中提供(§4 (https://arxiv.org/html/2605.21997#S4)),因此行为恰好重现。确定性因此是重新投影已经存在的日志的一个属性,绝不是声称运行智能体是可重现的。这是一个刻意的分工:行为在执行时可以自由调用模型和工具,而记录层使后续的运行可重放。
## 4 重放与确定性
重放是从日志重建图状态的操作。它是后续所有操作的基础:分叉重放共享前缀,审计重放整个运行,验证在严格模式下重放,证明可重现性。相似文章
@PandaTalk8: The Log is the Agent 它的核心观点是:不要把日志当成 agent 的副产品,而要把 append-only event log 当成 agent 本身。 在 ActiveGraph 里,目标、规则、工具调用、LLM 响…
ActiveGraph是一个将append-only event log作为agent本身的事件溯源运行时,通过图投影实现确定性重放、分叉实验和端到端溯源,为长期可审计的agent系统提供新架构。
@yoheinakajima:看看 http://activegraph.ai,把所有内容扁平化成一个单一的事件日志 :)
ActiveGraph 使用追加式事件日志为长时间运行的代理提供了一个持久、可回放的世界,支持分支、差异和谱系功能。
@paulbettner: Active Graph 是我到目前为止遇到的最佳、最“正确”的知识/上下文引擎(我已经尝试或至少研…
Yohei Nakajima 发表了第一篇 arXiv 论文《The Log is the Agent: Event-Sourced Reactive Graphs for Auditable, Forkable Agentic Systems》,介绍了一种通过持久化可重放状态让代理协调的方法。
@yoheinakajima:我很激动地开源 Active Graph:一个事件溯源的反应式图运行时,用于长时间运行的智能体事件/日志等
Yohei Nakajima 开源了 Active Graph,这是一个基于事件溯源的反应式图运行时,用于长时间运行的智能体,提供持久化状态、分支与差异智能体运行以及完全可审计性,代表了智能体架构的新范式。
@yoheinakajima: babyagi 约有 ~200 次引用,但零篇论文……我刚刚在 arXiv 上发表了第一篇论文"The Log is the Agent: Event-Sourc…"
Yohei Nakajima 发表了一篇论文,提出了 ActiveGraph,这是一个运行时系统,其中事件日志是真相来源,代理通过持久可重放状态进行协调,实现了可审计性、分叉和因果谱系。