文章目录


前言

随着 Agent 开始执行网页操作、API 调用、代码调试等长时任务,历史轨迹会迅速膨胀。

一条完整的 Agent 轨迹可能同时包含:

  • 用户提出的任务;
  • Agent 的中间推理;
  • 工具调用参数;
  • 环境返回结果;
  • 页面状态变化;
  • 错误信息与修复过程。

这些信息在后续决策中都可能有用。

例如,Agent 在几十步之前访问过某个网页,并发现某个按钮只有在特定条件下才会出现。如果这段经历被保留下来,Agent 再次遇到相似页面时,就可以直接复用之前的操作经验。

问题在于,完整保留历史和有效利用历史之间存在明显矛盾:

  • 直接把全部轨迹放进上下文,Token 消耗会不断增长;
  • 使用摘要压缩轨迹,可能丢失错误信息、参数值和操作顺序;
  • 使用文本 RAG,只能召回少量片段,并且可能检索到“语义相似但逻辑无关”的内容;
  • 使用生成式记忆恢复,又可能把模糊的历史补写成并不存在的证据。

因此,长期 Agent 记忆真正需要解决的,不只是“如何保存更多信息”,而是:

如何在有限的上下文预算下,保留尽可能完整的历史,并在需要时准确取回原始证据?

OCR-Memory 提供了一个很有意思的解决思路:

不再只把历史轨迹看成文本,而是将密集文本渲染成图像,用少量视觉 Token 表示大量历史;检索时,视觉模型只负责找到相关片段的编号,最终内容仍从原始日志中逐字取回。

这使得 OCR-Memory 同时兼顾了三个目标:

  1. 通过视觉编码提高长期记忆的表示密度;
  2. 通过 Set-of-Mark 编号实现精确定位;
  3. 通过确定性文本回取避免生成式转写带来的幻觉。

需要注意的是,OCR-Memory 并不是让主 Agent 直接阅读历史截图并回答问题。

视觉模型在系统中的职责只是“定位”,真正注入主 Agent 上下文的内容,仍然是从原始日志中取回的文本证据。


零、论文基本信息


一、背景与问题

1. 长轨迹中包含大量不可替代的细节

对于短对话任务,摘要通常能够保留大部分重要信息。

但在长时 Agent 任务中,很多关键经验恰恰存在于低层细节中,例如:

  • 某条命令的完整错误信息;
  • 某个 API 的实际返回字段;
  • 网页元素的文本和相对位置;
  • 之前失败过的操作序列;
  • 某个任务中间状态对应的环境反馈。

假设一个网页 Agent 曾经执行以下操作:

  1. 打开设置页面;
  2. 点击“高级设置”;
  3. 修改任务类型;
  4. 因为没有保存配置而执行失败;
  5. 返回页面并补充保存操作。

如果只把这段轨迹总结为“Agent 成功修改了任务类型”,那么“必须先保存配置”这一关键程序性经验就可能丢失。

因此,摘要可以降低 Token 消耗,但不能保证保留未来任务真正需要的细节。

2. 完整上下文无法无限扩展

将一个 episode 中的 Agent 轨迹表示为:

τ ( e ) = { x 1 ( e ) , x 2 ( e ) , … , x T e ( e ) } \tau^{(e)}=\left\{x_1^{(e)},x_2^{(e)},\ldots,x_{T_e}^{(e)}\right\} τ(e)={x1(e),x2(e),,xTe(e)}

其中:

  • τ ( e ) \tau^{(e)} τ(e) 表示第 e e e 个 episode 的完整轨迹;
  • x t ( e ) x_t^{(e)} xt(e) 表示第 t t t 个交互步骤;
  • x t ( e ) x_t^{(e)} xt(e) 可以是用户输入、Agent 推理、工具调用或者环境反馈;
  • T e T_e Te 表示该 episode 的轨迹长度。

随着任务数量增加,外部记忆中积累的轨迹会越来越多。

如果每次执行新任务都重新读取全部历史,那么主 Agent 的上下文长度、推理延迟和调用成本都会持续增加。

3. 文本检索并不等于可靠记忆

传统文本 RAG 一般通过向量相似度检索历史片段。

这种方式适合查询事实,却不一定适合检索 Agent 经验。

原因在于,Agent 经验中的相关性并不总是表现为词语或主题相似。

例如:

  • 当前问题是“为什么提交按钮不可用”;
  • 相关历史可能是“必须先选择许可证类型”;
  • 两段文本在语义表面上并不相似,但存在明确的操作因果关系。

文本 RAG 可能召回很多与“提交按钮”相关的片段,却遗漏真正决定按钮状态的历史步骤。

4. 本文重新定义了记忆压缩问题

OCR-Memory 不再只研究如何压缩文本,而是提出了一个新的表示问题:

Agent 的长轨迹是否一定要继续以文本 Token 的形式存储和检索?

论文借鉴 DeepSeek-OCR 中的光学上下文压缩思路,将密集文本渲染成图像,再通过视觉编码器压缩为较少的视觉 Token。

这样,系统可以用图像保留完整轨迹,同时减少历史在模型上下文中的表示开销。


二、相关工作

论文将现有 Agent 长期记忆方法概括为三条主要路线。

