@ishaansehgal: https://x.com/ishaansehgal/status/2065129901427130678

X AI KOLs Timeline 新闻

摘要

文章认为,AI代理由持久事件日志定义,而非运行时或模型,从而支持容错恢复并简化对代理状态的推理。

https://t.co/lKK4Slx8zG
查看原文
查看缓存全文

缓存时间: 2026/06/12 08:58

日志即智能体

回想一下你在《上古卷轴:天际》或《艾尔登法环》中玩了 100 小时的角色。

你的角色究竟是什么?

  • 是游戏引擎吗?不是。
  • 是 PlayStation 吗?不是。
  • 是手柄吗?不是。

你的角色是存档文件。

如果你的 PlayStation 着火了,你的角色并没有死。你买另一台 PlayStation,从云端下载存档文件,你的角色就准确回到了原来所在的位置,连挥剑的动作都停在半空中。

AI 智能体正处于同样的转折点。

大多数人认为智能体就是模型、运行时或当前执行任务的循环。这些东西确实重要。但它们不是智能体。

在这篇文章中,我将论证智能体就是它的数据:具体来说,是其事件历史,我们称之为日志。当日志构建正确时,仅凭日志就可以恢复智能体。而这一特性解锁了一整套能力,使得即使是最复杂的智能体用例也更容易推理,并更容易构建到日常应用中。

定义智能体

那么日志是什么?定义智能体就是定义日志。其核心是事件历史:每一次用户输入、模型输出、工具调用和工具结果,都会随智能体的工作而累积——这是一个只追加的记录,记录了发生的一切。

日志还携带了对会话定义的引用:系统提示、工具描述以及智能体正在运行的技能。这些内容在每次轮次中不会改变,因此更像是一个版本化的常量,而不是流中的活跃部分。

它们共同构成了智能体的完整状态。智能体的任何部分都不存在于运行时、模型或工具中;它们只是解释器和追加器。它们读取持久状态,对其执行操作,并将下一个事件写回。因此,你可以将相同的日志交给一个全新的执行器,它会精确重建智能体的状态,并从中继续。仅凭日志就足以恢复智能体。

实践中的日志

一旦你将智能体定义为日志,系统的其余部分就更容易推理了。对智能体的每个操作要么读取日志,要么追加内容,要么渲染日志的视图。模型读取一个视图并生成下一个动作。工具运行器执行工具调用并追加结果。UI 读取日志并渲染时间线;跟踪系统读取它并渲染追踪;审计员读取它以重建发生的事件。这与数据库多年前采用的模式相同:表、索引和缓存都是底层变更日志的投影。(下图标示改编自 @dexhorthy 优秀的《12要素智能体》;如果你没读过,值得一看。)

一个高级智能体控制循环,运行在日志之上。

一个高级智能体控制循环,运行在日志之上。

在实践中,一个简化的循环可能如下所示:

while session_has_work: take_temporary_lease(session_id) state = reconstruct_from_log(session_id) response = model.next(state) append(response, to=session_log)

if response.requests_tool:
    append(tool_call_started, to=session_log)
    result = run_tool(response.tool_call)
    append(result, to=session_log)
    continue

finish_turn(session_id)

看起来很简单,但关键在于,每次循环都会获取一个临时租约,读取日志,前进一步,然后将结果写回。该循环是幂等且容错的:只要每个有意义的状态转换都持久写入,任何执行器都可以接续该会话并继续。

压缩不是日志

虽然日志可以无限增长,但模型的视图却不能:上下文窗口是有限的。你不能在每次调用时都将整个原始历史交给模型。这就是压缩发挥作用的地方。而由于压缩会用摘要替换之前的所有内容,这是否破坏了“日志即智能体”的主张?

不,不会。请记住,压缩是有损的。压缩后的摘要并不能以更小的形式重现智能体的状态;它丢弃了信息。

这实际上强化了该主张。完整的日志是记录;压缩只是它的一个投影,就像物化视图不是数据库、摘要不是对话一样。保留原始日志,你总可以从中生成新的投影。扔掉原始日志只保留压缩,你就失去了智能体的一部分。因此,最清晰的做法是将压缩视为一种尽力而为的、有损的分支,你将其作为一个新日志来恢复。

日志并不是整个世界

有一个明显的反对意见值得认真对待:那些在日志之外改变状态的工具怎么办?智能体编辑文件、创建 GitHub 问题、发送电子邮件。现在,状态存在于日志之外的某个地方。这难道不会推翻该主张吗?

不会。你从日志中重新推导出智能体的状态,而不是从世界中:如果它已经发送了电子邮件,回滚并不会撤回它;它编辑的文件可能已在底层发生了变更。日志并不能让世界变得确定或可逆。它只是忠实且可恢复地记录了智能体所做和所见的事情,而这正是你不能丢失的东西。存档文件也是同样的操作:它不包含《天际》引擎或地图,只包含将你送回游戏所需的角色特定状态。如果世界在智能体上次运行后发生了变化,那么智能体——很像游戏角色——在重新与周围环境交互时,也会更新其世界观。

由此产生的特性

以这种方式推理智能体会给你带来一组良好的系统特性。它们并非相互独立;它们都源自“日志即智能体”这一假设。

可靠性。 看看今天 Claude Code 的情况:如果智能体到达权限提示,而进程死亡,你恢复它时,权限提示消失了,智能体也暂停了。这在生产环境中是不可接受的。当日志是智能体时,执行器可以出现故障:一个新工作进程接续会话,重建状态,权限提示就在原地。进程死了,智能体没死。

