@omarsar0: 阿里巴巴的出色工作。(收藏它)如果你在构建长期运行的代理,并不断重写你的记忆架构,tak…

X AI KOLs Timeline 论文

摘要

这篇文章介绍了Scroll,一种用于长期运行AI代理的上下文管理方法,它将上下文视为编程任务,使用仅追加的事件日志和持久化Python内核,在LongMemEval_S和LOCA_256K等基准测试中取得了最先进的结果。

阿里巴巴的出色工作。 (收藏它) 如果你在构建长期运行的代理,并不断重写你的记忆架构,可以看看这个方法。 它基本上将代理上下文管理视为一个编程任务。 以下是其工作原理: 它为每个代理会话提供一个仅追加的事件日志和一个沙箱化的持久化Python内核。 工具输出、检索到的历史记录和派生状态绑定到跨模型调用的类型化变量,而不是每次回合都序列化到提示中。 模型编写的代码搜索和转换该状态,只有显式打印的投影才会进入工作视图。 事件日志保留无损的真实情况,因此在知道什么以后重要之前,无需将任何内容提交为压缩形式。 当工作视图接近其预算时,过时的片段会被淘汰,但仍然可以恢复。淘汰索引将紧凑的地标与确切的事件日志地址绑定,因此代理可以直接导航回某个区域,而不是搜索整个日志。 结果:使用Qwen3.8-Max,在LongMemEval_S上达到94.8%,在BEAM_10M上达到73.1%(比最佳已发布的内存系统高出5.1分),在LOCA_256K上达到86.7%。 将上下文管理视为编程任务意味着它继承了模型编码能力的所有未来改进。 论文:https://arxiv.org/abs/2608.21690 在我们的学院追踪更多热门AI论文:https://academy.dair.ai
查看原文
查看缓存全文

缓存时间: 2026/08/26 11:22

阿里团队的工作令人印象深刻。

(建议收藏)

如果你正在构建长期运行的智能体,并且需要反复优化记忆架构,不妨看看这种方法。

它本质上将智能体的上下文管理视为一项编程任务。

工作原理如下:

每个智能体会话都基于一个仅追加的事件日志和一个沙箱化的持久化Python内核构建。

工具输出、检索的历史记录以及派生状态,都通过类型化变量绑定到模型调用中,而不是每轮都序列化到提示词里。

模型编写的代码会搜索和转换这些状态,只有明确打印的投影才会进入工作视图。

事件日志保持无损的真实记录,因此无需在知道什么重要之前就将其压缩存储。

当工作视图接近其容量限制时,过时的片段会被驱逐但仍然可恢复。驱逐索引将紧凑的地标与事件日志的精确地址绑定,使智能体能够直接定位到特定区域,而不是搜索整个日志。

结果:使用Qwen3.8-Max作为骨干模型,在LongMemEval_S上达到94.8%准确率,在BEAM_10M上达到73.1%(比最佳已发布记忆系统高出5.1个百分点),在LOCA_256K上达到86.7%。

将上下文管理视为编程任务意味着它将继承模型编码能力未来的所有改进。

论文链接:https://arxiv.org/abs/2608.21690

在我们的学院追踪更多热门AI论文:https://academy.dair.ai


上下文作为环境:长周期智能体的程序化上下文管理

来源:https://arxiv.org/html/2608.21690 Yin Lin†[email protected]阿里巴巴集团Elaine Ang†§{}^{\dagger\,\lx@sectionsign}[email protected]哥伦比亚大学Erkang [email protected]阿里巴巴集团 Bolin [email protected]阿里巴巴集团Jingren [email protected]阿里巴巴集团

摘要

LLM智能体越来越多地承担长期运行的任务,其历史记录会远超单个模型上下文窗口的容量。现有方法通过压缩早期交互或将选定信息提取到固定记忆表示中,在未知未来需求之前就决定了要保留的内容。我们提出Scroll,一种将每个智能体会话视为可执行会话环境的上下文管理器。该环境由一个仅追加的事件日志和一个沙箱化的持久化Python内核支持。内核在模型调用之间维护类型化命名空间,允许工具输出、检索的历史记录和派生状态绑定到变量,而不是在每次调用时序列化到提示词中。模型编写的代码通过exec搜索、实例化和转换会话状态;只有明确打印的投影才会进入模型下一次调用的工作视图。这样,上下文管理就变成了一个编程任务,能够继承LLM不断改进的编码能力,同时事件日志保持无损的历史真实记录。当工作视图接近其预算时,过时的片段会被驱逐但仍然可恢复:驱逐索引将紧凑的地标与事件日志的精确地址绑定,使智能体能够直接导航到被驱逐的区域,而不是搜索完整日志。以Qwen3.8-Max作为骨干模型,Scroll在LongMemEvalS上达到94.8%的准确率;在BEAM10M上达到73.1%,比最佳已发布记忆系统高出5.1个百分点;在LOCA256K上达到86.7%,比最佳已发布的长周期智能体高出37.4个百分点。

††脚注文本:†同等贡献。††脚注文本:§工作在阿里巴巴集团实习期间完成。## 1引言

