视频号
    标题 摘要 内容
    详情

    原文链接:https://x.com/ishaansehgal/status/2065129901427130678?s=12

    作者简介:Ishaan Sehgal 是 Omnara 联合创始人,正在构建 AI Agent 的控制中心与托管基础设施;此前曾在 Microsoft 从事 AI 基础设施工作,并有 Roblox 的机器学习相关经历。


    玩过《上古卷轴》或《艾尔登法环》的人,不妨先想一个问题:一个投入了上百小时培养的游戏角色,究竟是什么?

    它不是游戏引擎,不是主机,也不是手柄。真正承载这个角色的,是存档。

    即使主机损坏,只要云端存档还在,换一台设备后,玩家仍然可以回到原来的进度。角色的连续性并不依附于某台机器,而是存在于那份可持久化、可恢复的状态记录中。

    AI Agent 正在来到类似的分水岭。

    人们经常把 Agent 理解为大模型、运行时,或者当前正在执行任务的循环。这些组件当然重要,但它们更像游戏引擎和主机,而不是角色本身。


    更准确地说,Agent 是它的数据,尤其是它在工作过程中不断积累的事件历史,也就是日志(Log)。


    如果日志被正确设计,仅凭这份记录,就应该能够恢复 Agent 的状态并继续执行。

    一旦具备这种能力,Agent 系统的可靠性、扩展性、分叉实验、迁移和协作方式都会随之改变。



    01 · IDENTITY

    如何定义一个 Agent


    如果说“日志就是 Agent”,首先需要明确这里的日志是什么。

    它不是传统意义上为了排障而附加的文本文件,而是 Agent 完整的事件历史,包括:


    • 用户输入

    • 模型输出

    • 工具调用请求

    • 工具执行结果

    • 权限审批、暂停和恢复等控制事件

    • Agent 工作过程中产生的其他有效状态变化


    这些事件按照发生顺序追加写入,形成一份不可随意覆写的历史记录。

    除此之外,日志还需要关联当前会话采用的定义,例如系统提示词、工具描述和技能配置。由于这些信息通常不会在每一轮交互中变化,更适合将其视为带版本的会话配置。


    事件历史与会话定义共同构成 Agent 的完整状态。


    模型、运行时和工具本身并不保存 Agent 的身份。它们只是解释和推进状态的组件:读取持久化历史,执行下一步动作,再把新的事件写回日志。

    因此,理论上可以启动一个全新的执行器,把同一份日志交给它,它就能重建 Agent 所处的位置并从中继续。运行进程可以消失,但 Agent 不会因此消失。


    02 · SOURCE OF TRUTH

    当日志成为系统核心


    一旦把 Agent 定义为日志,系统中的其他组件就容易理解得多:它们无非是在读取日志、追加日志,或者根据日志生成某种视图。


    • 模型读取经过整理的上下文视图,并生成下一步动作;

    • 工具执行器接收工具调用,完成后把结果写入日志;

    • 前端读取日志,渲染出会话时间线;

    • 链路追踪系统读取日志,生成调用 Trace;

    • 审计系统读取日志,重建任务全过程。


    这与数据库系统的思路很接近。表、索引、缓存和物化视图都可以看作底层变更历史的不同投影。同样,Agent 的对话界面、上下文窗口和可观测视图,也都可以是会话日志的投影。


    图片


    一个简化后的执行过程可以表示为:















    只要会话仍有待处理工作:    临时取得该会话的执行权    从持久化日志重建当前状态    调用模型生成下一步动作    将模型响应追加到日志        如果模型请求调用工具:        记录“工具调用开始”        在对应环境中执行工具        将工具结果追加到日志        进入下一轮        否则结束本轮处理


    这里的关键不是循环本身,而是每次循环只临时获得执行权。执行器读取日志、推进一步、持久化结果,然后就可以释放控制权。

    只要每一次有意义的状态变化都被可靠记录,任何执行器都能够接手会话。由此可以构建幂等、容错,并且不依赖单个工作进程存活的 Agent 运行机制。


    03 · CONTEXT

    上下文压缩不等于日志


    Agent 的日志可以持续增长,但模型上下文窗口始终有限。系统不可能在每次推理时都把完整原始历史提交给模型,因此必须进行上下文压缩。

    问题是:如果压缩会用摘要代替早期内容,是否意味着“日志就是 Agent”这个判断并不成立?

    恰恰相反。摘要是一种有损表达,它无法完整保存此前的状态,只是为了特定模型调用而生成的视图。


    完整日志才是原始记录,压缩结果只是日志的一种投影,就像物化视图不是数据库本身,会议摘要也不是完整会议过程。


    只要原始日志仍然存在,系统就能根据不同模型、任务和上下文预算重新生成新的视图。如果丢弃原始历史,只保留压缩后的摘要,就等于永久丢失了 Agent 的一部分。

    一种更清晰的处理方式,是把上下文压缩视为一次有损分叉:保留旧日志,将摘要作为新日志的起点继续运行,而不是让摘要取代原始事实。


    04 · BOUNDARY

    日志并不包含整个外部世界


    这里存在一个重要边界:Agent 会修改日志之外的外部状态。

    例如,它可能编辑文件、创建 GitHub Issue、发送邮件或调用第三方服务。即使会话可以回放,已经发送的邮件也不会自动撤回,外部文件也可能在此期间被其他人修改。

    因此,日志不会让现实世界变得完全确定,也不会令所有动作都可逆。

    日志真正保证的是:系统能够忠实保存 Agent 当时看到了什么、做了什么,以及执行到了哪里。它恢复的是 Agent 的内部连续性,而不是把整个外部世界恢复到过去。

    游戏存档同样不会保存完整的游戏引擎和世界地图,它只保存让玩家角色重新进入世界所需的特定状态。当外部环境已经变化时,恢复后的 Agent 需要重新观察环境,再更新自己的认知。

    这也意味着,可靠的 Agent 平台除了事件日志,还应认真处理工具调用的幂等性、外部副作用标识、重试策略和一致性边界。


    05 · CAPABILITIES

    由这一设计自然产生的能力


    把日志作为 Agent 的持久化本体,会自然带来一系列系统属性。它们不是彼此独立的附加功能,而是同一个架构前提的不同结果。

    1. 可靠性

    如果 Agent 在等待用户授权时进程突然退出,恢复后不应丢失这个等待状态。

    当权限请求本身已经作为事件写入日志,新工作进程就可以重建现场,继续等待用户决定。崩溃的是执行器,而不是 Agent。

    2. 可扩展性

    许多 Agent 框架采用“一个进程对应一个 Agent”的方式,使 Agent 与具体机器绑定。

    如果状态存在日志中,一个工作进程就能轮流推进大量 Agent;需要扩容时,只需增加能够消费会话任务的工作进程。系统不再依赖粘性会话,也不必在机器之间迁移内存状态。

    3. 分叉

    日志可以从任意历史节点创建分支。

    同一个任务可以在不同分支中分别使用 Claude、GPT 或本地 Qwen,也可以配置不同工具、沙箱和执行策略,再比较各分支的结果。

    由此,Agent 的多路径探索不再只是提示词层面的技巧,而可以成为底层运行时的结构化能力。

    4. 多人协作

    分享 Agent 不应只是把对话复制到聊天软件中。那更像是发送一张数据库截图,而不是共享可继续操作的数据。

    如果日志就是 Agent,真正的共享意味着授予他人访问一份持久化历史的权限,使其能够检查、恢复或继续推进该 Agent。

    5. 跨模型与跨平台迁移

    如果 Agent 的身份被封装在某家模型厂商的私有状态中,更换提供商就会非常困难。

    当日志承载连续性时,迁移主要变成适配器问题。不同模型可能需要不同的上下文投影方式,但这属于工程适配,而不是 Agent 身份的迁移。


    06 · ARCHITECTURE

    不要再把日志当作二等公民


    目前不少 Agent 框架仍把日志视为运行过程中的副产品。

    一些工具只是把对话写入本机 JSONL 文件,另一些则把状态放在本地 SQLite 中;如果写入失败、文件损坏或运行机器消失,会话历史就可能无法完整恢复。还有一些系统把状态拆散在多个运行对象中,导致完整因果链难以重建。

    这些方案的问题不是“日志格式不够漂亮”,而是日志没有成为系统的事实源。


    当日志具备持久、结构化、可重放,并且独立于具体运行机器等特征时,可靠恢复、故障转移和审计能力会成为架构的自然结果,而不是后期额外拼接的功能。

    07 · OWNERSHIP

    谁拥有日志,谁就拥有 Agent


    如果日志承载着 Agent 的连续性,那么日志所有权就是 Agent 所有权。

    长期来看,最深层的厂商锁定未必来自模型、API 或工具。模型可以更换,API 可以封装,工具也能适配,但如果某个平台掌握着 Agent 唯一完整且持久的历史记录,迁移将变得极其困难。

    导出一份对话文本并不一定等于导出了 Agent。Agent 不只是最终答案,还包括产生答案的路径依赖历史:它接收过哪些信息、调用过哪些工具、经历过哪些决策,以及每个中间产物是如何形成的。

    随着大模型厂商逐渐提供托管式 Agent、记忆、沙箱、上下文压缩和后台执行服务,团队需要认真回答几个问题:


    • Agent 的完整日志存放在哪里?

    • 谁能够读取和查询这些日志?

    • 数据遵循怎样的保留与删除策略?

    • 日志能否完整导出、回放、分叉和迁移?

    • 导出的究竟是完整事件历史,还是平台生成的某种有限投影?


    托管基础设施本身并不是问题,它对大多数团队都很有价值。真正重要的是,使用者需要清楚自己是否仍然掌握 Agent 的可迁移连续性。


    08 ·Guance

    只要有观测云一个就够


    如果日志承载着 Agent 的连续性,那么观测云所有权就是 Agent 所有权。

    存在哪?使用自研存算分离数据库 GuanceDB 3.0 统一存储。PB 级生产规模,支持百万级 QPS 持续写入。动态 Schema,零 ETL 百万级 High-Cardinality Tags 任意写入。列式存储 + Zstd 10:1 压缩。一种存储,一个真相:Log、Metric、Trace、Profiling、RUM、Security 全部进入统一数据库。
    谁能读? 你的团队。DQL 多模查询语言统一检索指标、日志、链路。开启流式聚合引擎自动学习查询习惯,按最小时间分片预聚合,Offload 80% 以上高频查询负载,复杂聚合场景查询性能跃升 30 倍,百亿数据秒级查询。100% 开放兼容 OpenTelemetry / PromQL。


    观测云,赞18


    保留多久? 你定规则。自定义天数长期留存,从 3 天到 360 天按需配置,企业版支持独立冷热存储策略。审计时无需迁移,直接查询。
    能带走吗? 完整事件流可导出、可回放、可分叉。通过数据转发规则,原始事件序列可转存至外部存储或消息队列。

    用观测云,让智能体真正属于你。