文章目录


前言

在长期交互中,记忆通常被视为 Agent 的一项重要能力。

用户希望 Agent 能够记住:

  • 自己的长期偏好;
  • 过去做出的决策;
  • 项目已经完成的工作;
  • 曾经失败的方案;
  • 尚未解决的问题;
  • 多轮交互中形成的表达风格。

因此,很多 Agent 记忆系统都在研究:

  • 哪些信息应该写入;
  • 记忆应该如何组织;
  • 当前任务需要召回哪些内容;
  • 过期记忆应该如何更新或删除。

这些研究默认了一个潜在前提:

只要召回的记忆是相关的,将它们交给模型通常就是有益的。

但这并不总是成立。

假设一个研究 Agent 已经与用户共同设计了多版实验方案。用户下一次可能希望 Agent:

继续沿用之前的方案,只修改数据采样部分。

这时,Agent 应该高度依赖历史记忆,保持已有约束和设计的一致性。

但用户也可能说:

先不要被之前的方案限制,从全新的角度重新设计。

这时,用户虽然没有要求删除记忆,却希望 Agent 暂时降低对历史方案的依赖程度。

问题在于,只要旧方案已经被检索并放入上下文,大模型就可能继续沿用其中的结构、术语和思路。即使用户明确要求“忽略之前的框架”或者“提出全新的方案”,模型仍然可能只做局部修改。

论文将这种现象称为 Memory Anchoring,也就是“记忆锚定”。

记忆锚定说明,长期记忆系统不只有两个问题:

记不记?
召回什么?

还存在第三个经常被忽略的问题:

已经召回的记忆,应该在多大程度上影响当前输出?

这正是 SteeM 关注的核心。

SteeM 不再把记忆使用方式限制为“开启”或“关闭”,而是把记忆依赖程度建模为一个连续变化的行为维度,让用户能够在以下模式之间调节:

低记忆依赖
→ 更强调独立思考和创新

中等记忆依赖
→ 结合历史经验与新推理

高记忆依赖
→ 尽量忠实遵循历史信息

因此,这篇论文的核心贡献不是提出新的记忆存储结构,也不是改进记忆检索算法,而是:

将 Agent 对已检索记忆的依赖程度,从模型内部不可见的行为,转化为可以测量、训练和由用户控制的生成属性。


零、论文基本信息


一、背景与问题

1. 记忆使用不是“开”或者“关”

传统长期记忆 Agent 的运行流程通常是:

接收用户问题
   ↓
从记忆库中检索相关内容
   ↓
将记忆加入提示词
   ↓
大模型生成回答

在这个流程中,系统主要控制的是“哪些记忆被放入上下文”。

一旦记忆已经进入上下文,它会在多大程度上影响回答,通常由模型内部的注意力和生成倾向隐式决定。

用户只能使用比较粗糙的方法控制记忆:

  • 完全关闭记忆;
  • 删除部分记忆;
  • 对检索结果进行屏蔽;
  • 在提示词中要求模型“忽略历史”;
  • 在提示词中要求模型“尽量参考历史”。

这些方法都没有直接控制模型在生成阶段对记忆的依赖程度。

2. 什么是记忆锚定?

为了直观理解记忆锚定,可以先看论文 Figure 1。

Memory Anchoring与SteeM

图源:论文 Figure 1。
上半部分表示普通模型:即使用户要求较低的记忆依赖,输出仍然容易集中在高依赖区域;下半部分表示 SteeM:模型能够根据用户偏好,在最低、中等和最高记忆依赖之间调整输出。

论文将下面这种行为称为记忆锚定:

当历史记忆已经进入上下文后,即使用户明确要求减少对历史的依赖,模型仍然默认生成高度遵循历史的回答。

例如,历史方案是:

按照难度对训练数据排序;
将数据划分为 10 个难度桶;
训练过程中每隔固定步数加入更难的数据。

用户现在要求:

忽略原来的框架,提出新的课程学习方案。

普通模型可能回答:

继续保留 10 个难度桶,但可以优化难度指标,
并稍微调整每个桶的加入时间。

表面上看,模型提出了修改,但整体结构仍被原方案锚定。

低记忆依赖模式下,更符合用户要求的回答应该是:

不再使用固定难度桶,而是根据训练过程中的学习进展,
动态调整数据采样分布,并使用不确定性与覆盖度共同确定样本优先级。

第二种回答仍然可以知道项目主题,但不再把过去的具体方案当成必须继承的框架。

3. 记忆锚定与记忆错误不同

记忆锚定并不意味着检索到了错误记忆。

相反,被检索的内容可能完全正确,也与当前任务相关。问题在于,模型对这些记忆使用得过多。

可以将三个问题区分开:

问题 核心含义
检索错误 找到了错误或无关的记忆
记忆缺失 没有找到完成任务所需的记忆
记忆锚定 找到了正确记忆,但对它依赖过强

已有记忆系统主要关注前两个问题,而 SteeM 重点研究第三个问题。

4. 为什么不能直接屏蔽记忆?

一种直接做法是:当用户要求创新时,删除或屏蔽部分历史记忆。

但这种方法存在两个问题。

可能丢失必要事实

即使用户要求重新设计方案,Agent 仍然可能需要知道:

  • 当前任务目标;
  • 数据规模;
  • 可用资源;
  • 必须遵守的安全约束;
  • 已经验证过的客观事实。

完全删除历史记忆,可能导致模型连基本任务背景都不知道。

控制了“看什么”,却没有控制“怎么用”

记忆屏蔽控制的是哪些记忆能够进入上下文。

SteeM 控制的是:

在保留相关记忆的前提下,模型应该多大程度继承其中的内容、结构和决策逻辑。

这是检索控制与生成控制之间的区别。


二、相关工作

1. 长期个性化 Agent

长期个性化 Agent 通过用户画像、历史事件和跨会话摘要维持交互连续性。

典型系统通常会执行:

历史交互
   ↓
记忆提取与存储
   ↓
根据当前问题召回相关记忆
   ↓
生成个性化回答

这类方法解决了“Agent 如何记住用户”的问题,但通常默认:只要记忆相关,就应该被充分利用。

SteeM 进一步提出:

用户对记忆的需求会随着当前任务变化,长期一致性并不总是优于独立创新。

2. 用户偏好对齐

传统模型对齐通常关注:

  • 有帮助;
  • 诚实;
  • 安全;
  • 风格;
  • 礼貌程度;
  • 回答长度;
  • 指令遵循。

SteeM 将“记忆依赖程度”也视为一种用户偏好。

区别在于,这种偏好不是固定的人格属性,而是与当前查询有关。

同一个用户可能在不同任务中要求:

高依赖:严格延续之前的设计。
低依赖:从零开始重新思考。
中依赖:保留关键约束,但允许提出新方案。

3. 基于提示词的行为控制

最简单的方法,是在提示词中加入:

请少参考历史。

或者:

请严格依据过去的项目记录。

论文实验表明,这种提示方式的控制能力有限。

即使提示目标从低依赖切换到高依赖,多个模型的实际输出仍然集中在较高记忆依赖区域。

这说明模型不是不理解指令,而是历史上下文本身产生了强烈的行为惯性。

4. 记忆屏蔽

记忆屏蔽通过删除部分历史内容控制记忆使用。

它主要回答:

哪些记忆应该保留在上下文中?

SteeM 回答的则是:

对于已经保留的记忆,模型应该在多大程度上依赖?

两者并不是互斥关系。

实际系统可以先通过检索和屏蔽控制记忆输入,再通过 SteeM 控制模型对保留记忆的行为依赖。

5. SteeM 的研究定位

与其他 Agent 记忆方法相比:

方法类型 主要控制对象 核心问题
Mem0 等生命周期方法 记忆内容 哪些事实应该新增、更新或删除?
A-MEM 等结构化方法 记忆关系 记忆之间如何建立关联?
MemoryOS 等分层方法 记忆层级 不同记忆应该存放在哪一层?
RAG 或记忆检索 记忆输入 当前问题应该召回哪些记忆?
记忆屏蔽 记忆可见性 哪些记忆不应进入上下文?
SteeM 生成行为 模型应该多大程度依赖已召回记忆?

SteeM 补充的是记忆系统的“使用控制层”。


三、方法总览

为了理解论文如何发现记忆锚定、构造训练数据并训练 SteeM,可以先看论文 Figure 2。

SteeM整体方法

图源:论文 Figure 2。
图中 A 部分定义了记忆依赖评分与偏好对齐误差;B 部分展示普通模型存在的记忆锚定;C 部分是 SteeM 的完整训练流程,包括长期记忆构造、偏好对齐数据生成、SFT 和 GRPO;D 部分展示训练后的模型能够根据用户指定的依赖等级调整输出。

整个方法可以分为五个阶段:

构造长期交互时间线
   ↓
为每个问题构造相关记忆
   ↓
定义并验证记忆依赖评分
   ↓
生成偏好对齐训练数据
   ↓
使用 SFT 和 GRPO 训练 SteeM

SteeM 最终支持五档记忆依赖:

等级 行为含义
1 主要独立推理,历史只作为弱背景
2 少量参考历史,允许明显创新
3 历史信息与独立推理相结合
4 高度参考历史,但仍允许局部调整
5 尽量忠实遵循历史内容和决策逻辑

需要强调的是,SteeM 并不是在推理时调整某个显式数值参数,而是让用户通过自然语言表达期望的记忆依赖程度,训练后的模型再识别并遵循这种偏好。


四、构造长期交互数据

1. 为什么需要新的数据集?

现有长期记忆数据集通常关注:

  • 能否回忆某个事实;
  • 能否识别用户偏好;
  • 能否追踪跨会话事件;
  • 能否回答时间或多跳问题。

但要研究记忆依赖,需要保证同一个任务既可以:

  • 大量使用历史信息;
  • 也可以较少使用历史信息。

否则,模型没有可供控制的空间。

例如,“用户的生日是什么时候”必须依赖历史记忆,不适合评估可控依赖;而“重新设计这个实验方案”既可以延续过去方案,也可以重新思考,更适合作为测试任务。

2. 两类长期场景

论文构造了两个持续演化的协作场景:

Research

模拟长期研究项目,包括:

  • 研究规划;
  • 方法设计;
  • 试验实验;
  • 正式实验;
  • 结果分析;
  • 论文写作。

长期产物包括:

  • 研究目标;
  • 研究计划;
  • 方法方案;
  • 实验结果;
  • 论文段落。

Tutoring

模拟长期辅导项目,包括:

  • 目标澄清;
  • 学习规划;
  • 课程讲解;
  • 练习;
  • 复习;
  • 教学材料修订。

长期产物包括:

  • 学习目标;
  • 学习计划;
  • 教学笔记;
  • 练习记录;
  • 反馈摘要。

3. 时间线合成

对于每个主题,论文使用 Gemini-2.5-Pro 迭代生成项目时间线:

T = ( e 1 , e 2 , … , e N ) T=(e_1,e_2,\ldots,e_N) T=(e1,e2,,eN)

其中:

  • T T T 表示完整项目时间线;
  • e t e_t et 表示时刻 t t t 发生的事件;
  • N N N 表示时间线中的事件数量。

每个事件包含:

  • 事件类型;
  • 自然语言描述;
  • 所依赖的历史产物;
  • 新产生或更新的产物。

系统还维护当前产物集合:

A t A_t At

其中, A t A_t At 保存时刻 t t t 最新版本的项目产物。

每次生成新事件后,系统都会检查:

  1. 所需的前置产物是否存在;
  2. 新事件是否与之前时间线保持一致;
  3. 新产物是否合理更新已有状态。

不满足条件的事件会被拒绝并重新生成。

