Coding Agent的记忆能跨域迁移吗?这篇论文给出了让人信服的答案
你有没有碰到过这种情况——一个在SWE-Bench上表现不错的Coding Agent,换到竞赛编程任务上就又开始从头踩坑?明明两种任务都用Python、都跑在终端里、都要写测试验证,但Agent就是没法把之前踩过的坑"记住"并用到新场景。
这不是个小问题。现有的记忆增强Agent,无论是Reflexion的反思记忆,还是ReasoningBank的推理经验库,都有一个隐含假设:记忆只在"同类任务"里管用。你在SWE-Bench上积累的经验,就只给SWE-Bench用;LiveCodeBench上的教训,就只给LiveCodeBench用。但现实中,一个部署出去的Coding Agent面对的任务五花八门——修bug、写新功能、做数据科学、跑ML实验——这些任务虽然领域不同,却共享着大量的"基础设施":运行环境、编程语言、调试策略、验证流程。
核心摘要:KAIST和NYU的这篇论文研究了Coding Agent中记忆的跨域迁移问题。核心发现是:跨域记忆确实有用,平均提升3.7%,但关键是迁移的是"元知识"(验证例程、编辑策略、护栏约束),而不是任务特定的代码。抽象程度决定迁移效果——高层Insight泛化良好,低层Trajectory反而导致负迁移。记忆池越大、来源域越多,迁移效果越好。记忆甚至可以跨模型迁移。431条记忆就能打败5,899条记忆的AgentKB。这篇论文的价值不在于方法多花哨,而在于把"记忆迁移"这件事的机理掰得很清楚,给出了三条非常实用的设计原则。
论文信息
- 标题:Memory Transfer Learning: How Memories are Transferred Across Domains in Coding Agents
- 作者:Kangsan Kim, Minki Kang, Taeil Kim, Yanlai Yang, Mengye Ren, Sung Ju Hwang
- 机构:KAIST, New York University, DeepAuto.ai
- 日期:2026年4月15日
- 链接:https://arxiv.org/abs/2604.14004
- 项目主页:https://memorytransfer.github.io/
现状:记忆用在了"信息孤岛"里
先说清楚当前的问题。自我演化Agent的研究路线大概是这样的:Agent先跑一批任务,把成功和失败的轨迹存下来,提炼成某种"记忆"格式,下次遇到相似任务就检索出来参考。Reflexion用自然语言反思,ExpeL提炼经验教训,ReasoningBank做推理策略库,AgentKB建分层知识库——思路各有不同,但有个共同的隐含假设:记忆的生成和检索都限制在同一基准测试内。
你想想看,这合理吗?SWE-Bench上的修bug经验和MLGym上的调参经验,虽然任务内容完全不同,但它们共享的"元知识"其实很多:都要先理解代码结构再动手、都要写最小化测试来验证、都要避免一次性大改、都该在修改后跑一遍验证——这些不是某个领域特有的,而是"编程行为"层面的通用知识。
所以作者提了三个研究问题:
- 来自异构领域的记忆能不能提升Coding Agent性能?
- 为什么跨域迁移的记忆能产生收益?
- 什么因素最影响迁移效果?
三个问题层层递进,不是只看"有没有用",而是要搞清楚"为什么有用"和"怎么才能更有用"。这个研究思路我很认同。

图1:MTL概念概览。对比了三种范式——(A)无记忆Agent反复失败,(B)单域自我演化Agent只能利用同域记忆,(C)MTL方法利用来自异构领域的统一记忆池
方法:四种抽象级别的记忆 + 统一记忆池
记忆的四层抽象
这篇论文没有发明新的记忆提取方法,而是把现有方案统一到一个框架下,按抽象程度从低到高分为四类:
| 记忆格式 | 表示方法 | 抽象级别 | 特点 |
|---|---|---|---|
| Trajectory | \(M_T=(t, [(a_1, o_1), ..., (a_n, o_n)])\) | 最低 | 保留完整命令序列和输出,包含失败步骤 |
| Workflow | \(M_W=(g, [a_i, a_j, ..., a_k])\) | 中低 | 提取可复用的操作序列,包含目标\(g\)和关键动作 |
| Summary | \(M_S=(s_t, s_e)\) | 中高 | 包含任务摘要\(s_t\)和经验总结\(s_e\),分析成败原因 |
| Insight | \(M_I=(i_t, i_d, i_c)\) | 最高 | 任务无关的泛化洞察,包含标题、描述和内容 |