1. 基于检索的记忆系统

这类方法将历史交互存储在外部数据库中,在新任务到来时,根据当前问题检索相关片段。

典型流程是:

历史轨迹
    ↓
文本切分与向量化
    ↓
向量数据库
    ↓
相似度检索
    ↓
相关片段进入 Agent 上下文

这类方法的优点是:

  • 不需要每次读取全部历史;
  • 实现相对简单;
  • 容易与现有 RAG 系统结合。

但它也存在两个明显问题:

  1. 语义相似不一定等于决策相关;
  2. 分块检索可能破坏跨步骤的因果关系。

2. 经验抽象与技能记忆

另一类方法会把完整轨迹抽象为:

  • 工作流;
  • 技能;
  • 规则;
  • 反思;
  • 可复用程序。

例如,AWM 会从历史任务中提取可复用的 Agent Workflow。

这种方法可以显著压缩经验,但抽象过程本身就是有损的。

高层规则能够告诉 Agent“大致应该怎么做”,却未必保留:

  • 完整的错误消息;
  • 具体参数;
  • 中间页面状态;
  • 某次操作失败的原始环境反馈。

因此,技能记忆适合复用成功模式,却不能完全取代原始情节记忆。

3. 上下文压缩

上下文压缩方法通过以下方式降低历史开销:

  • 摘要;
  • Token 剪枝;
  • 层次化压缩;
  • 潜在表示;
  • KV Cache 压缩;
  • 学习式上下文管理。

这类方法直接针对上下文预算问题,但通常需要在压缩率和信息完整性之间做权衡。

压缩率越高,细节丢失的风险通常也越大。

4. OCR-Memory 的定位

OCR-Memory 与上述方法的区别在于:

方法路线 保存形式 主要优势 主要问题
文本 RAG 文本片段 实现简单,检索速度快 语义相似不等于决策相关
摘要记忆 压缩文本 Token 消耗低 可能丢失细节
技能记忆 规则或工作流 便于跨任务复用 无法保留完整原始证据
OCR-Memory 带视觉锚点的轨迹图像 高密度保存历史,可逐字回取证据 增加存储、视觉模型和检索延迟

OCR-Memory 的核心增量不是“又设计了一种检索器”,而是:

将长期记忆的表示介质从纯文本扩展到图像,并把视觉检索限制为索引定位问题。


三、方法总览

为了理解 OCR-Memory 的完整流程,可以先看论文 Figure 1。

方法概况

图源:论文 Figure 1。
左侧是多分辨率视觉记忆库,中间是基于 Set-of-Mark 的光学检索器,右侧是 Locate-and-Transcribe 流程。视觉模型只预测相关片段编号,系统再根据编号从原始日志中确定性取回文本,并将文本证据交给主 Agent。

OCR-Memory 的整体流程可以概括为:

Agent 历史轨迹
    ↓
切分为多个文本片段
    ↓
添加编号、红色边框和视觉锚点
    ↓
渲染为多分辨率图像
    ↓
光学检索器根据当前问题定位相关编号
    ↓
从原始日志中逐字取回对应文本
    ↓
把证据注入主 Agent 上下文

系统中存在两个不同角色:

  • 光学检索器:负责从历史图像中定位相关片段;
  • 主 Agent:负责基于取回的文本证据完成推理和工具调用。

这种职责分离非常重要。

OCR-Memory 不要求视觉模型直接回答问题,也不要求视觉模型精确转写整张低分辨率图像,只需要判断“哪些编号可能包含相关信息”。


四、视觉记忆库

1. 设计动机

如果直接保存轨迹文本,读取大量历史就会消耗大量文本 Token。

OCR-Memory 的基本观察是:

密集文本在渲染成图像后,可以通过视觉编码器压缩成较少的视觉 Token。

因此,论文把历史轨迹转换为图像形式的外部记忆。

2. 记忆项结构

OCR-Memory 的记忆库可以表示为:

M = { m i } i = 1 N M=\left\{m_i\right\}_{i=1}^{N} M={mi}i=1N

其中,每个记忆项为:

m i = ( I i , { s i , k } k = 1 K i , π i ) m_i=\left(I_i,\left\{s_{i,k}\right\}_{k=1}^{K_i},\pi_i\right) mi=(Ii,{si,k}k=1Ki,πi)

其中:

  • M M M 表示完整外部记忆库;
  • N N N 表示记忆图像数量;
  • I i I_i Ii 表示第 i i i 张轨迹图像;
  • s i , k s_{i,k} si,k 表示图像中第 k k k 个视觉片段对应的原始文本;
  • K i K_i Ki 表示第 i i i 张图像包含的文本片段数量;
  • π i \pi_i πi 表示时间戳、episode ID 等元数据。

这里的关键是,系统并没有在生成图像后删除原始文本。

OCR-Memory 实际上同时维护两种表示:

  • 图像负责高密度检索;
  • 原始日志负责证据恢复。

因此,图像更接近一种视觉索引,而不是原始数据的唯一副本。

3. 轨迹渲染

系统会把历史轨迹切分成多个文本片段,再将这些片段渲染到图像中。

每个片段都会被添加:

  • 红色边框;
  • 独立数字编号;
  • 高对比度的编号背景。

