AI大揭秘:各组织 LLM 攻克真实世界中的 Bug,能力如何?
关注我,每天收获一个新技能!
LLM 在实际软件开发中面临的挑战 跨文件编辑的软工问题 AI 修Bug 的评测方法与步骤 截止 2024.06.30 ,各大语言模型能力评测结果
1
大语言模型在解决实际软件工程问题方面面临以下挑战:
处理长上下文:需要理解和处理包含大量代码和文件的复杂代码库,从中找出与问题相关的部分
跨文件编辑:解决问题可能需要在多个文件和函数中进行编辑,而不仅仅是在单个函数或类中
理解问题描述:准确理解问题描述并将其转化为具体的代码修改。
处理多样化的问题:每个问题都可能具有独特的特点和挑战,需要模型具备广泛的知识和技能。
适应新问题:能够处理训练数据中未出现过的新问题。
与执行环境交互:需要与代码库的执行环境进行交互,以验证解决方案的正确性。
生成可靠的解决方案:解决方案需要通过严格的测试,确保其正确性和稳定性。
处理大型代码库:大型代码库中的代码可能存在复杂的依赖关系和交互,增加了解决问题的难度。
理解代码风格和逻辑:遵循代码库的代码风格和逻辑约束,生成符合要求的解决方案
2
跨文件编辑的软件工程问题的常见类型包括但不限于以下几种:
修改多个文件中的函数:需要在不同文件中的函数中进行代码修改。
修改多个文件中的类:涉及到对多个文件中的类进行修改。
修改多个文件中的代码结构:可能需要调整多个文件中的代码结构。
处理文件之间的依赖关系:需要考虑不同文件之间的依赖关系,确保修改不会导致其他问题。
跨文件的错误修复:修复一个错误可能需要在多个文件中进行相应的修改。
跨文件的功能添加或修改:添加或修改某个功能可能需要在多个文件中进行相关的代码更改。
跨文件的代码重构:对代码进行重构以提高其可读性、可维护性等,可能涉及到多个文件的修改
3
SWE-bench 是一个专门用于评估语言模型在解决真实世界软件工程项目问题方面能力的基准。它包含了从真实 GitHub 的代码库以及其中提取的 2294 个软件工程问题。
1. 在评估过程中,接受评测的大语言模型会接收到一个问题文本描述和一个完整的代码库。模型的任务是对代码库进行编辑以解决问题。编辑通常以补丁文件的形式表示,指定要修改的代码行。
2. 评估的指标是解决问题的百分比。如果生成的补丁能够成功应用到代码库中,并且所有相关的测试都通过,那么就认为问题得到了解决。
3. 通过使用 SWE-bench 基准和上述评估方法,可以对语言模型在跨文件编辑软件工程问题方面的表现进行评估和比较。
SWE-bench 旨在提供一组多样化的代码库问题,这些问题可通过仓库内的单元测试进行验证。完整的 SWE-bench 测试拆分包括 12 个 Python 存储库中的 2,294 个问题提交对。
4
自发布以来,我们发现对于大多数在 SWE-bench 上进行评估的系统而言,运行每个实例都需要花费大量时间和计算。我们还发现 SWE-bench 可能是一个特别困难的基准,这对于长期评估 LM 很有用,但对于试图在短期内取得进展的系统来说却令人沮丧。
为了解决这些问题,我们发布了 SWE-bench 的典型子集,称为 SWE-bench Lite。
SWE-bench Lite 包含 300 个实例,这些实例经过抽样以更加独立,重点是评估功能性错误修复。SWE-bench Lite 涵盖了 SWE-bench 中原有的 12 个存储库中的 11 个存储库,其存储库多样性和分布与原版相似。
我们建议未来在 SWE-bench 上评估的系统在必要时报告 SWE-bench Lite 上的数字,而不是完整的 SWE-bench 集。您可以在SWE-bench/swebench/collect/make_lite中找到有关如何创建 SWE-bench Lite 的源代码。
以下是我们用于选择 SWE-bench Lite 实例的一般标准列表:
我们删除了带有图像、外部超链接、对特定提交 sha 的引用以及对其他拉取请求或问题的引用的实例。
我们删除问题陈述中少于 40 个单词的实例。
我们删除了编辑多个文件的实例。
我们删除了黄金补丁中有超过 3 个编辑块的实例(参见补丁)。
我们删除创建或删除文件的实例。
我们删除包含带有错误消息检查的测试的实例。
最后,我们从剩余的实例中抽取了300个测试实例和23个开发实例。
5
SWE-Bench:
SWE-Bench Lite: