ARTICLE · 995631
XAgent:AI改代码,别再信Issue描述了
一个开发者给开源项目提了个bug报告。描述里写得很清楚:调用on_changed回调的时候页面崩了。
AI修bug工具读完报告,定位到on_changed函数,改了几行,提交。问题看起来解决了。
但真正的缺陷不在on_changed里。它在delaxes函数里,深埋在调用链中,Issue描述里压根没提过这个函数。AI改完的补丁只是让表面症状消失了,底层问题还在,只是转移到了另一条没被测试覆盖的路径上。
墨尔本大学的Hieu Huynh、Patanamon Thongtanunam等研究者把这个现象叫“症状修复陷阱”。修的是报告里看得见的东西,不是真正出问题的地方。
现有工具的毛病出在哪?它们太依赖Issue描述了。LLM读完描述,关键词一锚定,就直奔描述里提到的那个函数去了。但写Issue的人不是代码作者,他们只知道“用户点这里会崩”,不知道“底层哪个函数挂了”。描述是症状,不是病因。
这里有个更深的问题,值得单独拎出来说:Issue描述本身不是信息不完整,是信息方向就错了。
写报告的人被自己的观察所限——他们看到的崩溃点、报错信息、复现步骤,都是运行时链条末端的表现。但缺陷可能在链条上游很远的某个函数里,经过七八层调用后才以某个异常的形式暴露出来。描述里每个词都在锚定你的注意力,把你往错误的方向拉。
XAgent的做法是:不听描述怎么说,看代码怎么跑。
它先把Issue里的复现步骤还原成两个脚本。一个触发bug,一个展示预期正确行为。两个脚本结构尽量接近,输入差异最小化。跑这两个脚本,分别记录函数调用树——哪个函数调了哪个函数,整个调用链长什么样。
接下来是关键一步。用树编辑距离算法比较两棵调用树,找出差异。匹配上的节点是正常执行的,只在缺陷树里出现的节点——叫“Deletions”——才是嫌疑对象。
Matplotlib那个案例里,缺陷树的调用链有756个函数,正常树有758个。对比下来只有15个函数是缺陷执行独有的。从756个里找问题,和从15个里找问题,难度差了两个数量级。
再用UniXcoder把Issue描述、函数体、函数名编码成向量,算余弦相似度,对候选函数排序。Issue描述里显式提到的函数即使没进候选集,也会被强制加入。最后的补丁生成只在这个小范围内进行。
但这还不够。光定位准没用,还得防止“改对了地方但改坏了别处”。
XAgent在验证环节加了一个上下文感知的测试增强器。它不依赖Issue描述来生成测试,而是从执行轨迹里提取程序上下文,生成边界用例测试和相关组件测试。
Seaborn那个案例挺典型。Issue描述只报了pairplot崩溃,现有方法只验证pairplot修没修好。但pairplot和scatterplot、histplot共享同一套内部逻辑。XAgent的增强器会额外生成测试,验证这几个相关绘图函数的行为有没有被补丁破坏。
结果怎么样?SWE-bench-lite解决率62.0%,函数定位准确率72.8%,单Issue成本约1.56美元,比此前SOTA便宜37%。额外解决了7个此前所有最强基线都失败的问题。
消融实验显示,执行引导的定位和上下文感知测试增强器,两个设计各自独立有效,组合使用效果叠加,最高带来9%的相对性能提升。
1.56美元这个数字值得单独看一眼。
过去自动化代码修复一直停留在学术论文里,迟迟没有大规模商业化,一个核心原因就是成本。每次修复要调用多次大模型推理,单次成本动辄几十美元。企业算一笔账:雇一个工程师修bug,时薪大概几十到几百块;用AI修,每次几十美元还不一定修对。这个账算不过来。
1.56美元意味着什么?意味着AI修一个bug的边际成本,已经低于一个初级工程师十分钟的工时费。这不是技术指标的提升,是商业可行性的临界点被跨过去了。
对国内软件行业的含义比“又一个benchmark刷分”要具体得多。
大厂内部的代码维护,值班工程师从日志、监控、trace里倒推问题位置,平均耗时几十分钟到几小时。一个能自动跑复现脚本、对比调用树、生成增强测试的工具,可以把“找问题”这件事从人脑里挪到机器上,成本还不到两美元一次。
软件外包行业更直接。项目交接频繁、代码库陌生、交付周期紧。一个外包团队接手别人的代码库,光是搞明白模块关系就要花掉大量时间。这种工具如果产品化,交付效率的提升是实打实的。
开源社区也适用。国内开源项目越来越多,维护者精力有限。一个能自动定位Issue相关代码并生成验证补丁的Agent,可以帮维护者快速判断“这个问题该改哪里”,降低社区贡献门槛。
XAgent最核心的判断其实不在技术层面。它说的是:在仓库级代码修复这件事上,运行时行为比静态描述更可靠。
但这背后还有一层更根本的东西——Issue描述本身就是噪声源。写描述的人看到的是症状,他们的语言被症状锚定,而缺陷藏在调用链里。现有的所有方法都在“更聪明地理解描述”,XAgent在说“别读了,直接跑”。
这个判断对国内做AI编程工具的团队有直接参考价值。2026年国内AI编程助手市场在快速膨胀,字节的Trae、阿里的通义灵码、腾讯的CodeBuddy都在抢入口。但大多数产品的核心能力还停留在“根据描述生成补丁”这个层面。XAgent揭示的是:当描述本身就不准确的时候,生成能力再强也没用。
先跑,再看,最后改。
这个顺序比“先读,再猜,最后改”靠谱得多。
arXiv:https://arxiv.org/abs/2609.09769