论文实现中使用:

  • 红色边框;
  • 3 像素边框宽度;
  • 36pt 粗体无衬线字体;
  • 白色编号文字;
  • 红色编号背景。

这样做的目的不是美化页面,而是为视觉模型提供稳定的定位锚点。

4. 视觉压缩

给定一张输入图像 I I I,视觉编码器将其转换为压缩后的视觉表示:

Z = f e n c ( I ) ∈ R n ( r ) × d l a t e n t Z=f_{\mathrm{enc}}(I)\in \mathbb{R}^{n(r)\times d_{\mathrm{latent}}} Z=fenc(I)Rn(r)×dlatent

其中:

  • f e n c f_{\mathrm{enc}} fenc 表示图像编码器;
  • r r r 表示图像分辨率模式;
  • n ( r ) n(r) n(r) 表示对应的视觉 Token 数量;
  • d l a t e n t d_{\mathrm{latent}} dlatent 表示每个视觉表示的维度。

论文使用 DeepSeek-OCR 提供的多分辨率模式:

n ( r ) ∈ { 64 , 100 , 256 , 400 } n(r)\in\{64,100,256,400\} n(r){64,100,256,400}

分别对应:

  • 512 × 512 512\times512 512×512
  • 640 × 640 640\times640 640×640
  • 1024 × 1024 1024\times1024 1024×1024
  • 1280 × 1280 1280\times1280 1280×1280

分辨率越高,文字越清楚,但消耗的视觉 Token 也越多。


五、Locate-and-Transcribe:先定位,再回取原文

1. 设计动机

如果让视觉模型直接读取低分辨率历史图像并生成文本,容易出现两个问题:

  1. 长文本生成增加推理延迟;
  2. 模糊文字可能诱发视觉模型补全或幻觉。

因此,OCR-Memory 不让模型生成证据,而是只让模型输出相关片段编号。

2. 方法流程

给定当前问题 q q q 和记忆库 M M M,光学检索器首先输出相关片段的索引集合:

S ^ ( q ) = g θ ( q , M ) \hat{S}(q)=g_{\theta}(q,M) S^(q)=gθ(q,M)

然后系统根据索引确定性取回原始文本:

E = F e t c h ( S ^ ( q ) , M ) E=\mathrm{Fetch}\left(\hat{S}(q),M\right) E=Fetch(S^(q),M)

其中:

  • g θ g_{\theta} gθ 表示光学检索器;
  • S ^ ( q ) \hat{S}(q) S^(q) 表示预测得到的相关片段索引;
  • F e t c h \mathrm{Fetch} Fetch 表示从原始日志中读取文本;
  • E E E 表示最终注入主 Agent 上下文的证据。

假设视觉模型判断第 3 3 3 张图像中的第 7 7 7 个片段与当前问题有关,那么系统不会让模型转写这段内容,而是直接执行:

图像编号:(3, 7)
    ↓
查询原始日志映射
    ↓
返回 s_{3,7} 的原始文本

3. Set-of-Mark 视觉锚点

每张图像中的文本块都带有唯一编号。

对于第 i i i 张图像,光学检索器输出一个二值相关性向量:

y ^ i ( q ) = ( y ^ i , 1 , … , y ^ i , K i ) \hat{y}_i(q)=\left(\hat{y}_{i,1},\ldots,\hat{y}_{i,K_i}\right) y^i(q)=(y^i,1,,y^i,Ki)

其中:

  • y ^ i , k = 1 \hat{y}_{i,k}=1 y^i,k=1 表示第 k k k 个片段相关;
  • y ^ i , k = 0 \hat{y}_{i,k}=0 y^i,k=0 表示第 k k k 个片段不相关。

所有正例片段组成全局索引集合:

S ^ ( q ) = { ( i , k ) ∣ y ^ i , k = 1 } \hat{S}(q)=\left\{(i,k)\mid \hat{y}_{i,k}=1\right\} S^(q)={(i,k)y^i,k=1}

这种设计把一个开放式文本生成任务,变成了一个受约束的片段选择任务。

模型的输出空间从任意自然语言缩小为“0、1和编号”,因此更容易控制。

4. 基于概率的召回策略

论文没有只依赖最终生成的 0 或 1,而是从解码器 Logits 中计算相关概率:

p i , k ( q ) = exp ⁡ ( z i , k ( 1 ) ) exp ⁡ ( z i , k ( 1 ) ) + exp ⁡ ( z i , k ( 0 ) ) p_{i,k}(q)= \frac{\exp\left(z_{i,k}(1)\right)} {\exp\left(z_{i,k}(1)\right)+\exp\left(z_{i,k}(0)\right)} pi,k(q)=exp(zi,k(1))+exp(zi,k(0))exp(zi,k(1))

其中:

  • z i , k ( 1 ) z_{i,k}(1) zi,k(1) 表示模型对“相关”标签的 Logit;
  • z i , k ( 0 ) z_{i,k}(0) zi,k(0) 表示模型对“不相关”标签的 Logit;
  • p i , k ( q ) p_{i,k}(q) pi,k(q) 表示第 k k k 个片段与问题 q q q 相关的概率。

论文采用偏向召回率的检索策略:

S ^ i ( q ) = { ( i , k ) ∣ p i , k ( q ) ≥ τ } ∪ T o p K ( { p i , k ( q ) } k = 1 K i , K ) \hat{S}_i(q)= \left\{(i,k)\mid p_{i,k}(q)\ge \tau\right\} \cup \mathrm{TopK}\left(\left\{p_{i,k}(q)\right\}_{k=1}^{K_i},K\right) S^i(q)={(i,k)pi,k(q)τ}TopK({pi,k(q)}k=1Ki,K)

其中:

  • τ \tau τ 表示相关性阈值;
  • T o p K \mathrm{TopK} TopK 表示选择概率最高的 K K K 个片段;
  • 组合策略用于减少漏检。

附录中给出的实现参数为:

  • 相关性阈值 τ = 0.4 \tau=0.4 τ=0.4
  • 无片段超过阈值时,使用 K = 5 K=5 K=5 的 Top-K 兜底;
  • 每次查询最多取回 20 个文本片段。

这体现了论文的检索偏好:

多取回少量可能相关的证据,通常比漏掉关键历史更安全。

5. 举例说明

假设用户询问:

“如何在模型卡中指定任务类型?”

视觉记忆中包含三个带编号片段:

[1] 如何指定训练数据集
[2] 如何设置 pipeline_tag
[3] 如何指定许可证

光学检索器只需要输出:

[2]

系统再从原始日志中取回:

You can specify the pipeline_tag in the model card metadata...

这段文本才会进入主 Agent 的上下文。


六、多分辨率记忆与主动回忆

1. 设计动机

如果所有历史图像都长期保持高分辨率,那么视觉 Token 消耗仍然会随着记忆增长而增加。

因此,论文借鉴了人类记忆“由清晰逐渐变模糊”的特点:

  • 新近记忆保持高分辨率;
  • 较老记忆降低为缩略图;
  • 当旧记忆再次被命中时,恢复为高分辨率。

2. 随时间降低分辨率

论文将记忆年龄定义为 Δ t i \Delta t_i Δti,并根据年龄分配分辨率层级:

ℓ i = ρ ( Δ t i ) \ell_i=\rho(\Delta t_i) i=ρ(Δti)

随后对图像进行降采样:

I i = ϕ ℓ i ( I i h i ) I_i=\phi_{\ell_i}\left(I_i^{\mathrm{hi}}\right) Ii=ϕi(Iihi)

其中:

  • Δ t i \Delta t_i Δti 表示记忆项已经存储的时间;
  • ρ \rho ρ 表示从记忆年龄到分辨率层级的映射;
  • ℓ i \ell_i i 表示当前分辨率层级;
  • I i h i I_i^{\mathrm{hi}} Iihi 表示原始高分辨率图像;
  • ϕ ℓ i \phi_{\ell_i} ϕi 表示对应层级的降采样操作。

论文实现中:

  • 最近 5 个交互步骤使用 1024 × 1024 1024\times1024 1024×1024
  • 更早的历史使用 512 × 512 512\times512 512×512
  • 对应视觉 Token 数分别约为 256 和 64。

3. Active Recall Upscaling

如果低分辨率记忆被检索器命中,系统会重新从原始日志渲染高分辨率版本:

I i ← I i h i I_i\leftarrow I_i^{\mathrm{hi}} IiIihi

恢复后的高分辨率图像会在当前 episode 剩余时间内保持活跃,不再继续衰减。

这相当于:

旧记忆保持低分辨率
    ↓
检索器发现其与当前任务相关
    ↓
根据原始日志重新渲染
    ↓
恢复高分辨率
    ↓
当前 episode 内持续保持清晰

4. 为什么不同时保存两份图像

论文没有同时长期保存高、低分辨率图像。

系统只保存:

  • 原始文本日志;
  • 当前使用的图像版本。

当需要恢复高分辨率时,再从日志重新渲染。

因此,主动回忆的本质并不是对低分辨率图像进行传统超分辨率恢复,而是:

根据原始日志重新生成高清视觉记忆。

这保证了恢复后的内容不会因为图像放大而产生新的文字错误。


七、光学检索器的训练

1. 为什么需要微调

OCR-Memory 使用 DeepSeek-OCR 3B 作为基础模型。

但预训练 OCR 模型主要擅长:

  • 阅读图像文字;
  • 识别文档结构;
  • 转写视觉内容。

OCR-Memory 需要模型完成的是另一项任务:

给定一个问题,判断图像中的哪些文本块能够支持回答。

这不是单纯的 OCR,因此论文对模型进行了检索任务微调。

2. 使用 HotpotQA 构造训练数据

HotpotQA 中的每个样本包含:

  • 一个问题;
  • 多个候选段落;
  • 标注好的支持事实。

论文不使用最终答案,而是把支持事实转换成二值标签。

对于第 k k k 个段落:

y k = I [ k ∈ F s u p p ] y_k=\mathbb{I}\left[k\in F_{\mathrm{supp}}\right] yk=I[kFsupp]

