【论文阅读】Agent 记忆机制(36):SteeM——让用户控制 Agent 对历史记忆的依赖程度
文章目录
前言
在长期交互中,记忆通常被视为 Agent 的一项重要能力。
用户希望 Agent 能够记住:
- 自己的长期偏好;
- 过去做出的决策;
- 项目已经完成的工作;
- 曾经失败的方案;
- 尚未解决的问题;
- 多轮交互中形成的表达风格。
因此,很多 Agent 记忆系统都在研究:
- 哪些信息应该写入;
- 记忆应该如何组织;
- 当前任务需要召回哪些内容;
- 过期记忆应该如何更新或删除。
这些研究默认了一个潜在前提:
只要召回的记忆是相关的,将它们交给模型通常就是有益的。
但这并不总是成立。
假设一个研究 Agent 已经与用户共同设计了多版实验方案。用户下一次可能希望 Agent:
继续沿用之前的方案,只修改数据采样部分。
这时,Agent 应该高度依赖历史记忆,保持已有约束和设计的一致性。
但用户也可能说:
先不要被之前的方案限制,从全新的角度重新设计。
这时,用户虽然没有要求删除记忆,却希望 Agent 暂时降低对历史方案的依赖程度。
问题在于,只要旧方案已经被检索并放入上下文,大模型就可能继续沿用其中的结构、术语和思路。即使用户明确要求“忽略之前的框架”或者“提出全新的方案”,模型仍然可能只做局部修改。
论文将这种现象称为 Memory Anchoring,也就是“记忆锚定”。
记忆锚定说明,长期记忆系统不只有两个问题:
记不记?
召回什么?
还存在第三个经常被忽略的问题:
已经召回的记忆,应该在多大程度上影响当前输出?
这正是 SteeM 关注的核心。
SteeM 不再把记忆使用方式限制为“开启”或“关闭”,而是把记忆依赖程度建模为一个连续变化的行为维度,让用户能够在以下模式之间调节:
低记忆依赖
→ 更强调独立思考和创新
中等记忆依赖
→ 结合历史经验与新推理
高记忆依赖
→ 尽量忠实遵循历史信息
因此,这篇论文的核心贡献不是提出新的记忆存储结构,也不是改进记忆检索算法,而是:
将 Agent 对已检索记忆的依赖程度,从模型内部不可见的行为,转化为可以测量、训练和由用户控制的生成属性。
零、论文基本信息
- 论文名称:Controllable Memory Usage: Balancing Anchoring and Innovation in Long-Term Human-Agent Interaction
- 发表平台:ACL 2026 Main Conference,Long Papers
- 代码仓库:SteeM-Memory-Control
- 作者信息:Zisu Huang、Muzhao Tian、Xiaohua Wang、Jingwen Xu、Zhengkang Guo、Qi Qian、Kaitao Song、Jiakang Yuan、Changze Lv、Xiaoqing Zheng
一、背景与问题
1. 记忆使用不是“开”或者“关”
传统长期记忆 Agent 的运行流程通常是:
接收用户问题
↓
从记忆库中检索相关内容
↓
将记忆加入提示词
↓
大模型生成回答
在这个流程中,系统主要控制的是“哪些记忆被放入上下文”。
一旦记忆已经进入上下文,它会在多大程度上影响回答,通常由模型内部的注意力和生成倾向隐式决定。
用户只能使用比较粗糙的方法控制记忆:
- 完全关闭记忆;
- 删除部分记忆;
- 对检索结果进行屏蔽;
- 在提示词中要求模型“忽略历史”;
- 在提示词中要求模型“尽量参考历史”。
这些方法都没有直接控制模型在生成阶段对记忆的依赖程度。
2. 什么是记忆锚定?
为了直观理解记忆锚定,可以先看论文 Figure 1。

图源:论文 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。

图源:论文 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 最新版本的项目产物。
每次生成新事件后,系统都会检查:
- 所需的前置产物是否存在;
- 新事件是否与之前时间线保持一致;
- 新产物是否合理更新已有状态。
不满足条件的事件会被拒绝并重新生成。
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。

图源:论文 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×10−5;
- 训练轮数: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×10−6;
- 最大序列长度: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。

图源:论文 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:
- 构造 Research 和 Tutoring 长期交互时间线;
- 为每个问题生成用户画像、跨会话记忆和会话内记忆;
- 使用用户模拟器生成自然语言依赖偏好;
- 通过反向改写构造偏好对齐训练数据;
- 使用 7,000 个样本进行 SFT;
- 使用 2,000 个样本和 GRPO 进一步优化;
- 同时约束记忆依赖、任务质量和通用回答质量。
实验结果显示:
- Qwen3-4B 的平均对齐误差从 1.59 降至 1.19;
- Qwen3-8B 的平均对齐误差从 1.57 降至 1.13;
- 人工能够感知 SteeM 产生的依赖差异;
- 自然语言接口基本保留了通用回答能力;
- SteeM 总体优于直接记忆屏蔽。
不过,SteeM 控制的是生成阶段对记忆的依赖程度,并没有解决记忆写入、检索、更新和删除问题。其数据主要来自合成场景,依赖等级也仍然是一维的五档表示。
如果用一句话概括 SteeM:
SteeM 将 Agent 的记忆使用方式从“是否召回”推进到“召回之后应该依赖多少”,让用户能够在历史忠实与独立创新之间进行动态控制。
参考资料
- Huang Z, Tian M, Wang X, et al. Controllable Memory Usage: Balancing Anchoring and Innovation in Long-Term Human-Agent Interaction. ACL, 2026.
- SteeM-Memory-Control 代码仓库
更多推荐


所有评论(0)