MemCoder — code agent 跟着你 git commit 一起成长
待复核MemCoder 是一种让 code agent 从你 git commit 历史里学习”意图 → 代码”映射的训练方法。日常类比:你刚入职新公司,资深同事不是给你一本厚厚的代码规范,而是把过去半年所有 PR 链接发给你说”看这些就行”。MemCoder 让 agent 也从这些”实际改动”里学。
之前 code agent 训练用的语料主要是代码静态快照——某一时刻仓库长什么样。问题是这种快照丢失了演化信息:为什么这一行改了?修了什么 bug?issue 链接在哪?这些”为什么”都在 commit message + diff 里,传统方法用不上。
MemCoder 的解法:从 commit history 蒸馏结构化记忆条目(论文里是 sextuple:issue / commit / keywords / problem / root cause / solution),抓住「意图 → 改法」映射。配合自精炼(self-refinement,verification feedback 实时纠错)和经验内化(experience self-internalization,把人验证过的方案沉到长期知识),agent 能持续随项目演化。
不理解 MemCoder,下面这些事都没法解释:
- 为什么 code agent 在 SWE-bench 这类”基于真实 issue”的 benchmark 上表现远不如静态生成
- 为什么团队个人化的 code style 老 agent 学不会——快照里没”为什么这样写”
- 为什么 commit message 这种”看似冗余”的字段是 agent 训练的金矿
- 为什么 self-refinement + verification 是 code agent 区别于一般 agent 的关键——code 有 ground truth(执行结果)
MemCoder 的运作分 三个阶段:
-
Intent-to-code 蒸馏:扫 git log + 相关 issue,用 LLM 把每次改动压成结构化条目(问题是什么、根因、怎么改)。类比:把每次 PR 整理成一张带标签的 flashcard,而不只是裸 diff。
-
Self-refinement(实时):agent 写代码后跑 test / lint / type check,Refining Sub-agent 给 checklist 反馈,再改一版。这套循环每次任务都跑。类比:交作业前自己先跑一遍。
-
Experience self-internalization(长期):被 human 验证通过的解法再写回长期记忆,之后遇到类似 intent 能 recall。类比:考试错题本——做过的题变成本能。
三层加起来叫 co-evolution:项目演化 → MemCoder 学新模式 → agent 能力提升 → 帮你 ship 下一批 commit。
案例 1:从 commit 蒸馏到检索(可跟读)
Section titled “案例 1:从 commit 蒸馏到检索(可跟读)”# 1) 蒸馏:commit + issue → 结构化记忆条目raw = git.show("8f3c91a") + linked_issuememory_entry = llm.distill(raw) # problem / root_cause / solution / keywordsstore.add(memory_entry)
# 2) 新任务到来:双阶段检索相关经验hits = retrieve(new_issue, store) # FAISS + rerank
# 3) Self-refinement:写补丁 → 生成 checklist/test → 再改patch = agent.edit(repo, new_issue, hits)feedback = refine_subagent.verify(patch)patch2 = agent.edit(repo, new_issue, hits, feedback)
# 4) 人验证通过后内化if human_ok(patch2): store.internalize(new_issue, patch2)下次再遇到「空 list 上 .reduce」类问题,会优先召回「加 initial value」这类历史解法——这就是项目风格的 implicit 学习。
案例 2:SWE-bench Verified 上的 +9.4pp
Section titled “案例 2:SWE-bench Verified 上的 +9.4pp”论文数字(DeepSeek-V3.2 backbone):
- 无 MemCoder(w/o all):resolved rate 68.4%(342/500)
- 完整 MemCoder:77.8%(389/500)→ +9.4 percentage points
提升主要来自结构化经验检索,而不是把 base model 换大。消融里检索相关模块贡献了大部分增益;self-refinement 仍有帮助但幅度更小。
案例 3:和 RAG-on-codebase 的对比
Section titled “案例 3:和 RAG-on-codebase 的对比”| 维度 | RAG over code | MemCoder |
|---|---|---|
| 检索单元 | 代码 chunk | 结构化经验条目(含根因/解法) |
| 时序信息 | 无 | 有(commit / issue 历史) |
| 验证机制 | 无 | self-refinement + 人验证内化 |
| 个人化 | 弱(同一仓库一套) | 强(按仓库演化轨迹定制) |
| 训练成本 | 0 | 蒸馏 + 检索索引 |
| 适合场景 | 大型 monorepo 查找 | 真实 issue 修复、长期共演化 |
RAG 是 lookup 一段代码,MemCoder 是 lookup 一段「当时为什么这么改」。
案例 4:记忆会膨胀,淘汰并不靠关键词魔法
Section titled “案例 4:记忆会膨胀,淘汰并不靠关键词魔法”项目早期用 callback,后来全面换成 async/await。旧条目仍可能被检索到。论文对比了 MemoryBank 一类「遗忘曲线衰减」做法,但 MemCoder 自己走的是扁平记忆 + 检索筛选 + 人验证后才内化——不是简单按 “deprecated” 关键词自动降权。工程上仍要自己决定:索引何时重建、过时 PR 是否剔除。
- commit message 噪声多:很多 commit 写”update”, “fix bug” 这种空话,蒸馏出来 intent 信号弱;论文用 LLM 重写 message,但成本不低,每万条 commit 大概要花上百美元 API 费。
- diff 跨文件时 intent 难提取:大型 refactor 一个 commit 改 10 个文件,“intent” 很难单一定义;论文目前按 file 拆分但仍粗糙,复杂 refactor 蒸馏质量打折。
- verifier 信号传播过快导致过拟合:self-refinement 每次都依赖 test 反馈,agent 可能学到”只对当前 test 优化”——遇到没覆盖的边界又错。
- 历史经验和当前最佳实践冲突:旧解法仍在索引里时,检索可能召回过时模式;需要定期重建索引或人工淘汰,单靠「自动衰减」不够。
适用 vs 不适用场景
Section titled “适用 vs 不适用场景”适用:
- 长寿项目(git 历史 > 1 年)的 code agent
- 有清晰 PR review 文化的团队——commit message 质量高
- SWE-bench / 真实 issue 修复类任务
- 需要保留团队 code style 的场景
- 个人开发者想要”懂自己习惯”的 AI pair programmer
不适用:
- 新项目(commit < 50 个)——历史不够蒸馏
- commit message 质量差的项目——garbage in garbage out
- 需要严格隔离(如多客户代码)——不能跨项目共享 memory
- 离线 / sandbox 环境——self-refinement 跑不了 test
- 项目频繁推翻重构——历史经验失效快,蒸馏成本不划算
历史小故事(可跳过)
Section titled “历史小故事(可跳过)”- 2022:Codex 发布,code generation 进入 LLM 时代
- 2023:SWE-bench 提出,把 agent 评测放到真实 issue 上
- 2024:Aider / Cursor / Devin 等 code agent 工具流行,但训练靠 SFT
- 2025:long-term memory for agent 论文涌现(evo-memory-2511 等)
- 2025 末:SWE-bench Verified 让”真实 issue”评测更严格,纯 SFT agent 上限明显
- 2026:MemCoder 首次把 commit history 当 self-evolving 数据源,SWE-bench 拿 +9.4pp
- 代码 agent 训练的金矿是 git history,不只是代码本身
- intent 这层语义在 commit message 里,但需要 LLM 重写降噪
- self-refinement 配合 verifier 是 code agent 比一般 agent 更稳的关键
- 个性化 / 项目化 agent 不一定要重训——结构化记忆 + retrieval 也行
- co-evolution 概念:agent 不是”训练完部署”,而是和项目一起成长
- 记忆会过时:内化门槛 + 索引维护,比关键词降权更贴近论文做法
- arXiv 2603.13258 — MemCoder 原论文
- SWE-bench Verified — 评测 benchmark
- evo-memory-2511 — agent long-term memory
- code-as-agent-harness — code agent 框架综述
- self-evolving-agents-survey — co-evolution 在综述里属于”data-driven evolution”
- DeepSeek-V3.2 — baseline base model
- Aider 项目 README — 工业级 code agent 设计参考
- evo-memory-2511 —— long-term memory 的另一种实现
- code-as-agent-harness —— code agent 框架,MemCoder 可以接入
- self-evolving-agents-survey —— MemCoder 是 co-evolution 范式代表
- apex-policy-exploration —— policy 演化层面与 co-evolution 互补
- eve-agent-evidence —— commit message 是另一种 evidence span
- agent-r1-2511 —— RL training 与 memory 蒸馏可以叠加
- exg-experience-graphs —— 经验图谱与 MemCoder 的结构化记忆同源
- agent-r1-2511 —— Agent-R1 — 把 LLM agent 当 RL 环境训练的模块化框架
- eve-agent-evidence —— EVE-Agent — 自我训练前先把证据钉在桌上
- exg-experience-graphs —— EXG 经验图 — 把 agent 的成败拼成一张可复用的关系图
- self-evolving-recsys-2602 —— Self-Evolving RecSys — 让 LLM agent 自己跑超参实验上线
- self-evolving-software-agents —— BDI-LLM Self-Evolving Agents — 让 agent 自己改自己源代码