其中:

  • F s u p p F_{\mathrm{supp}} Fsupp 表示支持事实对应的段落集合;
  • I [ ⋅ ] \mathbb{I}[\cdot] I[] 表示指示函数;
  • 如果第 k k k 个段落属于支持事实,则 y k = 1 y_k=1 yk=1
  • 否则 y k = 0 y_k=0 yk=0

随后,论文把候选段落渲染成带 Set-of-Mark 编号的图像,让模型学习根据问题选择相关编号。

3. 加权二元交叉熵

由于相关段落数量通常远少于无关段落,训练数据存在明显类别不平衡。

论文采用加权二元交叉熵:

L B C E = − ∑ n = 1 ∣ D ∣ ∑ k = 1 K [ w + y k ( n ) log ⁡ p k ( n ) + w − ( 1 − y k ( n ) ) log ⁡ ( 1 − p k ( n ) ) ] \mathcal{L}_{\mathrm{BCE}}= -\sum_{n=1}^{|D|} \sum_{k=1}^{K} \left[ w_{+}y_k^{(n)}\log p_k^{(n)} + w_{-}\left(1-y_k^{(n)}\right)\log\left(1-p_k^{(n)}\right) \right] LBCE=n=1Dk=1K[w+yk(n)logpk(n)+w(1yk(n))log(1pk(n))]

其中:

  • D D D 表示训练数据集;
  • y k ( n ) y_k^{(n)} yk(n) 表示第 n n n 个样本中第 k k k 个片段的真实标签;
  • p k ( n ) p_k^{(n)} pk(n) 表示模型预测的相关概率;
  • w + w_{+} w+ 表示正样本权重;
  • w − w_{-} w 表示负样本权重。

论文设置:

w + = 2.0 , w − = 1.0 w_{+}=2.0,\qquad w_{-}=1.0 w+=2.0,w=1.0

也就是让模型更重视漏掉相关证据的错误。

4. 冻结视觉编码器

论文冻结 DeepSeek-OCR 的视觉编码器,只通过 LoRA 微调语言解码器。

LoRA 配置为:

  • Rank:16;
  • 缩放系数:32;
  • Dropout:0.05;
  • 微调 q_projk_projv_projo_proj

这样做的目的,是保留模型已有的视觉识别能力,同时让解码器学会“根据问题选择视觉编号”。

5. 分辨率课程训练

真实部署中,大量旧记忆会处于低分辨率状态。

如果训练时只使用高清图像,检索器在部署时可能无法适应模糊记忆。

因此,训练阶段会随机采样分辨率:

ℓ ∼ C a t e g o r i c a l ( π ) , I ~ = ϕ ℓ ( I ) \ell\sim\mathrm{Categorical}(\pi),\qquad \tilde{I}=\phi_{\ell}(I) Categorical(π),I~=ϕ(I)

论文使用两个分辨率层级:

  • 1024 × 1024 1024\times1024 1024×1024,采样概率为 0.3;
  • 512 × 512 512\times512 512×512,采样概率为 0.7。

这使检索器在训练阶段就学会根据粗粒度视觉信息判断片段相关性。


八、实验设置

1. 数据集

论文使用两个长时 Agent 基准。

Mind2Web

Mind2Web 是网页操作基准,要求 Agent 根据自然语言指令完成多步骤网页任务。

论文使用 Cross-Task 划分,并报告:

  • Element Accuracy;
  • Action F1;
  • Step Success Rate;
  • Task Success Rate。

AppWorld

AppWorld 要求 Agent 通过 API 与多个应用交互。

论文按照任务难度报告:

  • Easy Success Rate;
  • Medium Success Rate;
  • Hard Success Rate;
  • Average Success Rate。

其中,Hard 子集更依赖长历史回溯,因此更适合检验长期记忆能力。

2. 对比方法

论文使用以下基线:

  • Zero-Shot:不读取历史轨迹;
  • Retrieval:使用密集向量进行文本检索;
  • MemoryBank:长期对话记忆系统;
  • AWM:将历史经验抽象为 Agent Workflow;
  • ACON:面向长时 Agent 的上下文压缩方法。

3. 实现设置

核心设置包括:

  • 主 Agent:GPT-4;
  • 温度:0;
  • 光学检索器:DeepSeek-OCR 3B;
  • 默认记忆上下文预算:4096 Token;
  • 微调数据:HotpotQA;
  • 训练轮数:3;
  • 全局 Batch Size:128;
  • 峰值学习率: 1 × 10 − 5 1\times10^{-5} 1×105
  • 优化器:AdamW。

九、主要实验结果

1. Mind2Web 和 AppWorld

论文的主要结果如下。

方法 Mind2Web Element Acc Action F1 Step SR Task SR AppWorld Easy Medium Hard Average
Zero-Shot 40.1 46.2 37.9 2.2 68.7 36.2 20.9 41.9
Retrieval 41.3 48.2 38.9 2.7 72.5 44.8 21.4 46.2
MemoryBank 43.8 49.5 39.2 3.3 81.3 50.1 24.9 52.1
AWM 49.1 55.7 42.6 4.3 84.1 53.6 27.2 55.0
ACON 48.2 54.1 41.4 4.1 84.8 55.1 28.7 56.2
OCR-Memory 53.8 59.2 46.1 4.8 86.2 57.4 30.8 58.1