LLM智能体越来越多地用于长期运行的任务,例如仓库级软件工程(11 (https://arxiv.org/html/2608.21690#bib.bib21);32 (https://arxiv.org/html/2608.21690#bib.bib14))和开放网络上的深度研究(40 (https://arxiv.org/html/2608.21690#bib.bib22);30 (https://arxiv.org/html/2608.21690#bib.bib23))。与单轮生成不同,这些任务在模型调用、工具执行、观察、失败和修订的扩展轨迹中展开。随着轨迹增长,智能体框架面临的核心挑战是上下文管理:会话历史持续累积,而每次模型调用都在有界的上下文窗口中进行。此外,模型能够可靠利用的有效上下文远小于其标称窗口,因为长输入的检索和推理会随输入长度增加而退化(21 (https://arxiv.org/html/2608.21690#bib.bib8);35 (https://arxiv.org/html/2608.21690#bib.bib1))。

当前系统主要通过上下文压缩外部记忆来解决这个问题。压缩是实践中占主导地位的方法:现有方法会截断过时片段、丢弃工具输出,或用摘要替换早期轨迹段(12 (https://arxiv.org/html/2608.21690#bib.bib2);34 (https://arxiv.org/html/2608.21690#bib.bib10)),像Claude Code、Codex CLI和Cursor这样的生产级智能体据报道在上下文窗口接近限制时采用类似的压缩机制。外部记忆系统将选定的事实或片段提取到单独的存储中,然后通过语义或结构化接口检索它们(23 (https://arxiv.org/html/2608.21690#bib.bib9);31 (https://arxiv.org/html/2608.21690#bib.bib7);cao2026remember)。两者本质上都是有损的:智能体只能通过摘要或记忆存储来查看历史,因此它们未能保留的任何细节都无法访问——即使原始日志仍存在于磁盘上。然而,长期任务可能需要精确的历史证据或对过去事件进行复杂计算,例如比较轨迹中相距较远的工具输出。相关信息和所需操作都无法预先知道,因此在观察时产生的任何摘要都不能保证保留后来需要的内容。

我们提出Scroll,它将智能体的历史保存在模型上下文之外(38 (https://arxiv.org/html/2608.21690#bib.bib4)),并将其表示为可执行的会话环境。仅追加的事件日志以稳定地址和来源保存交互轨迹,而沙箱化的持久化Python内核跨越模型调用生存,并维护驻留变量的类型化命名空间。因此,任何状态都可以实例化为Python对象,并在推理步骤之间重用,而无需序列化到提示词中。

这使上下文管理变成了编写程序——这是当前模型已经非常擅长的事情。模型发出exec动作来搜索和扩展事件日志、访问允许的资源、调用工具(3 (https://arxiv.org/html/2608.21690#bib.bib33)),并对驻留变量进行计算。检索的记录、工具输出和中间计算保留在内核中,除非通过print明确发出,框架会将其作为观察插入到下一个模型上下文中。因此,exec决定环境如何被访问和转换,而print决定哪个投影进入模型的工作视图

当工作视图接近其预算时,框架会驱逐过时片段。与压缩不同,驱逐只改变视图,从不改变底层记录:被驱逐的事件仍以其稳定地址逐字保存在事件日志中,模型的程序可以按需搜索和实例化它们。Scroll还在视图中保留一个驱逐索引:一个关于哪些内容已离开视图的紧凑映射。搜索只能恢复智能体想到要查询的内容,而索引让智能体意识到它无法再看到的历史;每个条目锚定被驱逐事件的精确地址,可以按需实例化原始内容。

我们的贡献有三方面:

  • •我们将长期上下文管理表述为在每一步选择持久化会话环境上的工作视图。现有方法在未知未来需求之前固定了这种选择;Scroll将其延迟到查询时,作为模型编写的程序来实现。
  • •我们实现了一个可执行的上下文基础架构,结合了仅追加的事件日志、持久化存储和沙箱化的持久化Python内核。模型通过exec操作环境;在其中,只有明确的print输出进入模型可见的上下文。
  • •我们引入了一种算法,在不丢失历史的情况下保持工作视图在预算内:被驱逐的片段在事件日志中保持完整,由紧凑的地址锚定条目索引,智能体可以直接导航。

2Scroll上下文管理器

请参见标题图1:Scroll概览。Scroll将完整会话保存在持久化的可执行会话环境中;模型编写的代码通过exec检索和计算;print选择暴露给下一个模型调用的工作视图。我们引入Scroll,一种面向长期LLM智能体的上下文管理器。关键见解是智能体积累的历史不应序列化到模型的提示词中,而应被视为模型通过程序化交互的环境。提示词只携带工作视图,而会话在上下文窗口之外存在且无损。我们首先形式化这种设计解决的问题(§2.1 (https://arxiv.org/html/2608.21690#S2.SS1)),然后描述会话环境(§2.2 (https://arxiv.org/html/2608.21690#S2.SS2))、模型构建自身上下文的程序化接口(§2.3 (https://arxiv.org/html/2608.21690#S2.SS3)),以及保持工作视图有界同时保留可恢复性的驱逐机制(§2.4 (https://arxiv.org/html/2608.21690#S2.SS4))。

2.1问题形式化

会话状态与工作视图。

智能体会话产生不断增长的事件序列e1,e2,…e_{1},e_{2},\ldots(用户消息、模型响应、工具调用、工具结果),每个事件都有一个关联的负载(其原始内容,例如完整的工具输出)。我们在t个智能体步骤后的会话状态写为

St=(Lt,Pt,Vt),S_{t}=(L_{t},\;P_{t},\;V_{t}),(1)其中LtL_{t}是带有每事件元数据的事件序列,PtP_{t}是LtL_{t}引用的负载,VtV_{t}是辅助派生状态(在Scroll中是变量命名空间;在其他系统中是记忆存储或摘要缓冲区)。然而,每次模型调用消耗一个工作视图ctc_{t},其中|ct|≤C|c_{t}|\leq C个令牌,C是模型的标称上下文窗口。上下文管理问题是在每一步选择下一个视图:映射St↦ct+1S_{t}\mapsto c_{t+1}。

选择何时做出。

现有方法在未知未来需求之前固定映射St↦ct+1S_{t}\mapsto c_{t+1}:压缩在轨迹增长时应用有损算子φ\phias,ct+1=φ⁡(ct,et)c_{t+1}=\phi(c_{t},\,e_{t}),决定在压缩每个片段时哪些信息存活;外部记忆在摄入时应用提取算子ψ\psiat,Vt=ψ⁡(Vt−1,et)V_{t}=\psi(V_{t-1},e_{t}),固定存储的内容以及之后如何检索。无论哪种方式,简化的表示取代了它所总结的历史,因此它遗漏的任何内容都无法恢复。

Scroll则将选择延迟到查询时。完整状态StS_{t}在上下文之外无损持久化,映射St↦ct+1S_{t}\mapsto c_{t+1}是模型在步t编写的程序πt\pi_{t}:该程序在StS_{t}上执行,更新VtV_{t},并为下一次调用发出有界的观察。模型决定回忆、计算和暴露什么;框架通过持久化存储、稳定寻址和沙箱执行使这些决策安全。因为策略表达为代码,它继承了程序的全部通用性,并随骨干模型编码能力改进,无需更改框架。

表1:面向模型的接口将上下文构建分解为定位、实例化、计算和暴露。

2.2持久化会话环境

Scroll将StS_{t}实现为会话环境(图1 (https://arxiv.org/html/2608.21690#S2.F1),右),包含三个对应于LtL_{t}、PtP_{t}和VtV_{t}的组件。

仅追加的事件日志(LtL_{t})。

事件日志是智能体会话的持久化真实记录:一个跨越会话边界的单一仅追加日志。每个交互追加一个带有未来查询所需元数据的类型化事件——角色、会话和智能体标识符、时间戳和工具状态——并接收其不可变、单调递增的seq。我们的实现将事件存储在SQLite中。搜索默认使用BM25而不是嵌入:它是确定性的,不需要索引时的模型调用。

持久化存储(PtP_{t})。

负载是交互产生的原始内容,例如完整的工具结果或生成的工件。日志记录交互发生,但不一定在事件行中存储每个字节:小负载内联在SQLite中,而大负载则移动到文件系统上的JSON或工件存储中,行保留有界预览和恢复指针。外部化的负载通过惰性句柄(ToolResultRef,ArtifactRef)访问。

持久化运行时和驻留命名空间(VtV_{t})。

沙箱化的Python内核在会话期间跨越模型调用持久化;其命名空间包含环境对象:驻留的Python值和惰性句柄,每个都携带类型、大小和来源元数据,标识其派生的事件。通过程序化工具接口发出的工具调用(3 (https://arxiv.org/html/2608.21690#bib.bib33))返回Python对象,后续程序可以操作。框架在每个调用前添加命名空间摘要:列出每个驻留变量的名称、类型和形状的简短列表,小标量值内联显示。模型编写的代码在失败关闭的沙箱中运行:事件日志对内核只读,数据库、文件系统、网络和工具访问仅限于框架明确声明的能力。

图2:程序化上下文构建。三个exec轮次在内核中的驻留状态上计算;只有print输出进入下一个模型上下文/工作视图。

2.3程序化上下文构建

Scroll使用CodeAct风格的接口(29 (https://arxiv.org/html/2608.21690#bib.bib36))进行任务执行和上下文构建。一个受控的能力对象ms形成面向模型的记忆表面,覆盖持久化历史,在四个操作(表1 (https://arxiv.org/html/2608.21690#S2.T1))后抽象物理后端。

图2 (https://arxiv.org/html/2608.21690#S2.F2)通过三个exec单元跟踪图1 (https://arxiv.org/html/2608.21690#S2.F1)的旅行规划任务。单元1将完整工具结果绑定到Python内核中的驻留变量flights和routes,只打印几行。单元2在事件日志中搜索声明的偏好;匹配的预览和seq地址进入工作视图,揭示用户对经济舱和免费通行路线的偏好。单元3扩展两个事件的逐字记录,相应过滤和排序驻留变量,并打印两个偏好轮次以及最便宜的经济舱航班和最快的免费通行路线。大量的工具结果从未进入工作视图;每个调用都以其完整结果追加到事件日志中,可通过seq寻址。

2.4驱逐与离上下文导航

随着会话增长,工作视图必须保持有界。Scroll通过一个驱逐过程(算法1 (https://arxiv.org/html/2608.21690#alg1))来限制它,当工作视图超过预算ρC\rho C时触发。该过程首先将任何活跃的轮次持久化到事件日志,并保护活跃轮次、最近的尾部和最新的工具结果。其余部分按恢复成本递增顺序驱逐:已完成的工具负载首先被折叠,因为单个seq指针就可以指向它们。

相似文章