📌 系列导航:🔥 日报 · 📚 周报 · 📡 技术雷达 · 📄 论文精读 · 📮 情报站

论文信息

项目内容
日期2026-09-30
论文Do Coding Agents Reuse Existing Code or Reinvent the Wheel?
作者Dongsheng Ma, Sizhe Wang, Xinyi Huang, Zhengren Wang 等(北大、复旦、清华、上交、港中深、中关村学院)
链接arXiv:2609.35357
代码未公开(Work In Progress)

一句话总结

论文提出 RepoReuse 多轮仓库级基准,审计发现编码 Agent 随轮次推进越来越不爱复用代码:到第 5 轮,50.8% 的任务链留下重复实现,而通过率几乎不动。

解决什么问题

编码 Agent 已大规模进入真实仓库做迭代开发,但现有评估(HumanEval、MBPP、SWE-bench)几乎只测"测试过没过"。可维护性同样关键:每次重复造轮子意味着一个 bug 要修两遍、接口漂移、后续代码越堆越多。更麻烦的是速度不对称——Agent 写代码远快于人审代码,冗余在无人监督下加速堆积。已有工作要么只到函数级,要么单轮,没有一个能在真实仓库的多轮迭代里逐步测量"复用行为"。

核心方法

基准设计:真实成熟 Python 仓库上多轮开发,需求逐轮揭示,工作区累积(Agent 前几轮写的代码也成为仓库一部分,构成"自我复用"目标)。

全自动构建流水线(无人工参与):

  1. AST 静态分析建全仓库依赖图(函数为节点、调用为边),内部符号为起点;
  2. 强模型(GPT-5.6 Sol)在依赖图上做引导式游走收集证据包,第 2 轮起从上一轮产物出发,并注入邻近未用符号防退化;
  3. 任务合成:需求描述绝不点名任何符号(防止退化为字符串搜索);参考解必须真实调用证据模块;测试期望值来自参考解的实际运行结果而非模型口述;
  4. 独立审计重装重跑全部测试后才交付。

指标体系(沿 Agent 工作流展开):

  • reuse_repo / reuse_self:提交是否通过真实调用边使用目标(AST 判定);
  • recall(上游):本轮读了多少目标源码,区分"没读"与"读了没用";
  • C_dup(下游):目标未被调用但逻辑被大部分重写的结构冗余计数。

实验结果

对 3,000+ 轮开发的审计发现:

  • 探索退化:第 1 轮平均读 83.6% 的相关仓库代码,第 5 轮只剩 35.4%;
  • “看见却不用”:对自己历史代码的 recall 几乎饱和,但 self-reuse 仍从 83.9% 衰减到 69.1%;消融显示完整给出历史源码与不给记忆效果几乎一样——瓶颈不是信息可及性,而是 Agent 复用既有代码的"倾向";
  • 冗余堆积:含跨轮重复实现的任务链从第 1 轮 13.8% 升至第 5 轮 50.8%,同时通过率几乎不动。

深层洞察

这篇论文的锋利之处在于揭示了评估的结构性盲区:以通过率为中心的评估永远看不见这类缺陷——Agent 一轮轮"正确地"解题,代码库却一轮轮变脏。它把复用决策拆成"探索→执行→后果"三个可测量环节,其中"看见却不用"是最反直觉的发现:问题出在模型的倾向(disposition),而非上下文或检索。这对整个 Agent 评估范式是个警告:功能正确性只是代码质量的一半。

局限性

  • 限于 Python 单语言;
  • Work In Progress,基准未公开,第三方复现受限;
  • 构建流水线依赖 GPT-5.6 Sol 做证据收集与任务合成,存在强模型先验引入的偏差可能;
  • 未提出改进方案(如复用奖励、上下文工程),只做审计。

工程实践启示

  • 别只看测试绿不绿:把代码复用率、重复实现检测纳入 Agent 产出的 CI 审计;
  • 多轮长任务里主动管理上下文:随轮次重置/重注入仓库地图与关键接口摘要,对抗探索退化;
  • “给更多上下文"不解决问题——把复用倾向做进 prompt(强制先检索既有实现再动手)或做进训练信号才是方向;
  • 冗余有复利效应:早期一次重复实现,后续每轮都在为其付利息,长周期任务要尽早做重构检查。