在 Mind2Web 上,OCR-Memory 相比 AWM:

  • Element Accuracy 从 49.1% 提升到 53.8%;
  • Step Success Rate 从 42.6% 提升到 46.1%;
  • Task Success Rate 从 4.3% 提升到 4.8%。

在 AppWorld Hard 子集上:

  • 文本 Retrieval 为 21.4%;
  • AWM 为 27.2%;
  • OCR-Memory 达到 30.8%。

Hard 任务中的提升更加明显,说明当任务需要频繁回看长历史时,保留原始细节比只保存摘要或工作流更有价值。

2. 严格上下文预算下的表现

为了观察 Token 预算对不同记忆方法的影响,可以看论文 Figure 2。

方法性能对比

图源:论文 Figure 2。
该图比较了 Text-RAG 和 OCR-Memory 在 1024、2048、4096、8192 Token 限制下的表现。上下文预算越严格,OCR-Memory 相比 Text-RAG 的优势越明显。

在只有 1024 Token 的情况下,OCR-Memory 相比 Text-RAG:

  • Element Accuracy 提升 17.0 个百分点;
  • Action F1 提升 14.8 个百分点;
  • Step Success Rate 提升 14.8 个百分点;
  • Task Success Rate 提升 2.1 个百分点。

这说明 OCR-Memory 的主要价值并不是无限提高 Agent 的能力,而是:

当文本上下文成为系统瓶颈时,用视觉表示提高有限上下文中的有效信息密度。


十、消融实验与进一步分析

1. Set-of-Mark 是否必要

论文比较了三种视觉检索方式。

方法 Element Accuracy Step SR 单次检索延迟
OCR-Memory 完整方法 53.8 46.1 1.7 秒
不使用 SoM,直接生成文本 46.5 39.2 5.3 秒
不使用 SoM,预测边界框 49.2 44.5 2.1 秒

直接生成文本的问题最明显:

  • Element Accuracy 下降 7.3 个百分点;
  • Step Success Rate 下降 6.9 个百分点;
  • 延迟从 1.7 秒增加到 5.3 秒。

这说明 Set-of-Mark 不只是一个视觉提示技巧,而是 OCR-Memory 能够稳定运行的核心约束。

它把检索问题从:

请从图片中生成相关历史

改成:

请判断编号 1、2、3 中哪些与当前问题相关

后者的输出空间更小,也更容易验证。

2. 多分辨率主动回忆是否有效

分辨率策略 Step SR Task SR 每张历史图像平均视觉 Token
静态低分辨率 39.7 2.9 65
静态高分辨率 46.5 4.9 256
动态分辨率 46.1 4.8 82

静态低分辨率最节省视觉 Token,但部分文字过于模糊,导致 Step Success Rate 下降到 39.7%。

静态高分辨率效果略高,但每张图像需要 256 个视觉 Token。

动态分辨率只使用约 82 个视觉 Token,就取得了接近静态高分辨率的效果。

这说明“旧记忆模糊保存,命中后恢复”的设计确实在性能和成本之间取得了较好的平衡。

3. 长上下文检索能力

论文在 RULER 的 Needle-in-a-Haystack 测试上评估了光学检索器。

原始上下文长度 视觉压缩比 Recall@1
4k 10.3× 98.5
8k 10.2× 97.2
16k 10.7× 95.8
32k 10.6× 94.1

当原始上下文增加到 32k 时,OCR-Memory 仍然保持 94.1% 的 Recall@1,并实现约 10.6 倍视觉压缩。

但这里需要注意:

Needle-in-a-Haystack 测试主要说明检索器能够在压缩表示中定位目标,不等于完整 Agent 任务能够获得同等成功率。

4. 主 Agent 更换后的泛化

记忆方法 主 Agent Element Accuracy Step SR Task SR
Text Retrieval GPT-4 41.3 38.9 2.7
OCR-Memory GPT-4 53.8 46.1 4.8
Text Retrieval Qwen3-32B 35.2 31.5 1.8
OCR-Memory Qwen3-32B 48.6 42.3 3.9

换成 Qwen3-32B 后,OCR-Memory 仍然明显优于文本检索。

这说明性能提升主要来自记忆机制,而不是只对 GPT-4 有效。

5. 检索质量

论文在 Mind2Web 上构造了专门的 Experience Retrieval Evaluation Subset。

方法 Recall@1 Recall@5 Recall@10 MRR
Dense Text-RAG 52.7 74.3 82.1 0.61
OCR-Memory 78.6 93.4 96.2 0.84

OCR-Memory 的 Recall@1 从 52.7% 提升到 78.6%,说明光学检索器不仅提高了最终任务结果,也确实提高了相关历史的召回质量。

6. 如何理解“100%忠实度”

论文还报告:

  • 自由文本生成式检索的内容忠实度为 84.3%;
  • OCR-Memory 的内容忠实度为 100%。

但这个结果不能理解成“检索结果永远正确”。

OCR-Memory 的 100% 忠实度表示:

一旦模型选中了某个片段,最终返回的内容与该片段的原始日志完全一致。

它不表示:

  • 每个被选中的片段都一定相关;
  • 检索器不会漏掉正确证据;
  • Agent 最终一定能正确利用证据。

