跳转到内容

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 的运作分 三个阶段

  1. Intent-to-code 蒸馏:扫 git log + 相关 issue,用 LLM 把每次改动压成结构化条目(问题是什么、根因、怎么改)。类比:把每次 PR 整理成一张带标签的 flashcard,而不只是裸 diff。

  2. Self-refinement(实时):agent 写代码后跑 test / lint / type check,Refining Sub-agent 给 checklist 反馈,再改一版。这套循环每次任务都跑。类比:交作业前自己先跑一遍。

  3. 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_issue
memory_entry = llm.distill(raw) # problem / root_cause / solution / keywords
store.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 仍有帮助但幅度更小。

维度RAG over codeMemCoder
检索单元代码 chunk结构化经验条目(含根因/解法)
时序信息有(commit / issue 历史)
验证机制self-refinement + 人验证内化
个人化弱(同一仓库一套)强(按仓库演化轨迹定制)
训练成本0蒸馏 + 检索索引
适合场景大型 monorepo 查找真实 issue 修复、长期共演化

RAG 是 lookup 一段代码,MemCoder 是 lookup 一段「当时为什么这么改」。

案例 4:记忆会膨胀,淘汰并不靠关键词魔法

Section titled “案例 4:记忆会膨胀,淘汰并不靠关键词魔法”

项目早期用 callback,后来全面换成 async/await。旧条目仍可能被检索到。论文对比了 MemoryBank 一类「遗忘曲线衰减」做法,但 MemCoder 自己走的是扁平记忆 + 检索筛选 + 人验证后才内化——不是简单按 “deprecated” 关键词自动降权。工程上仍要自己决定:索引何时重建、过时 PR 是否剔除。

  1. commit message 噪声多:很多 commit 写”update”, “fix bug” 这种空话,蒸馏出来 intent 信号弱;论文用 LLM 重写 message,但成本不低,每万条 commit 大概要花上百美元 API 费。
  2. diff 跨文件时 intent 难提取:大型 refactor 一个 commit 改 10 个文件,“intent” 很难单一定义;论文目前按 file 拆分但仍粗糙,复杂 refactor 蒸馏质量打折。
  3. verifier 信号传播过快导致过拟合:self-refinement 每次都依赖 test 反馈,agent 可能学到”只对当前 test 优化”——遇到没覆盖的边界又错。
  4. 历史经验和当前最佳实践冲突:旧解法仍在索引里时,检索可能召回过时模式;需要定期重建索引或人工淘汰,单靠「自动衰减」不够。

适用:

  • 长寿项目(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
  • 项目频繁推翻重构——历史经验失效快,蒸馏成本不划算
  • 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 设计参考