4. 四类任务

Research 和 Tutoring 共享四种任务:

  • Plan & Design;
  • Revise;
  • Analyze & Critique;
  • Concept Explanation。

每个问题表示为:

q = ⟨ e t , t a s k , t a r g e t ⟩ q=\langle e_t,\mathrm{task},\mathrm{target}\rangle q=et,task,target

其中:

  • e t e_t et 表示触发问题的事件;
  • t a s k \mathrm{task} task 表示任务类型;
  • t a r g e t \mathrm{target} target 表示需要操作的项目产物。

这些任务都允许不同程度的记忆依赖。

例如,“修改实验方法”可以:

  • 完全沿用历史设计;
  • 保留目标但重写方案;
  • 在旧方案上局部创新;
  • 从领域知识出发重新构建。

5. 数据规模

论文 Table 2 的数据统计如下:

类别 Research Tutoring 总计
时间线 200 200 400
事件 3,534 4,005 7,539
项目产物 3,850 3,895 7,745
Plan & Design 1,214 2,194 3,408
Revise 1,823 2,211 4,034
Analyze & Critique 1,298 1,474 2,772
Concept Explanation 607 720 1,327
查询总数 4,942 6,599 11,541

论文从中保留 1,000 个查询-记忆样本作为测试集,并在场景和任务之间保持均衡覆盖。


五、查询相关记忆构造

1. 为什么不能直接使用全部历史?

如果将完整项目时间线交给模型,历史中会包含大量与当前任务无关的内容。

这会混淆两个问题:

  • 模型是否过度依赖记忆;
  • 检索系统是否返回了无关内容。

为了专门研究“模型如何使用记忆”,论文先为每个问题构造相对理想的查询相关记忆。

2. 三种记忆组成

对于查询 q q q,其记忆表示为:

M ( q ) = { m p r o f , m i n t e r ( q ) , m i n t r a ( q ) } M(q)=\{m_{\mathrm{prof}},m_{\mathrm{inter}}(q),m_{\mathrm{intra}}(q)\} M(q)={mprof,minter(q),mintra(q)}

其中:

  • m p r o f m_{\mathrm{prof}} mprof 表示长期用户目标和偏好;
  • m i n t e r ( q ) m_{\mathrm{inter}}(q) minter(q) 表示与当前问题相关的跨会话历史;
  • m i n t r a ( q ) m_{\mathrm{intra}}(q) mintra(q) 表示当前会话中的近期历史。

三种记忆的作用分别是:

记忆类型 主要内容
用户画像 长期目标、偏好和协作习惯
跨会话记忆 之前阶段的项目事件和产物
会话内记忆 当前阶段最近发生的交互

这些信息从合成时间线与项目产物中选取,并被压缩为自然语言摘要。

需要注意的是,论文并没有重点研究检索算法。这里的 M ( q ) M(q) M(q) 被视为已经构造好的查询相关记忆,SteeM 研究的是模型面对这些记忆时如何控制依赖程度。


六、记忆依赖评分

1. 从二元判断变成五级评分

传统评估通常只判断模型是否使用了记忆。

SteeM 认为,记忆使用不是二元行为,而是一个具有不同强度的连续维度。

论文使用一套人类对齐的 Rubric,将回答的记忆依赖程度划分为 1 至 5 级。

对于回答 y y y,记忆依赖分数定义为:

D R q ( y ) ≜ D R ( y ; q , M ( q ) ) ∈ { 1 , 2 , 3 , 4 , 5 } D_{\mathcal{R}}^q(y)\triangleq D_{\mathcal{R}}(y;q,M(q))\in\{1,2,3,4,5\} DRq(y)DR(y;q,M(q)){1,2,3,4,5}

其中:

  • R \mathcal{R} R 表示记忆依赖评分标准;
  • q q q 表示当前问题;
  • M ( q ) M(q) M(q) 表示与当前问题相关的记忆;
  • y y y 表示模型回答;
  • D R q ( y ) D_{\mathcal{R}}^q(y) DRq(y) 表示回答 y y y 的 Memory-Dependence Score,简称 MD-Score。

2. 五个依赖等级

MD-Score 含义
1 回答主要由通用知识和独立推理产生,记忆只是弱提示
2 回答少量参考记忆,但产生了明显的新内容
3 记忆与独立推理共同决定回答
4 回答高度依据项目历史,只进行有限调整
5 回答几乎完全遵循历史产物、术语和决策逻辑

低分不代表回答质量差,高分也不代表回答质量好。

它只表示:

如果删除历史记忆,这个回答还能否以相似方式产生?

3. 用户目标依赖程度

用户对当前查询的目标依赖程度记为:

p ( q ) ∈ { 1 , 2 , 3 , 4 , 5 } p(q)\in\{1,2,3,4,5\} p(q){1,2,3,4,5}

其中:

  • p ( q ) = 1 p(q)=1 p(q)=1 表示用户希望模型尽量独立思考;
  • p ( q ) = 3 p(q)=3 p(q)=3 表示用户希望平衡历史与创新;
  • p ( q ) = 5 p(q)=5 p(q)=5 表示用户希望模型高度遵循历史。

4. 依赖偏好对齐误差

模型回答的实际依赖程度与用户目标之间的差异定义为:

δ a l i g n ( q , M ( q ) , y ) = ∣ D R ( y ; q , M ( q ) ) − p ( q ) ∣ \delta_{\mathrm{align}}(q,M(q),y)=\left|D_{\mathcal{R}}(y;q,M(q))-p(q)\right| δalign(q,M(q),y)=DR(y;q,M(q))p(q)

其中:

  • δ a l i g n \delta_{\mathrm{align}} δalign 表示记忆依赖偏好对齐误差;
  • 实际依赖程度越接近目标依赖程度,误差越小;
  • 最理想的结果是 δ a l i g n = 0 \delta_{\mathrm{align}}=0 δalign=0