因此,OCR-Memory 解决的是“证据转写是否忠实”,而不是彻底解决“证据选择是否正确”。


十一、效率与成本分析

OCR-Memory 的优势主要体现在减少进入主 Agent 的文本 Token,而不是所有资源都更便宜。

方法 每个 Episode 磁盘占用 每步注入文本 Token 每步检索延迟
Text-RAG 18 KB 3980 0.3 秒
OCR-Memory 1.47 MB 596 1.7 秒

OCR-Memory 将每步注入主 Agent 的文本 Token 从 3980 降低到 596,约减少 6.7 倍。

代价是:

  • 每个 episode 的磁盘占用从 18 KB 增加到 1.47 MB;
  • 检索延迟从 0.3 秒增加到 1.7 秒;
  • 系统还需要额外部署一个视觉检索模型。

因此,OCR-Memory 的成本变化可以概括为:

更少的主模型上下文 Token
             ↓
更多的磁盘占用、图像渲染和检索延迟

它不是让整个系统无条件变得更便宜,而是把成本从稀缺的推理上下文,转移到相对便宜的存储和预处理资源。


十二、与已有 Agent 记忆方法的对比

方法 核心思想 主要解决的问题 与 OCR-Memory 的区别
Mem0 事实记忆生命周期管理 记忆如何写入、更新和删除 OCR-Memory 更关注长轨迹如何高密度保存与取回
A-MEM 动态建立记忆关联 记忆如何演化和形成关系 OCR-Memory 不重点建模记忆关系
AWM 从经验中提取工作流 如何复用成功操作程序 OCR-Memory 保留原始轨迹,不只保存抽象技能
ACON 优化长时任务上下文压缩 如何减少上下文冗余 OCR-Memory 将压缩介质从文本扩展到图像
OCR-Memory 图像化轨迹与定位转录 如何在低 Token 预算下保存完整历史证据 用视觉模型定位,用原始日志保证忠实度

我认为 OCR-Memory 与技能记忆并不是替代关系。

更合理的工程组合可能是:

原始轨迹
   ├── OCR-Memory:保存可回溯的原始证据
   ├── 技能记忆:提取可复用工作流
   └── 语义记忆:保存稳定事实和任务约束

当 Agent 需要快速行动时,可以优先使用技能记忆。

当技能执行失败、需要调试或者需要追溯历史依据时,再通过 OCR-Memory 查询原始轨迹。


十三、局限性与未来方向

1. 方法限制

依赖专用视觉检索器

OCR-Memory 不是一个完全训练无关的方法。

系统需要:

  • 部署 DeepSeek-OCR;
  • 使用 HotpotQA 风格的数据进行微调;
  • 维护视觉编码器和解码器参数。

对于轻量 Agent 应用,这部分基础设施可能过重。

定位错误仍然存在

确定性文本回取只能保证“取回的内容和日志一致”,不能保证模型选对了编号。

如果视觉检索器遗漏关键片段,原始文本保存得再完整也无法帮助主 Agent。

图像压缩并非真正无损

OCR-Memory 保留了原始日志,因此最终证据能够无损恢复。

但是,低分辨率视觉表示本身仍然会损失文字细节。

论文中的 Active Recall 只有在检索器能够先从模糊图像中发现相关记忆时才会触发。

如果低分辨率图像已经模糊到无法识别关键语义,那么这条记忆仍可能被遗漏。

2. 工程限制

磁盘与延迟增加

与 Text-RAG 相比,OCR-Memory:

  • 使用更多磁盘空间;
  • 需要额外的图像渲染;
  • 增加视觉模型推理;
  • 检索延迟更高。

因此,它更适合上下文 Token 昂贵、历史轨迹很长的任务,而不一定适合所有短任务。

数据删除和版本一致性

OCR-Memory 同时保存:

  • 原始日志;
  • 图像表示;
  • 编号与文本之间的映射;
  • 分辨率状态;
  • 元数据。

当原始数据被更新或删除时,系统必须同步修改所有相关表示,否则可能出现:

  • 图像编号指向旧文本;
  • 已删除内容仍然保留在图像中;
  • 不同版本的轨迹同时存在。

隐私问题

Agent 轨迹中可能包含:

  • 用户隐私信息;
  • API 参数;
  • 文件路径;
  • 内部系统返回;
  • 身份认证信息。

将日志进一步渲染为图像,相当于增加了一份数据副本。

因此,实际部署时需要同时处理文本日志和视觉记忆的:

  • 权限控制;
  • 脱敏;
  • 加密;
  • 生命周期管理;
  • 用户删除请求。

3. 未来方向

与结构化记忆结合

OCR-Memory 擅长保存原始轨迹,但不擅长描述记忆之间的逻辑关系。

未来可以将其与知识图谱或情节图结合:

  • 图结构负责组织实体、事件和因果关系;
  • OCR-Memory 负责保留原始证据;
  • 主 Agent 根据图结构定位事件,再回看具体轨迹。

学习更合理的分辨率策略

论文采用“最近 5 步高清,其余低清”的固定策略。

未来可以根据以下信号动态决定分辨率:

  • 记忆访问频率;
  • 任务相关性;
  • 历史成功贡献;
  • 记忆不确定性;
  • 当前 Token 预算。