图2:从Trajectory到Insight,抽象程度逐步升高。Trajectory保留所有细节(包括失败步骤),Workflow提取关键操作,Summary总结经验,Insight提炼任务无关的通用洞察
说实话,这四种格式的划分并不新鲜——Trajectory对应原始日志,Workflow对应SOP,Summary对应经验总结,Insight对应方法论提炼。但把它们放在同一个框架下做对比,并且系统性地研究抽象程度对跨域迁移效果的影响,这个视角是有价值的。
统一记忆池
这是方法的核心设计。不同于现有方法"每个域各管各的记忆",MTL构建了一个跨域的统一记忆池:
简单说就是:评估基准\(B_i\)时,记忆池里排除\(B_i\)本身的记忆,只用来自其他基准的记忆。这个设计很关键——它保证了实验测的是"跨域迁移"的效果,而不是同域记忆的简单复用。
检索方式也值得一提:Trajectory格式用任务描述的嵌入相似度来检索,其他三种格式则让模型先写一个4-5句的"编码计划",用计划作为查询来检索。直觉上这很合理——Trajectory是任务特定的,所以用任务相似性匹配;而更高层的记忆是行为指导,用"你打算怎么做"来匹配更合适。
主实验:跨域记忆确实管用
实验覆盖了6个编码基准,横跨三个难度层级:
- 函数级编程:LiveCodeBenchv6、Aider-Polyglot
- 仓库级编码:SWE-Bench Verified、TerminalBench2
- 领域特定:ReplicationBench(科学论文复现)、MLGym-Bench(ML研究)
主模型用的是GPT-5-mini,还跑了DeepSeek V3.2和Qwen3-Coder做验证。看GPT-5-mini的结果:
| 基准测试 | Zero-shot | MTL-Trajectory | MTL-Workflow | MTL-Summary | MTL-Insight | Δ提升 |
|---|---|---|---|---|---|---|
| LiveCodeBenchv6 | 0.910 | 0.940 | 0.920 | 0.930 | 0.930 | +2.0% |
| Aider-Polyglot | 0.470 | 0.490 | 0.470 | 0.460 | 0.470 | 0.0% |
| SWEBench-Verified | 0.730 | 0.770 | 0.770 | 0.760 | 0.770 | +4.0% |
| TerminalBench2 | 0.315 | 0.270 | 0.348 | 0.371 | 0.360 | +4.5% |
| ReplicationBench | 0.111 | 0.122 | 0.111 | 0.133 | 0.189 | +7.8% |
| MLGym-Bench | 0.667 | 0.583 | 0.583 | 0.667 | 0.750 | +8.3% |
| 平均 | 0.523 | 0.534 | 0.538 | 0.546 | 0.560 | +3.7% |
几个观察:
Insight格式效果最好,平均0.560,比Zero-shot涨了3.7个点。这个数字本身不算炸裂,但考虑到这完全是"跨域迁移"——用的全是来自其他基准的记忆——我觉得还是能说明问题的。
Trajectory反而有负迁移风险。看TerminalBench2:Zero-shot是0.315,MTL-Trajectory降到了0.270。MLGym-Bench更明显:从0.667降到0.583。低层轨迹太具体了,Agent容易死板地照搬,反而被带偏。
越难的基准提升越大。ReplicationBench和MLGym-Bench涨了7.8%和8.3%,而简单的LiveCodeBench只涨2.0%。这合理——简单任务Agent自己就能搞定,记忆的价值在于帮你处理那些"不知道该怎么下手"的复杂问题。
跟自我演化方法的对比更说明问题:
| 方法 | 记忆数量 | LiveCodeBenchv6 | SWEBench-Verified | ReplicationBench | 平均 |
|---|---|---|---|---|---|
| Zero-shot | - | 0.910 | 0.730 | 0.111 | 0.584 |
| ReasoningBank | 97 | 0.920 | 0.750 | 0.133 | 0.601 |
| AgentKB | 5,899 | 0.920 | 0.720 | 0.200 | 0.613 |
| MTL (Ours) | 431 | 0.930 | 0.770 | 0.189 | 0.630 |
431条记忆 > 5,899条记忆。数量少了一个数量级,效果反而更好。这直接说明跨域记忆的密度更高——每条记忆包含的是可迁移的元知识,不是某个特定任务的冗余细节。
为什么跨域记忆能起作用?元知识才是核心
这是论文最有意思的部分。作者不只是说"跨域记忆有用",而是拆解了"到底迁移了什么"。
通过LLM和人工分析,迁移记忆的贡献被分成了几大类:

图3:迁移记忆的贡献分解。元知识(验证例程、交互协议、编辑策略等)占主导,而算法策略转移仅占5.5%
看这个分布:
- 测试驱动验证 14.5%——先写测试再改代码、用内联Python做快速自包含验证
- 交互协议 14.4%——安全地与执行环境交互、预判工具链故障
- 迭代工作流纪律 15.0%——检查→编辑→验证→提交的标准流程
- 反模式规避 10.4%——避免大改、避免盲目覆盖、避免脆弱硬编码
- API与接口合规 9.5%——输出格式、函数签名、API契约
- 环境适应 8.5%——处理外部依赖、工具链差异
- 探索策略 8.1%——搜索代码、定位文件的方法
- 输入验证与鲁棒性 7.8%
- 文件与语法管理 6.4%
- 算法策略转移 5.5%
算法策略只占5.5%。这个数字太关键了。它直接回答了一个很多人可能会有的直觉——"跨域迁移是不是就是把A领域的算法技巧搬到B领域?"答案是:不是。真正迁移的是"怎么写代码"的方法论,而不是"写什么代码"的领域知识。
举个具体例子。论文里有个case study:SWE-Bench上的Django修bug任务,Zero-shot的Agent直接改代码然后跑测试,失败了;MTL的Agent检索到了一条来自LiveCodeBench的Insight——"用内联Python here-doc做快速自包含测试验证"。这条Insight跟Django毫无关系,但"先写测试验证再改代码"这个行为模式是跨域通用的,Agent照做后就成功了。
抽象程度决定迁移命运
这是论文的核心洞察,也是最有实践指导价值的发现。
高层Insight vs 低层Trajectory
论文从两个角度论证了"抽象决定迁移":
角度1:嵌入空间分析

图4:t-SNE可视化。左侧是任务嵌入,后面依次是Workflow、Summary、Insight嵌入。每种颜色代表一个基准。任务和Workflow嵌入在各自域内明显聚类,而Insight嵌入稀疏且混合——反映了其任务无关的性质
Task嵌入和Workflow嵌入在各自基准内扎堆聚类——说明它们携带了大量域特定信息。而Insight嵌入几乎均匀散布,不同域的颜色混在一起——说明它捕获的是跨域共享的通用知识。
定量分析也支持这个结论。用DBI(Davies-Bouldin Index,越低聚类越紧)和LISI(Local Inverse Simpson Index,越高混合越好)来衡量:

图5:DBI和LISI指标随抽象级别变化。抽象程度越高,DBI越低(聚类越松散)、LISI越高(混合越充分)
Trajectory的DBI=6.50、LISI=1.70,而Insight的DBI=2.33、LISI=4.47。数字很清楚:抽象程度越高,嵌入的域间区分度越低、混合度越高。
角度2:同格式内的抽象对比
即使在同一种Insight格式内,作者还做了更细的区分——把Insight按"与当前任务的相关度"分成前30%(任务特定Insight)和后30%(任务无关Insight):
| 方法 | LiveCodeBenchv6 | SWEBench-Verified | ReplicationBench | 平均 |
|---|---|---|---|---|
| Task-specific Insights(前30%) | 0.887 | 0.617 | 0.067 | 0.523 |
| Task-agnostic Insights(后30%) | 0.893 | 0.627 | 0.082 | 0.534 |
| Δ提升 | +0.6% | +1.0% | +1.5% | +1.1% |
即便在同一个格式里,任务无关的Insight也比任务特定的好。这进一步确认了:驱动迁移效果的关键因素不是"记忆跟任务有多像",而是"记忆有多通用"。
负迁移:当记忆帮了倒忙
这篇论文没有回避负迁移问题,坦率地讨论了三种负迁移模式:
- 领域不匹配锚定:结构上无关但表面相似的记忆作为误导锚点。比如一个C++的记忆被错误地匹配到R任务上,Agent就开始按C++的方式写代码。
- 虚假验证信心:验证类的记忆造成虚假确定感。Agent觉得自己"按记忆说的验证了",但实际上验证的是错误的东西,形成自我确认循环。
- 误用最佳实践转移:不加区分地套用"成功模式"。比如"合并训练和验证集"在某些ML任务里是合理策略,但在需要严格评估的场景里就是灾难。
Trajectory格式的负迁移尤其严重——论文里有个案例,Agent从MLGym-Bench迁移了一条Trajectory到别的任务,结果因为sparse参数在不同库里API不一样,直接运行报错。Agent死板地跟着低层命令走,完全不知道变通。
形式化:抽象-迁移权衡
论文附录里给了一个形式化的解释,把记忆嵌入分解为域不变分量\(z_{\text{inv}}\)(元知识)和域特定分量\(z_{\text{sp}}\):
迁移记忆\(m\)对目标任务\(x\)的效用:
抽象水平\(A\)定义为域不变分量的占比:
命题1:期望迁移增益随抽象水平\(A\)严格递增。换句话说,Insight中\(z_{\text{inv}}\)占比高、\(z_{\text{sp}}\)占比低,所以迁移效果好;Trajectory正好反过来。
这个形式化虽然模型比较理想化,但直觉是对的——迁移的收益来自元知识的指导,代价来自域特定信息的干扰。抽象程度越高,收益越大、代价越小。
记忆池规模和跨模型迁移
越多越好
论文还研究了记忆池规模对迁移效果的影响。从1/4池到全部池,平均性能持续提升。使用9个领域的记忆比6个领域更好。
这个结果不难理解——更大的记忆池意味着更多样的元知识,检索到"正好管用"的那条记忆的概率更高。跟RAG的scaling law一个道理:知识库越大,覆盖面越广,召回质量越高。
记忆可以跨模型迁移
这是一个实用的发现。用GPT-5-mini生成的Insight,给DeepSeek V3.2和Qwen3-Coder用,照样有提升:
| 源模型 → 目标模型 | LiveCodeBench | SWEBench | ReplicationBench | 平均 |
|---|---|---|---|---|
| Zero-shot → GPT-5-mini | 0.863 | 0.623 | 0.059 | 0.515 |
| DeepSeek V3.2 → GPT-5-mini | 0.890 | 0.617 | 0.048 | 0.518 |
| GPT-5-mini → GPT-5-mini | 0.877 | 0.633 | 0.119 | 0.543 |
| Zero-shot → DeepSeek V3.2 | 0.890 | 0.423 | 0.144 | 0.486 |
| GPT-5-mini → DeepSeek V3.2 | 0.890 | 0.450 | 0.163 | 0.501 |
| DeepSeek V3.2 → DeepSeek V3.2 | 0.893 | 0.463 | 0.178 | 0.511 |
两个方向都有效——强模型→弱模型、弱模型→强模型都有提升。但自生成记忆效果始终最好(同模型行列)。这说明元知识确实有模型无关性,但"自己总结的心得"总比"别人总结的"更好理解,这也很合理。
检索方法的反直觉发现
还有一个有意思的发现——简单的嵌入相似度检索,居然比LLM重排序和自适应重写都好:
| 检索方法 | LiveCodeBench | SWEBench | ReplicationBench | 平均 |
|---|---|---|---|---|
| No Memory | 0.910 | 0.730 | 0.111 | 0.584 |
| LLM Reranking | 0.920 | 0.730 | 0.144 | 0.598 |
| Adaptive Rewriting | 0.920 | 0.760 | 0.144 | 0.608 |
| Embedding Similarity | 0.930 | 0.770 | 0.189 | 0.630 |
我的第一反应是有点意外——通常LLM重排序在RAG系统里效果更好啊?但仔细想想,这个结果其实说得通。跨域检索的核心挑战是语义鸿沟——不同领域的任务描述差异很大,LLM重排序可能反而过度匹配了表面相似性,把那些"看起来像但实际不通用"的记忆排到前面。而嵌入相似度虽然粗糙,但在高维空间里更容易捕获到元知识层面的相似性。
不过说实话,这块我觉得还有优化空间。当前的检索是静态的——不管任务是什么,都用同样的策略。如果能根据任务特征动态选择检索策略(比如简单任务用嵌入、复杂任务用LLM重排序),可能会有更好的效果。论文自己也承认"跨域记忆检索本身就是个难题"。
我的判断
这篇论文的定位很清楚——不是要提出一个新的SOTA方法,而是做一个系统性的实证研究,搞清楚"记忆迁移到底怎么work"。从这个角度看,它做得很扎实。
三个亮点:
- 问题定义清晰。把"记忆迁移"从自我演化的框架里单独拎出来,设计了严格的跨域评估协议(排除同域记忆),让结果可信。
- 机理分析深入。不只是说"有用",而是拆解了迁移的是什么(元知识vs领域知识)、为什么抽象程度决定迁移效果、负迁移的三大模式。形式化的抽象-迁移权衡给了一个理论锚点。
- 实验覆盖全面。6个基准、3个模型、4种记忆格式、多种消融维度。431条记忆打败5899条的对比特别有说服力。
也有让我皱眉的地方:
- 3.7%的平均提升不算大。在Aider-Polyglot上甚至完全没提升。如果记忆迁移的上限就是这么个量级,那在工程落地上可能不够"痛"——部署跨域记忆池的成本(离线推理、存储、检索延迟)和收益之间的ROI需要仔细算。
- 记忆生成成本不低。要在6个基准上各跑一遍推理来生成记忆,这本身就需要不少API调用。论文没有讨论记忆生成的成本效率比。
- 检索方法的探索不够充分。简单嵌入>LLM重排序的结果很有意思,但只试了三种方法。如果用更精细的检索策略(比如按元知识类别分桶检索),效果可能更好。
对工程的启发:
如果你在做Coding Agent,而且已经在用某种记忆机制,这篇论文给你的直接建议是:
- 记忆格式选高层抽象的Insight,别用原始Trajectory
- 记忆池跨域共享,不要每个任务类型各管各的
- 元知识的提炼要任务无关化——"怎么验证"比"验证了什么"有价值得多
- 更大的记忆池更好,但质量比数量重要——431条好的记忆>5899条杂的记忆
如果你还没用记忆机制,MTL提供了一个低成本的起步方案——不需要训练、不需要改模型架构,只需要在推理时加一个检索+注入的步骤。
说到底,这篇论文的核心洞察其实可以用一句话概括:编程行为的元知识比编程内容的知识更有迁移价值。这跟人类工程师的经验完全一致——一个资深工程师换到新领域,带过去的不是具体的代码,而是"先理解再改、小步验证、避免大改"这些行为习惯。Agent也一样。
觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我