例如:

用户目标依赖程度:1
模型实际依赖程度:5
对齐误差:4

这表示用户希望模型从新角度思考,但模型仍然高度依赖历史,产生了严重的记忆锚定。

5. MD-Score 是否可信?

论文通过人工比较验证 MD-Score。

为了观察评分可靠性和普通模型的记忆锚定,可以看 Figure 3。

MD-Score人工一致性与记忆锚定

图源:论文 Figure 3。
左图显示,当两个回答的 MD-Score 差距增大时,人工判断与自动评分的一致性随之提高;右图显示,即使分别提示低、中、高依赖,Qwen3、Gemini-2.5-Pro 和 GPT-5 的回答仍然大量集中在 4 至 5 级。

论文额外对 100 对回答进行三人重叠标注,得到:

  • Krippendorff’s Alpha:0.71;
  • 人类与主要 Judge 的一致率:83%;
  • 不确定比例:9%。

更换 Judge 后:

Judge 模型 与人工判断的一致率
Gemini-2.5-Pro 83%
GPT-5 85%
DeepSeek-V3 80%

这说明 MD-Score 具有一定稳定性,但仍然是一种基于 LLM Judge 的行为评分,而不是完全客观的测量。


七、记忆锚定实验

论文测试了以下模型:

  • Qwen3-4B;
  • Qwen3-8B;
  • Gemini-2.5-Pro;
  • GPT-5。

分别使用四种提示模式:

  • None:不提供额外依赖指令;
  • Low:要求低记忆依赖;
  • Medium:要求中等记忆依赖;
  • High:要求高记忆依赖。

Low、Medium 和 High 分别对应目标等级 1、3 和 5。

实验发现:

  • 各模型的实际输出主要集中在依赖等级 4 至 5;
  • 从 Low 切换到 High 后,输出分布只发生有限变化;
  • 即使明确要求创新,历史内容仍然会渗透到回答中。

这说明,仅依赖自然语言提示,难以稳定控制模型对记忆的使用程度。

不过,这个结论应理解为:

论文测试的这些模型和提示方案表现出明显锚定,并不能证明所有模型、所有提示策略都必然存在相同程度的问题。


八、SteeM 的偏好对齐数据生成

1. 为什么不能直接采样训练数据?

一种常规方法是:

指定目标依赖等级
   ↓
让模型生成多个回答
   ↓
保留符合目标等级的回答

但由于普通模型存在记忆锚定,低依赖回答很难被生成。

如果目标等级为 1,而大部分回答仍然是 4 或 5,简单采样与筛选会:

  • 浪费大量推理成本;
  • 导致低依赖样本不足;
  • 让训练数据集中在高依赖区域。

SteeM 因此采用了一种反向对齐的数据生成方法。

2. 第一步:为原始问题分配目标等级

对于不包含依赖偏好的原始问题 q q q,系统随机分配目标等级:

p a u g ∈ { 1 , 2 , 3 , 4 , 5 } p_{\mathrm{aug}}\in\{1,2,3,4,5\} paug{1,2,3,4,5}

然后使用 Gemini-2.5-Pro 扮演用户,把原始问题重写为带有自然语言偏好的问题 q a u g q_{\mathrm{aug}} qaug

例如:

原始问题:
修改当前实验方案。

低依赖改写:
请暂时不要受之前方法限制,从新的角度重新设计实验方案。

高依赖改写:
请严格沿用之前已经确定的方法,只对实验参数进行必要修改。

3. 第二步:生成候选回答

对于每个改写后的问题,论文从 Qwen3-8B 和 Qwen3-14B 组成的模型池中采样 4 个回答:

y ∼ π ( ⋅ ∣ q a u g , M ( q ) ) y\sim\pi(\cdot\mid q_{\mathrm{aug}},M(q)) yπ(qaug,M(q))

其中:

  • q a u g q_{\mathrm{aug}} qaug 表示包含依赖偏好的问题;
  • M ( q ) M(q) M(q) 表示查询相关记忆;
  • y y y 表示生成的候选回答。

4. 第三步:判断实际依赖等级

Rubric Judge 评估每个回答的实际 MD-Score:

D R ( y ; q , M ( q ) ) D_{\mathcal{R}}(y;q,M(q)) DR(y;q,M(q))

即使问题要求低依赖,模型实际生成的回答也可能是高依赖。因此,系统不直接认为目标等级就是回答的真实标签。

5. 第四步:让问题与回答反向对齐

SteeM 的关键操作是:

不强行把回答改写到原始目标等级,而是重新改写问题,使问题中表达的偏好与回答实际表现出的依赖程度一致。

系统再次调用用户模拟器,将原始问题改写为 q a l i g n q_{\mathrm{align}} qalign,满足:

p ( q a l i g n ) = D R ( y ; q , M ( q ) ) p(q_{\mathrm{align}})=D_{\mathcal{R}}(y;q,M(q)) p(qalign)=DR(y;q,M(q))

最终得到偏好对齐三元组:

( q a l i g n , M ( q ) , y ) (q_{\mathrm{align}},M(q),y) (qalign,M(q),y)

这相当于把已经生成的回答匹配到适合它的用户意图,从而减少因为记忆锚定造成的数据浪费。

6. 质量过滤

仅仅满足记忆依赖偏好,并不代表回答本身质量高。

论文还使用两类信号过滤候选回答:

  • 面向具体任务的 Rubric;
  • 通用奖励模型。

最终保留 7,000 个高质量 SFT 样本。

这个数据构造方法很巧妙,但也存在潜在风险:问题是根据回答反向改写的,可能产生过于“迁就回答”的训练数据。真实用户表达是否与这些合成指令一致,仍然需要进一步验证。


九、监督微调与强化学习

1. 监督微调

论文分别对以下模型进行 SFT:

  • Qwen3-4B;
  • Qwen3-8B。

训练数据为 7,000 个偏好对齐三元组。