从视觉定位扩展到多模态经验

当前方法主要把文本轨迹渲染成图像。

未来可以进一步保存 Agent 原生的多模态经验,例如:

  • 网页截图;
  • GUI 状态;
  • 视频片段;
  • 图表;
  • 代码编辑界面;
  • 机器人第一视角画面。

这样,视觉记忆就不只是文本的另一种编码方式,而可能成为 Agent 原生的多模态情节记忆。


十四、我的理解和启发

1. 记忆压缩不一定只能发生在文本内部

以往讨论 Agent 记忆压缩时,通常考虑:

  • 如何写摘要;
  • 如何删除不重要的 Token;
  • 如何合并重复事实;
  • 如何提取技能和规则。

OCR-Memory 提醒我们,压缩还可以通过“改变表示模态”完成。

当文本 Token 是主要瓶颈时,可以把历史转换成另一种更高密度的表示,再通过专用模型完成检索。

这与传统数据库中的思想有些类似:

原始数据、索引结构和查询结果不需要采用完全相同的表示形式。

2. 检索模型不应该同时承担证据生成

OCR-Memory 中我认为最值得借鉴的设计,并不只是“把文本变成图片”,而是 Locate-and-Transcribe 的职责分离:

视觉模型:判断证据在哪里
数据库:返回证据原文
主 Agent:基于证据进行推理

如果让同一个模型同时负责:

  • 判断什么相关;
  • 读取模糊内容;
  • 重新生成证据;
  • 回答最终问题;

那么任何一个环节的幻觉都可能污染后续决策。

将模型输出限制为索引,可以让检索结果更容易验证和追踪。

3. “原始轨迹”和“抽象经验”应该同时存在

对于自己的 Agent 项目,我不会只选择 OCR-Memory 或技能记忆中的一种。

更合理的记忆架构是分层保存:

第一层:工作记忆

保存当前任务最近的交互,直接进入上下文。

第二层:结构化记忆

保存:

  • 用户稳定偏好;
  • 环境配置;
  • 任务约束;
  • 实体关系;
  • 已验证事实。

第三层:技能记忆

保存:

  • 成功工作流;
  • 错误修复策略;
  • 工具调用模板;
  • 可复用操作程序。

第四层:原始轨迹档案

使用 OCR-Memory 或类似机制保存完整历史证据。

这种架构可以同时回答两类问题:

  • “我下一步应该怎么做?”——查询技能和结构化记忆;
  • “我为什么认为应该这样做?”——回查原始轨迹证据。

4. 视觉记忆更像索引,而不是知识本身

OCR-Memory 虽然将历史渲染成图像,但真正可信的数据源仍然是原始日志。

因此,在工程实现中可以把三部分严格分开:

原始日志:事实来源
视觉图像:高密度检索索引
主 Agent 上下文:按需取回的证据

这样的设计有一个明显优势:视觉检索器可以升级、替换或重新训练,而不需要修改原始记忆内容。

5. Token 成本不是唯一成本

OCR-Memory 的实验还说明,评价 Agent 记忆系统时不能只看 Token 数量。

至少应该同时考虑:

  • 主模型输入 Token;
  • 记忆写入成本;
  • 检索延迟;
  • 磁盘占用;
  • 额外模型显存;
  • 预处理开销;
  • 证据忠实度;
  • 最终任务成功率。

OCR-Memory 减少了最昂贵的推理上下文,却增加了存储和视觉检索成本。

在长时、高价值任务中,这种交换可能很划算;在短对话和高并发场景中,则未必合适。


十五、总结

OCR-Memory 研究的是一个长期 Agent 记忆中的基本矛盾:

完整历史能够提供更多证据,但有限的文本上下文无法承载不断增长的轨迹。

论文的解决方案可以概括为三个步骤:

  1. 将 Agent 历史轨迹渲染成带编号的多分辨率图像;
  2. 使用光学检索器定位与当前问题相关的片段编号;
  3. 根据编号从原始日志中逐字取回证据,再交给主 Agent 推理。

其核心创新包括:

  • 使用视觉模态作为高密度的长期记忆表示;
  • 使用 Set-of-Mark 将视觉检索转化为编号选择;
  • 使用 Locate-and-Transcribe 分离证据定位和证据生成;
  • 使用多分辨率存储与主动回忆降低视觉 Token 开销。

实验表明,OCR-Memory 在 Mind2Web 和 AppWorld 上都优于文本检索、MemoryBank、AWM 和 ACON,尤其在严格上下文预算和困难长时任务中优势更加明显。

但它并不是没有代价:

  • 需要额外训练和部署视觉检索器;
  • 图像存储占用更高;
  • 检索延迟更长;
  • 视觉压缩仍可能导致召回错误;
  • 原始日志和视觉副本带来新的隐私与一致性问题。

我认为这篇论文最重要的启发并不是简单地“把 Agent 记忆截图保存”,而是:

Agent 记忆的存储形式、检索形式和最终推理形式不必完全相同。
可以使用高密度表示完成检索,再回到可验证的原始证据上进行推理。

这为长期 Agent 记忆提供了一条不同于摘要、向量检索和技能抽象的新路线。


参考资料

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