Rover: Context-aware Conflict Resolution with LLM
Rover 是一种新颖的冲突解决系统,它通过集成程序分析与多层代码属性图来生成上下文感知的提示,从而在准确解决复杂代码合并冲突方面优于现有工具。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你和一个朋友正在同时编辑同一本食谱。你决定在汤里加一撮盐,而你的朋友决定加一杯糖。当你尝试合并这两个版本时,食谱会感到困惑:“我们到底加盐?加糖?还是两者都加?或者都不加?”这就是合并冲突。
在软件世界中,数百万开发者每天都在做这件事。通常,计算机会尝试自动解决这些冲突,但它们经常出错,因为它们只查看紧邻的文本行,而忽略了整体情况。如果你在某个文件中更改了一个变量名,它可能会破坏另一个完全不同文件中的函数。标准工具无法“看到”这种关联。
现在介绍Rover,这是一款专为解决此类冲突而设计的全新工具,堪称终极“超级编辑器”。以下是它的工作原理,通过简单的类比来说明:
1. 问题所在:“盲目”的编辑器
想象一个机器人试图在一本小说中修正拼写错误。如果机器人只查看包含拼写错误的那个句子,它可能会修正拼写,却意外破坏整个段落的含义,因为它不知道那个角色在前三章本该做什么。
当前的工具就像这个机器人。它们只查看冲突行及其紧邻的几行。它们忽略了“远距离”的关联,例如在文件 A 中定义但在文件 B 中使用的函数。
2. 解决方案:Rover 的“超级地图”(MtCPG)
Rover 不仅仅阅读文本;它构建了一个多层代码属性图(MtCPG)。
你可以将其想象成整个软件项目的一张巨大、互动的地铁地图。
- 标准工具只查看事故发生的那条街道。
- Rover 的地图则展示了每一个站点、每一条轨道,以及不同线路之间的所有连接,即使它们位于不同的城市(文件)中。
这张地图追踪:
- 谁在与谁对话:如果一个文件中的函数调用了另一个文件中的变量,地图会在它们之间画出一条线。
- 层级结构:它知道某行代码属于某个特定函数,而该函数又属于某个特定类。
- “为什么”:它理解,如果你更改了一个定义,所有与之关联的内容都会受到影响,即使它们相距 100 行或位于不同的文件中。
3. 过程:寻找正确的上下文
当冲突发生时,Rover 不会仅仅抓取错误旁边的文本。相反,它利用其地铁地图来追踪关联。
- 定位冲突:它找到两个版本产生分歧的确切位置。
- 追踪线路:它沿着地图上的“轨道”追踪,找出与冲突相关的每一段代码。也许冲突涉及一个在另一个文件中定义的变量?Rover 会找到那个文件并获取那段代码。
- 整合线索:它将所有这些关联的代码片段收集成一个“上下文包”。这就像收集与犯罪现场相关的所有证人和证据,而不仅仅是查看犯罪现场本身。
4. 解决:智能 AI
一旦 Rover 拥有了这个丰富的“上下文包”,它就会将其交给一个大型语言模型(LLM)——一种非常擅长编写代码的智能 AI。
- 没有 Rover:AI 只能看到一小段代码片段,必须猜测其余部分。由于缺乏上下文,它经常猜错。
- 有了 Rover:AI 不仅能看到冲突,还能看到相关代码的完整“地铁地图”。它能看到全局。它会理解:“啊,这个变量在这里被使用,而那个函数期望这种类型的数据。”
随后,AI 会编写出完美的解决方案,同时满足两个版本的代码要求,保留两位开发者的意图。
5. 结果:为何这很重要
研究人员将 Rover 与以下工具进行了测试:
- 标准 AI:仅让 AI 查看附近的文本。
- 旧机器学习工具:基于特定模式训练的工具。
- 其他“辅助”工具:试图查找相关代码但经常遗漏深层关联的工具。
结果:
Rover 在解决冲突方面表现显著更优。
- 它生成的解决方案更像人类开发者会写出的代码。
- 它处理了复杂情况,即一个文件中的代码依赖于另一个文件中的代码,而其他工具无法解决这些问题。
- 它能够在不同的编程语言(C、Java、Python)中工作,而无需为每种语言重新训练。
总结
可以将Rover想象成一名侦探,它不仅查看犯罪现场(冲突),还会询问每一位证人并核查每一条不在场证明(代码依赖关系),然后再破案。通过向 AI 提供软件关系的完整地图,Rover 确保了最终合并后的代码是正确的、安全的,并且确实能够运行。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。