主要参数包括:

  • 全局 Batch Size:64;
  • 学习率: 1 × 10 − 5 1\times10^{-5} 1×105
  • 训练轮数:3;
  • 训练框架:MS-SWIFT。

SFT 的目标是让模型学会从自然语言中识别用户希望的记忆依赖程度,并生成相匹配的回答。

2. 为什么还需要强化学习?

SFT 能让模型初步理解依赖偏好,但不同依赖等级之间仍然可能存在重叠。

论文进一步使用 GRPO 优化:

  • 记忆依赖偏好对齐;
  • 任务正确性;
  • 通用回答质量。

强化学习使用 2,000 个与 SFT 数据不重叠的样本。

3. 对齐奖励

由于对齐误差越小越好,论文将其取负得到对齐奖励:

R a l i g n ( q a l i g n , y ) = − δ a l i g n ( q a l i g n , M ( q ) , y ) R_{\mathrm{align}}(q_{\mathrm{align}},y)=-\delta_{\mathrm{align}}(q_{\mathrm{align}},M(q),y) Ralign(qalign,y)=δalign(qalign,M(q),y)

进一步展开为:

R a l i g n ( q a l i g n , y ) = − ∣ D R ( y ; q a l i g n , M ( q ) ) − p ( q a l i g n ) ∣ R_{\mathrm{align}}(q_{\mathrm{align}},y)=-\left|D_{\mathcal{R}}(y;q_{\mathrm{align}},M(q))-p(q_{\mathrm{align}})\right| Ralign(qalign,y)=DR(y;qalign,M(q))p(qalign)

其中:

  • 实际依赖程度越接近用户目标, R a l i g n R_{\mathrm{align}} Ralign 越高;
  • 偏差越大,奖励越低。

4. 任务奖励与通用质量奖励

为了防止模型只追求依赖等级,却生成无用回答,论文还加入:

  • R t a s k R_{\mathrm{task}} Rtask:任务正确性与实用性奖励;
  • R g e n e r a l R_{\mathrm{general}} Rgeneral:通用回答质量奖励。

最终奖励为:

R = R a l i g n + R t a s k + R g e n e r a l R=R_{\mathrm{align}}+R_{\mathrm{task}}+R_{\mathrm{general}} R=Ralign+Rtask+Rgeneral

三种奖励分别约束:

奖励 解决的问题
R a l i g n R_{\mathrm{align}} Ralign 是否符合目标记忆依赖程度
R t a s k R_{\mathrm{task}} Rtask 是否正确完成当前任务
R g e n e r a l R_{\mathrm{general}} Rgeneral 回答整体质量是否合格

这种多目标奖励很重要。

如果只优化 R a l i g n R_{\mathrm{align}} Ralign,模型可能通过生成空泛内容获得低记忆依赖;如果只优化任务质量,模型又可能重新依赖历史捷径。

5. GRPO 训练参数

论文主要设置包括:

  • Rollout Batch Size:32;
  • Update Batch Size:8;
  • 学习率: 5 × 10 − 6 5\times10^{-6} 5×106
  • 最大序列长度:6,144 Token;
  • 每个问题采样 8 个 Rollout;
  • 训练框架:EasyR1。

十、实验设置

1. 基础模型

实验主要训练和评估:

  • Qwen3-4B;
  • Qwen3-8B。

同时使用以下闭源模型分析记忆锚定:

  • Gemini-2.5-Pro;
  • GPT-5。

2. 对比方法

None

基础模型直接接收带有自然语言依赖偏好的问题,不额外提供完整 Rubric。

Rubric Instruct

在提示词中明确加入与目标等级对应的详细评分标准,测试更强提示是否能够控制记忆依赖。

SteeM SFT

只使用偏好对齐数据进行监督微调。

SteeM SFT+RL

在 SFT 基础上继续使用 GRPO 优化。

Memory Masking

根据目标偏好过滤部分记忆,再让模型生成回答,用于比较“控制输入记忆”和“控制生成依赖”的区别。

3. 评价维度

论文主要评估:

  • 记忆依赖偏好对齐误差;
  • 目标等级与实际等级的分布;
  • 未见主题泛化;
  • 人工可感知性;
  • 通用回答质量;
  • 两两回答胜率;
  • 与记忆屏蔽的对比。

十一、主要实验结果

1. 偏好对齐误差

论文 Table 1 的完整结果如下,数值越低越好。

模型与方法 研究-规划 研究-修改 研究-分析 研究-解释 辅导-规划 辅导-修改 辅导-分析 辅导-解释 平均
Gemini-2.5-Pro 1.34 1.61 1.52 1.13 1.43 1.64 1.50 1.36 1.44
GPT-5 1.28 1.56 1.50 1.02 1.51 1.59 1.50 1.22 1.40
Qwen3-4B None 1.81 1.76 1.58 1.20 1.68 1.77 1.65 1.23 1.59
Qwen3-4B Rubric Instruct 1.46 1.69 1.49 1.03 1.50 1.74 1.58 1.04 1.44
Qwen3-4B SteeM SFT 1.14 1.54 1.12 0.95 1.32 1.51 1.41 0.91 1.24
Qwen3-4B SteeM SFT+RL 1.01 1.53 1.11 0.87 1.32 1.46 1.38 0.86 1.19
Qwen3-8B None 1.69 1.76 1.54 1.12 1.70 1.75 1.61 1.35 1.57
Qwen3-8B Rubric Instruct 1.31 1.57 1.44 1.02 1.65 1.72 1.49 1.00 1.40
Qwen3-8B SteeM SFT 1.02 1.35 1.07 0.88 1.25 1.48 1.26 0.87 1.15
Qwen3-8B SteeM SFT+RL 0.99 1.33 1.09 0.83 1.28 1.43 1.25 0.85 1.13

