为什么 AI 编程智能体会失败:文件与代码行之间的关键差距
虽然 AI 编程智能体在解决软件漏洞方面的能力日益增强,但一项新研究表明,它们正面临严重的“定位”问题。它们可以在庞大的代码库中导航到正确的文件,但却经常无法识别出实现修复所需的特定代码行。
介绍 SWE-Explore:超越修复率
从历史上看,AI 编程智能体的有效性一直通过单一的二元指标来衡量:智能体是否修复了漏洞?这种方法忽略了失败背后的“原因”。修复失败可能意味着智能体编写了错误的补丁,也可能意味着智能体根本没有查看相关的逻辑。
为了解决这一盲点,一个包括上海交通大学科学家在内的国际研究团队开发了 SWE-Explore。与传统的基准测试不同,SWE-Explore 隔离了上游搜索阶段。它评估智能体根据漏洞描述返回与问题实际相关的特定代码段排序列表的能力。该数据集非常广泛,涵盖了来自 203 个开源项目和 10 种编程语言的 848 个任务,其中 Python 最为突出(547 个任务)。
精准度差距:文件级成功 vs. 行级失败
该研究最引人注目的发现是文件级准确率与行级准确率之间的巨大差异。在针对 Claude Code、Codex 和 OpenHands 等通用智能体进行测试时,结果非常具有启发性:
- 文件级准确率: 智能体表现良好,能够成功识别正确的源文件并给予高排名。
- 行级准确率: 性能大幅下降。通用编程智能体仅覆盖了对修复至关重要的实际代码行的 14% 到 19%。
有趣的是,仅仅升级底层的大语言模型 (LLM) 并不能解决这个问题。无论使用来自 OpenAI、Anthropic、Google、Moonshot 还是 Zhipu 的模型,模式都是相同的:文件命中率很高,但代码行覆盖率极低。研究指出,像 CoSIL 这样的专门系统通过将代码视为互连构建块的网络,表现优于通用智能体,这表明架构层面的改进比单纯提升模型能力更为重要。
阈值效应:为什么“阅读更多”至关重要
通过受控消融实验,研究人员发现了关于上下文的“阈值效应”。通过改变提供给模型的核心代码量(从 0% 到 100%),他们发现修复效果并非线性提升。
对于较简单的任务,存在一个明显的临界点:如果智能体看到的必要核心区域少于 50%,修复成功率将接近于零。只有当智能体能够获取 50% 到 75% 的所需上下文时,修复成功率才会出现显著跃升。至关重要的是,研究发现,提供无关的“噪声”代码对性能的损害并不像缺失关键代码行那样严重。对开发者的启示很明确:在 AI 智能体时代,提供更多的上下文,远比冒着过滤掉关键细节的风险要好。
核心结论
- 定位是瓶颈: AI 智能体擅长找到正确的文件,但在精确锁定修复所需的特定代码行方面却面临巨大挑战。
- 模型规模化并非万灵丹: 升级到更强大的 LLM 并不能解决行级准确度的差距;像 CoSIL 这样专门的架构方法更为有效。
- 50% 上下文规则: AI 修复成功遵循阈值模式,需要至少 50-75% 的相关代码上下文可见,成功的修复才变得有可能。