可扩展性。 大多数 harness 为每个智能体运行一个进程,这意味着智能体与运行的机器绑定。当日志是状态时,你翻转了这个模型:一个进程可以推进数千个智能体,每个智能体在每次轮次中从日志重建其状态。智能体不与任何单个机器或工作进程绑定,使得故障转移变得微不足道。水平扩展只需增加更多工作进程:没有粘性会话,没有状态迁移,没有协调开销。

分支。 与其只有一条线性路径,你可以分支日志。一个分支在 Claude 上运行,另一个在 GPT 上,另一个在本地的 Qwen 上,每个分支在不同的沙箱中,使用不同的工具,探索不同的策略。探索不同方法在架构上变得简单得多。

多人协作。 共享一个智能体不应意味着将对话记录复制到 Slack 中。这就像共享数据库的截图并称之为复制一样。如果日志是智能体,那么共享意味着授予对持久历史的访问权限,其他人可以检查、恢复或扩展它。

迁移。 如果智能体的身份被困在特定提供商的假设中,迁移提供商会很痛苦。如果日志是智能体,迁移就变成了适配器问题。不同的模型可能需要不同的投影,但那是工程问题,不是身份问题。日志是连续性,智能体应该能够与任何模型提供商互换地接续和恢复。

这些只是几个例子。一旦你开始以这种方式思考智能体,它们就变成了数据片段,许多可以对数据做的事情也变成了对智能体可能的操作。

日志作为二等公民

如今,大多数智能体 harness 将日志视为事后考虑。Claude Code 和 Codex 将转录写入本地磁盘上杂乱的 JSONL 文件——在 Claude SDK 模式下,这些写入是即发即忘的,意味着如果在写入完成之前发生任何问题,数据就会丢失。OpenCode 将状态存储在本地 SQLite 文件中;GitHub 问题报告损坏和数据丢失。Durable 对象往往最终持有不同的分片,使得重建历史变得困难。日志是副作用,而不是系统。

当你将日志视为一等公民——持久、结构化、可重放、独立于运行智能体的机器——所有这些特性都成为结构性的。你不需要附加它们。它们是自然产生的。

拥有日志

最后一点我想让你记住:拥有日志极其重要。如果日志是智能体,那么谁拥有日志,谁就拥有智能体。

长期来看,最强的锁定形式不是模型锁定:模型可以交换。也不是 API 或工具锁定;这些可以被包装和适配。最深的锁定是日志锁定。如果提供商拥有你智能体的唯一持久记录,那么该提供商就拥有你的智能体。你可以导出投影——比如一个对话记录——但仍然失去智能体,因为智能体不是其最终输出;它是产生输出的路径依赖历史。

这一点现在值得认真对待。Anthropic 有 Claude Managed Agents。Google 有 Gemini 托管智能体。每个主要提供商都在向拥有更多技术栈迈进:托管智能体循环、托管内存、沙箱、压缩、后台执行。他们想拥有你的智能体,而智能体可以说是你将运行的最亲密的科技。为了让智能体有用,它需要访问你的个人信息、公司数据、工作流程和决策。日志是所有这些的记录。如果它存在于别人的基础设施上,受他们的保留策略约束,可供他们的系统查询,那么他们不仅托管你的智能体,他们还拥有它。

这并不是反对托管基础设施;它有用,并且对大多数团队来说可能不可避免。但你应该知道你的日志在哪里,谁可以检查它,以及它是否可以被重放、分支、迁移或导出。一旦会话日志成为基本要素,日志所有权就是智能体所有权。

我们在 Omnara 实践中如何处理

在 Omnara,我们将智能体执行视为一组组件,围绕一个持久的会话日志进行协调。工作进程推进循环,但工作进程不是智能体;它只是当前的执行器。

当智能体调用工具时,工作进程不必坐在那里在内存中持有所有状态。它将工具调用开始的信息写入日志,将工具分派到它所属的任何执行环境,然后让它在其他地方完成。当工具完成时,其结果被追加回日志,然后一个工作进程(可能是另一个)重建状态并继续。

这一点很重要,因为智能体系统必须承受真实的失败:工作进程崩溃、机器重启、沙箱消失、工具调用运行时间过长、提供商失败、用户断开连接。如果智能体是正在运行的进程,所有这些都是可怕的。如果智能体是日志,那就只是执行细节。会话继续运行,因为智能体的状态从未被困在执行它的东西内部。将日志视为系统——持久、结构化、独立于任何单一机器——是我们构建 Omnara 的核心。

结论

这篇文章的目的是让你从第一性原理出发推理智能体。智能体是所做工作的持久历史,而这段历史就是日志。

一旦你这样看,很多问题就迎刃而解:可靠性、可扩展性、压缩、分支、迁移、多人协作、所有权。它也会改变你构建的方式。你不再将日志视为系统产生的副产品,而是将其视为系统本身。循环变成了日志上的执行器。这与数据库多年前经历的转变相同:持久的历史是首要的,其他一切只是投影。

如果你觉得这有用,请关注我们在 Omnara 正在构建的东西。我们正准备开源我们的托管智能体平台,你可以在此加入等待列表。“日志即智能体”只是我们认为将让智能体在未来更加强大的几篇文章中的一篇。

相似文章

AI代理没有智能问题,它们有状态管理问题

Reddit r/AI_Agents

文章认为,AI代理在生产中的大多数故障是由于不稳定的运行状态和内存退化造成的,而非模型能力不足,并强调需要更好的基础设施来支持状态管理、可观测性和自适应可靠性。

@djfarrelly: https://x.com/djfarrelly/status/2052779234234380479

X AI KOLs Timeline

本文主张,AI Agent 的开发应基于稳定的执行原语,而非会随新兴编排模式频繁更迭的僵化框架。文章强调,采用持久化步骤、持久状态、并行协调、事件驱动流程以及可观测性设计,可有效避免因最佳实践不断演进而付出的高昂重写代价。