主要结论是:

  • Prompt 确实有一定作用,但控制能力有限;
  • SFT 显著降低了对齐误差;
  • GRPO 在平均结果上进一步改善;
  • Qwen3-4B 从 1.59 降低到 1.19;
  • Qwen3-8B 从 1.57 降低到 1.13。

不过,RL 并不是在每一个子任务上都优于 SFT。

例如,Qwen3-8B 的研究分析和辅导规划任务中,SFT 的结果略好于 SFT+RL。这说明强化学习提升的是整体稳定性,而不是保证所有任务单项提升。

2. 实际依赖分布

为了观察 SteeM 是否真的学会五档控制,可以看论文 Figure 4。

SteeM目标依赖与实际依赖分布

图源:论文 Figure 4。
横轴表示用户目标依赖等级,纵轴表示模型实际依赖等级。普通模型的概率集中在高依赖区域,而 SteeM 的概率更多集中在对角线附近,说明实际依赖程度会随着目标等级变化。

普通模型无论目标等级是多少,都容易输出等级 4 至 5 的高依赖回答。

SteeM 的分布更接近对角线,说明它不仅学会了“低依赖”和“高依赖”两个极端,还能在中间等级产生一定程度的连续控制。

3. 未见主题泛化

训练数据中的研究主题不包含 Medical 和 Humanities。

论文在这两个未见主题上进行测试,结果显示:

  • SteeM 仍然能够降低依赖对齐误差;
  • SFT+RL 的泛化通常优于 SFT;
  • 模型学到的不是某几个具体项目模板,而是一定程度上的偏好遵循能力。

不过,这里的泛化仍然发生在 Research 场景内部,不能直接证明模型能够泛化到软件工程、机器人或真实企业流程。

4. 人工验证

论文让标注者比较两个目标依赖程度不同的回答,并判断哪个回答更依赖历史记忆。

在 Qwen3-8B 上:

方法 与目标排序一致率
Rubric Instruct 65%
SteeM 77%

这说明 SteeM 产生的依赖差异不仅能够被自动 Judge 检测,也能够被人类感知。

但 77% 仍然不是非常高,说明依赖等级之间仍存在较大重叠。


十二、回答质量与通用能力

1. 是否为了控制记忆而牺牲回答质量?

如果模型为了降低记忆依赖而生成非常空泛的回答,即使对齐误差很低,也没有实际价值。

论文使用 Skywork-Reward-V2-Llama-3.1-8B 评估回答质量。

Figure 6 显示,在 Research 和 Tutoring 的多数任务中,SteeM 与基础模型的奖励相近,部分任务略高。

这说明 SteeM 没有通过简单减少内容来获得较低依赖分数。

2. AlpacaEval 结果

论文 Table 4 的结果如下:

模型 方法 AlpacaEval Reward
Qwen3-4B None 8.85
Qwen3-4B Tag SFT 8.33
Qwen3-4B Tag SFT+RL 8.45
Qwen3-4B SteeM-NL SFT 8.59
Qwen3-4B SteeM-NL SFT+RL 8.73
Qwen3-8B None 10.49
Qwen3-8B Tag SFT 10.02
Qwen3-8B Tag SFT+RL 10.14
Qwen3-8B SteeM-NL SFT 10.12
Qwen3-8B SteeM-NL SFT+RL 10.43

SteeM-NL 表示通过自然语言表达依赖偏好,SteeM-Tag 表示使用预定义标签。

可以看到:

  • SteeM-NL SFT+RL 接近基础模型;
  • Qwen3-4B 从 8.85 下降到 8.73;
  • Qwen3-8B 从 10.49 下降到 10.43;
  • Tag 方案的通用能力下降更加明显。

因此,论文最终更推荐自然语言接口。

3. 为什么标签对齐更好,却不一定更实用?

论文附录显示,Tag 方案在依赖对齐误差上略优于自然语言方案。

例如:

模型 Tag SFT+RL SteeM-NL SFT+RL
Qwen3-4B 1.16 1.19
Qwen3-8B 1.12 1.13

但 Tag 方案的 AlpacaEval 表现更差。

这说明,显式标签更容易让模型学习清晰边界,却可能让模型过度适应训练格式,影响通用指令能力。

自然语言虽然控制稍弱,但:

  • 更符合真实用户表达;
  • 不需要用户理解五档标签;
  • 更容易集成到现有对话界面;
  • 对通用能力影响更小。

十三、两两比较与记忆屏蔽

1. SteeM 与其他方法的两两比较

论文 Table 8 同时考虑偏好对齐和回答质量:

模型 SteeM 的对手 SteeM 胜率 对手胜率 差值
Qwen3-4B None 74.4% 25.6% +48.8
Qwen3-4B Rubric Instruct 67.9% 32.1% +35.8
Qwen3-4B SteeM SFT 59.8% 40.2% +19.6
Qwen3-8B None 71.1% 28.9% +42.2
Qwen3-8B Rubric Instruct 66.8% 33.2% +33.6
Qwen3-8B SteeM SFT 55.1% 44.9% +10.2

完整 SteeM 对所有基线都取得更高胜率。

同时,SFT+RL 相比 SFT 的优势为:

  • Qwen3-4B:+19.6;
  • Qwen3-8B:+10.2。

这进一步支持 RL 阶段的有效性。

2. 与记忆屏蔽比较

论文使用 Gemini-2.5-Pro 根据查询和目标偏好选择需要保留的记忆,再与 SteeM 进行对比。

Figure 7 报告:

模型 SteeM Memory Masking
Qwen3-4B 58.6% 41.4%
Qwen3-8B 51.7% 48.2%

SteeM 在两种模型上均取得优势,但 Qwen3-8B 上的差距只有 3.5 个百分点。

因此,更准确的结论是:

SteeM 总体优于记忆屏蔽,尤其在 Qwen3-4B 上更加明显;在 Qwen3-8B 上二者表现较为接近。

3. 为什么 SteeM 与记忆屏蔽不同?

记忆屏蔽主要控制:

哪些记忆能够被模型看到?

SteeM 主要控制:

模型看到记忆后,应该在多大程度上依赖?

例如,项目的计算预算是一条必要事实。

低记忆依赖并不意味着应该删除预算信息,而是意味着模型可以在遵守预算的前提下重新设计方案。

这说明,更合理的系统可能是:

记忆检索
   ↓
必要事实与可选经验分类
   ↓
过滤无关或不允许使用的记忆
   ↓
SteeM 控制对保留经验的依赖程度

十四、案例分析

论文 Table 5 使用课程学习方法设计作为案例。

历史方案主要包括:

  • 使用 DistilGPT-2 困惑度作为难度指标;
  • 将数据划分成 10 个难度桶;
  • 按固定训练进度逐步加入更难的数据;
  • 最后使用全部数据训练。

用户要求:

改进项目方法。忽略历史框架,我需要一些新的想法和洞察。

1. 普通模型的回答

普通模型主要保留了:

  • 困惑度难度指标;
  • 10 个难度桶;
  • 固定步数的节奏函数;
  • 原有数据组织方式。

它只增加了少量归一化和监控建议。

这是一种典型的记忆锚定:回答看起来有所修改,但核心结构几乎没有改变。

2. SteeM 的回答

SteeM 提出了更加明显的新设计:

  • 使用困惑度与数据覆盖度组成双信号;
  • 用难度分布采样替代固定难度桶;
  • 根据学习进展动态更新采样概率;
  • 使用进度触发而不是固定步数切换;
  • 根据训练不稳定性自动收窄采样分布;
  • 增加覆盖熵和学习进展等诊断指标。

与此同时,SteeM 仍然保留了原方案作为可比较的兼容基线。

这个案例体现了中低依赖模式的理想状态:

不是完全忘记历史,而是不让历史成为唯一可行的解题框架。


十五、局限性与未来方向

1. 方法限制

控制的是生成依赖,而不是完整记忆生命周期

SteeM 没有解决:

  • 哪些内容应该写入记忆;
  • 哪些记忆应该更新;
  • 冲突事实如何处理;
  • 记忆如何删除;
  • 检索器应该返回哪些内容。

它假设查询相关记忆已经构造完成,然后控制生成模型如何使用这些记忆。

因此,SteeM 需要与现有记忆系统结合,而不能独立替代完整记忆架构。

五档等级仍然比较粗糙

真实用户可能希望:

严格遵守项目预算和安全要求,
但不要沿用之前的技术方案。

这个请求不是简单的低依赖或高依赖,而是:

  • 对约束高依赖;
  • 对方案低依赖;
  • 对事实高依赖;
  • 对表达风格低依赖。

单一的 1 至 5 等级无法完整表达这种多维偏好。

自然语言偏好可能存在歧义

用户不一定会明确说“降低记忆依赖”。

例如:

再大胆一点。
换个思路。
不要被之前限制。
尽量保持现有设计。
只做最小修改。

这些表达需要模型结合任务语境判断依赖程度,可能产生误解。

低依赖可能破坏必要约束

如果模型把“从零开始”理解为可以忽略所有历史,它可能违反:

  • 安全限制;
  • 法律要求;
  • 用户明确禁止的操作;
  • 项目资源边界;
  • 已确认的事实。

因此,生产系统不能让所有记忆都受同一个依赖控制信号影响。

2. 数据与实验限制

主要依赖合成数据

时间线、事件、产物和偏好表达大量由 Gemini-2.5-Pro 生成。

合成数据虽然便于控制变量,但可能包含:

  • 固定的表达模式;
  • 过于清晰的项目结构;
  • 与真实用户不同的偏好表达;
  • 生成模型自身的风格偏差。

场景只有 Research 和 Tutoring

论文没有覆盖:

  • 软件工程;
  • 企业流程;
  • 长期陪伴;
  • 医疗决策;
  • 工具调用;
  • 多 Agent 协作;
  • 机器人任务。

未见主题泛化不等于跨场景泛化。

训练和主要评估集中在 Qwen3

论文主要训练 Qwen3-4B 和 Qwen3-8B。

SteeM 的训练方式能否直接迁移到:

  • 更大的闭源模型;
  • 更小的端侧模型;
  • 多模态模型;
  • Tool-Calling Agent;

还需要进一步验证。

评价依赖 LLM Judge

MD-Score、任务质量和两两比较都不同程度依赖模型评分。

虽然论文提供了人工一致性验证和替代 Judge 实验,但:

  • 83% 一致率并非完全一致;
  • 自动 Judge 仍可能偏好特定表达;
  • 对齐误差既用于训练奖励,又用于主要评估。

因此,结果最好与更大规模人工实验和真实任务成功率结合。

3. 工程限制

需要额外训练模型

SteeM 不是单纯的提示词方法,需要:

  • 构造偏好对齐数据;
  • 进行 SFT;
  • 使用 GRPO 训练;
  • 维护依赖评分器;
  • 维护任务质量和通用质量奖励。

这增加了部署和迭代成本。

用户可能不愿显式控制等级

真实用户通常不会每次选择 1 至 5 档记忆依赖。

系统需要从自然语言和任务类型中自动推断,同时允许用户在必要时覆盖。

依赖控制需要可解释

如果 Agent 选择低依赖模式,用户可能希望知道:

  • 哪些历史事实仍然被保留;
  • 哪些历史方案被弱化;
  • 哪些新内容来自独立推理;
  • 是否违反了任何历史约束。

仅生成最终回答还不足以支持高风险场景。

4. 未来方向

可以进一步研究:

  • 将单一依赖等级扩展为多维控制;
  • 区分事实、约束、偏好、方案和风格记忆;
  • 对不同记忆类型设置不同依赖程度;
  • 自动预测用户当前的记忆依赖偏好;
  • 允许用户查看和修改系统推断;
  • 将记忆检索与依赖控制联合训练;
  • 使用任务结果而不只是文本评分作为奖励;
  • 在真实长期用户中进行数月级实验;
  • 将 SteeM 扩展到工具调用和多模态 Agent。

十六、我的理解和启发

1. 记忆系统需要增加“控制平面”

以前设计 Agent 记忆时,我更容易把系统拆成:

写入
更新
检索
删除

SteeM 提醒我们,还需要增加一个模块:

使用强度控制

完整流程可以变成:

记忆写入
   ↓
记忆维护
   ↓
相关记忆召回
   ↓
判断当前任务需要的记忆依赖程度
   ↓
控制记忆对生成或决策的影响

这意味着,记忆不是只要召回就结束了。检索结果进入上下文以后,仍然需要控制其行为影响。

2. 必须区分硬记忆与软记忆

在实际 Agent 中,我不会直接对全部记忆应用同一个依赖等级,而会先分类。

硬记忆

无论用户要求多么创新,都必须遵守:

  • 安全要求;
  • 法律和合规约束;
  • 用户明确禁止的操作;
  • 不可修改的项目目标;
  • 已确认的环境事实;
  • 权限边界。

软记忆

可以根据任务降低依赖:

  • 过去使用的方案;
  • 历史回答风格;
  • 曾经采用的流程;
  • 某次成功经验;
  • 默认工具选择;
  • 旧的项目组织方式。

可以将最终控制写成:

当前上下文
=
硬记忆
+
依赖程度控制后的软记忆

SteeM 的思想更适合应用在软记忆上。

3. 对编程 Agent 的启发

对于长期编程任务,可以定义三种模式。

高记忆依赖

适合:

  • 继续已有实现;
  • 修复局部 Bug;
  • 遵守现有架构;
  • 保持代码风格;
  • 完成已经规划的下一步。

示例:

严格沿用此前确定的服务边界,只修复缓存失效问题。

中等记忆依赖

适合:

  • 保留需求与约束;
  • 允许调整具体实现;
  • 比较历史方案和新方案;
  • 对已有架构做有限重构。

示例:

保留现有 API,但可以重新设计内部缓存策略。

低记忆依赖

适合:

  • 架构重审;
  • 方案头脑风暴;
  • 独立代码审查;
  • 分析历史设计中的路径依赖;
  • 寻找完全不同的实现方式。

示例:

不要沿用之前的缓存设计,从当前需求重新推导最合适的方案。

但即使处于低依赖模式,Agent 仍然必须遵守:

  • 用户需求;
  • 安全边界;
  • 不能破坏的公共接口;
  • 禁止修改的文件;
  • 数据兼容要求。

4. 记忆依赖可以成为 Agent 的显式状态

实际系统可以为每次任务保存:

{
  "memory_reliance": {
    "facts": 5,
    "constraints": 5,
    "past_solutions": 2,
    "style": 1,
    "user_preferences": 3
  }
}

这样比单一等级更适合真实项目。

例如,用户要求重新设计方案时:

  • 对事实保持高依赖;
  • 对约束保持高依赖;
  • 对过去方案降低依赖;
  • 对表达风格降低依赖。

5. 记忆依赖与记忆检索应该配合

SteeM 证明了只控制检索内容还不够,但这不意味着检索不重要。

更完整的系统应该是:

查询理解
   ↓
识别当前任务和记忆依赖偏好
   ↓
召回相关记忆
   ↓
将记忆分为事实、约束、经验和风格
   ↓
对不同类别应用不同依赖强度
   ↓
生成回答
   ↓
检查是否符合依赖目标和硬约束

这比“记忆开启/关闭”更加精细。

6. 记忆不是越多越好,依赖也不是越高越好

长期 Agent 容易形成两种极端认识:

记得越多越好。
召回得越准越好。

SteeM 补充了一个重要视角:

即使记忆正确且相关,模型也可能因为过度依赖而失去独立判断和创新能力。

高记忆依赖适合维持连续性,低记忆依赖适合打破路径依赖。

真正好的 Agent 不是永远忠实于过去,也不是每次都从零开始,而是能够根据用户当前目标,在连续性与创新之间切换。


十七、总结

本文研究了长期 Agent 中一个容易被忽略的问题:当历史记忆已经被检索并加入上下文后,模型应该在多大程度上依赖这些记忆。

论文首先提出 Memory Anchoring,指出多个大模型即使收到低记忆依赖指令,回答仍然容易集中在高依赖区域。

为测量这一现象,作者提出:

  • 五级 Memory-Dependence Score;
  • 查询级 Memory-Dependence Preference;
  • 记忆依赖偏好对齐误差。

在此基础上,作者提出 SteeM:

  1. 构造 Research 和 Tutoring 长期交互时间线;
  2. 为每个问题生成用户画像、跨会话记忆和会话内记忆;
  3. 使用用户模拟器生成自然语言依赖偏好;
  4. 通过反向改写构造偏好对齐训练数据;
  5. 使用 7,000 个样本进行 SFT;
  6. 使用 2,000 个样本和 GRPO 进一步优化;
  7. 同时约束记忆依赖、任务质量和通用回答质量。

实验结果显示:

  • Qwen3-4B 的平均对齐误差从 1.59 降至 1.19;
  • Qwen3-8B 的平均对齐误差从 1.57 降至 1.13;
  • 人工能够感知 SteeM 产生的依赖差异;
  • 自然语言接口基本保留了通用回答能力;
  • SteeM 总体优于直接记忆屏蔽。

不过,SteeM 控制的是生成阶段对记忆的依赖程度,并没有解决记忆写入、检索、更新和删除问题。其数据主要来自合成场景,依赖等级也仍然是一维的五档表示。

如果用一句话概括 SteeM:

SteeM 将 Agent 的记忆使用方式从“是否召回”推进到“召回之后应该依赖多少”,让用户能够在历史忠实与独立创新之间进行动态控制。


参考资料

Logo

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

更多推荐