✨ 要点🔬 技术摘要
想象一下,你正在试图理解一座拥有十层楼之巨的庞大图书馆是如何运作的。
问题:“片段”陷阱 迄今为止,大多数针对 AI“代码大脑”的测试,都像是给它们展示书中孤立的单页,然后问:“这句话是什么意思?”虽然 AI 可能答对,但现实世界的软件并非单页,而是整座图书馆。要回答诸如“为什么日落时前门会自动上锁?”这样的问题,你需要穿过地下室,检查阁楼的布线,并阅读经理办公室里的蓝图。你必须跨越许多不同的文件来建立关联。
以往的 AI 测试之所以失败,是因为它们没有迫使 AI 进行这种“图书馆漫步”。它们仅测试了 AI 能否读懂单页。
解决方案:SWE-QA(图书馆导览) 本文作者构建了一项名为SWE-QA 的新测试。你可以将其视为针对 AI 的一次严格的“图书馆导览”考试。
资料来源 :他们并非凭空捏造问题。他们深入了 15 个真实且流行的软件“库”(GitHub 仓库),查阅了 77,000 个人类开发者实际相互提出的真实问题。
分类体系(地图) :他们将这些问题组织成一张地图。他们问道:我们是在问“这是什么”?“为什么要这样构建”?“代码藏在哪里”?还是“它是如何工作的”?
构建过程 :他们创建了 720 个高质量问题。要回答这些问题,AI 不能仅靠猜测。它必须:
找到正确的文件(就像找到正确的书架)。
阅读该文件中的代码。
跳转到另一个 文件,查看它们如何连接(多跳推理)。
综合出一个能解释整个系统的答案。
实验:测试 AI 图书管理员 研究人员选取了六个最智能的可用 AI 模型(如 GPT-5.1、Gemini 等),并让它们参加这场“图书馆导览”考试。他们通过三种不同的方式进行了测试:
“记忆者”(直接提示) :他们直接问 AI 问题,而不提供图书馆的书籍。
结果 :AI 惨败。这就像要求某人描述一座他们从未造访过的图书馆。
“索引查找者”(RAG) :他们给 AI 一个工具,在回答前先搜索相关页面。
结果 :好多了!AI 能够找到正确的页面,但有时会遗漏页面之间的关联。
“侦探代理”(代理框架) :他们给 AI 配备了一套“侦探工具包”(如 OpenHands 等工具),让它能够自主思考、搜索、阅读、再次搜索,并自行建立关联。
结果 :这是获胜者。像侦探一样行动、主动探索代码库的 AI 获得了最高分(约 100 分中的 70 分)。
发现:AI 能做什么与不能做什么
好消息 :AI 在解释“为什么”事物会以某种方式构建(设计原理)或“如何”实现特定功能方面表现越来越好,尤其是当解释清晰地写在代码注释中时。
坏消息 :AI 在“哪里”类问题(在 10 个文件中精确定位某个特定变量的定义位置)以及需要追踪长依赖链的复杂“什么”类问题上仍然感到吃力。这就像 AI 能理解图书馆的故事,但在试图寻找后门的具体钥匙时有时会迷路。
代价 :“侦探”方法效果最好,但代价高昂。它消耗的算力(token)是单纯猜测的 100 倍。这就像快速一瞥与全面法医调查之间的区别。
结论 本文引入了一项更新、更难、更贴近现实的 AI 测试。它表明,虽然 AI 在理解软件方面前景广阔,但在驾驭现实世界代码复杂且相互关联的特性时,仍需辅助。最佳成果来自于能够主动“漫步”通过代码文件的 AI 代理,而不仅仅是阅读单个片段。
简而言之 :我们构建了一项更难的测试,以观察 AI 是否真的能理解整个软件项目,而不仅仅是其中的一小部分。AI 正在进步,但要解决最棘手的谜题,它仍需一张好地图和侦探般的思维。
以下是论文《SWE-QA:语言模型能否回答仓库级别的代码问题?》的详细技术总结:
1. 问题陈述
当前的大语言模型(LLMs)在代码理解方面已展现出潜力,但现有的基准测试(如 CoSQA、CodeQA)主要集中于孤立的代码片段、函数或 API。这些设置未能捕捉现实世界软件工程中的复杂性,开发者必须:
导航跨越多个文件的大型、互联代码库。
理解软件架构和设计原理。
追踪长程依赖关系并执行多跳推理。
综合架构知识以回答复杂的“为什么”和“如何”类问题。
目前缺乏高质量、经人工验证的基准测试,用于评估 LLMs 在仓库级别 问答(QA)中的表现,这类任务需要深度的多文件上下文和结构理解。
2. 方法论:SWE-QA 基准构建
作者提出了SWE-QA ,这是一个仓库级别的代码 QA 基准,通过包含 15 个多样化 Python 仓库(12 个来自 SWE-Bench,3 个来自 SWE-Bench-Live)的四阶段流程(图 2)构建而成。
A. 种子收集与分类体系构建
数据源: 从 12 个热门仓库爬取了 77,100 个 GitHub 问题(Issues)。
过滤: 筛选出 41,955 个内容充实(>1,000 字符)的问题,并利用 LLM 提取出 127,415 个显式的代码相关问题。
分类体系: 两位拥有 3 年以上经验的人类专家手动分析了 1,000 个采样问题,创建了一个两级分类体系 :
一级(疑问词): What(什么)、Why(为什么)、Where(哪里)、How(如何)。
二级(意图): 12 个细粒度类别(例如:依赖追踪、设计原理、功能定位、算法实现)。
分布: “如何”类问题(35.2%)和“哪里”类问题(28.4%)最为频繁,反映了对过程性和位置性知识的需求。
B. 问题实例化
上下文提取: 使用 tree-sitter 将仓库结构解析为类型化图(节点:类、方法、文件;边:调用、导入)。
生成: 选择焦点元素(例如特定类),将其结构上下文与源自分类体系的种子模板 相结合。
过程: LLM 生成针对特定仓库定制的候选问题,确保它们需要多跳推理,且无法通过简单检索回答。
C. 答案收集与验证
RAG 流程: 使用检索增强生成(RAG)方法生成答案,检索相关的代码片段、文档和元数据。
人在回路(Human-in-the-Loop):
专家修订: 两位高级开发人员使用 Cursor 等工具审查每个答案的事实准确性、完整性和清晰度。分歧由第三位专家解决。
质量过滤: 如果问答对存在歧义、事实错误或缺乏足够的代码依据,则予以丢弃。
最终数据集: 720 个高质量 QA 对(每个仓库 48 个),涵盖 13,300 个文件和超过 340 万行代码。
3. 主要贡献
SWE-QA 基准: 一个包含 720 个人工验证 QA 对的仓库级别 QA 基准,跨越 15 个 Python 仓库。它独特地结合了多跳推理 、跨文件依赖 和架构理解 。
灵活的生成流程: 一个模块化框架,允许利用种子模板和静态代码分析,为任何新的开源仓库半自动创建 QA 数据集。
全面评估: 对各种上下文增强策略(直接提示、RAG、智能体框架)下的 LLMs 进行了严格评估。
4. 实验结果
作者使用不同策略评估了六个先进的 LLMs(包括 GPT-5.1、Gemini 2.5 Pro、GLM-4.6 和 Qwen3-Coder):
上下文增强的影响:
直接提示: 表现不佳(例如,Kimi K2 得分约为 51/100),突显了仓库上下文的必要性。
RAG(滑动窗口/函数分块): 显著提升了性能(例如,+10–14 分)。
智能体框架(OpenHands, SWE-agent): 通过启用迭代推理和工具使用取得了最佳结果。OpenHands 配合 GPT-5.1 取得了 70.79/100 的最高分。
模型性能:
GPT-5.1 和 GLM-4.6 (配合 OpenHands)领先。
较小模型(如 Qwen3-30B)在智能体框架中表现挣扎,表现与 RAG 相当或更差,表明其在长期记忆和工具规划方面存在局限性。
商业工具(Cursor、通义灵码)表现具有竞争力(69–70 分),验证了端到端工具增强解决方案的有效性。
分类体系分析:
模型在 “为什么” 类问题(设计原理)和关于 API 支持的 “如何” 类问题上表现优异,这些信息通常明确存在于文档字符串中。
模型在 “什么” (架构探索)和 “哪里” (功能定位)类问题上表现挣扎,这些问题需要跨文件重构分散的逻辑。
跨仓库泛化:
性能因仓库复杂度而异。"Flask" 最容易(75.42),而 "Pylint"(62.01)和 "Conan"(64.51)最具挑战性。
来自 SWE-Bench-Live 的仓库(数据泄露较少)比来自 SWE-Bench 的仓库更难。
5. 意义与未来方向
现实评估: SWE-QA 超越了片段级测试,评估现实世界软件工程任务所需的“整个仓库”理解能力。
智能体框架: 结果表明,虽然 RAG 有帮助,但基于智能体的框架 目前是在导航复杂的多文件代码库方面最有效的方法,尽管其 Token 成本更高。
局限性: 该基准目前仅限于 Python 且基于静态快照。未来工作旨在扩展到其他语言以及动态演进的仓库。
开放挑战: 论文强调,LLMs 在深度依赖追踪和精确的位置推理方面仍存在困难,表明需要更好的代码图集成和推理能力。
论文结论指出,虽然 LLMs 在仓库级别 QA 方面展现出潜力,特别是在配合智能体增强时,但在处理复杂的多跳依赖关系和架构推理方面仍面临重大挑战。
每周获取最佳 computer science 论文。
受到斯坦福、剑桥和法国科学院研究人员的信赖。
请查收邮箱确认订阅。
出了点问题,再试一次?
无垃圾邮件,随时退订。