ProjAgent: Procedural Similarity Retrieval for Repository-Level Code Generation
ProjAgent 是一个仓库级代码生成系统,它通过基于过程相似性的函数检索进行智能体工作流,并利用静态分析反馈来优化输出,从而在 REPOCOD 基准测试中实现了 41.14% 的 Pass@1。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你正在尝试为一部长达 10,000 页的巨型推理小说编写一个新章节。你知道需要达到的情节要点,但你不知道角色的名字、小镇的具体规则,也不知道侦探通常如何破案。如果你只是凭直觉猜测,你可能会创造出一个并不存在的角色,或者违反了小镇的法律,从而毁掉整个故事。这正是人工智能在尝试为大型软件项目编写代码时所面临的情况。
长期以来,AI 助手一直试图通过寻找“相似物”来寻求帮助。如果你要求编写一个计算温度的函数,AI 会搜索其他使用了“temperature”(温度)这个词或在表面上看起来相似的代码。论文指出,这就像仅仅因为另一份食谱提到了“糖”,就去寻找制作蛋糕的食谱一样。它忽略了真正的魔力:如何进行烹饪。
作者 Qihong Chen、Aaron Imani 和 Iftekhar Ahmed 开发了一个名为 ProjAgent 的新系统。他们发现,最有帮助的代码并不总是那些看起来相同的代码;而是那些思考方式相同的代码。
“思考” vs. “表达”
论文指出,代码有两个层面:它使用的词汇(如变量名和注释)以及它解决问题的实际步骤(逻辑)。
想象两位厨师。厨师 A 正在做披萨,而厨师 B 正在做沙拉。
- 旧方法(词法/语义搜索): 如果你请求制作披萨的帮助,旧的 AI 会忽略厨师 B,因为他在做沙拉。它只会寻找其他披萨厨师。
- 新方法(ProjAgent): ProjAgent 意识到这两位厨师都必须做同样的事情:切配料、检查是否新鲜、并将它们放入碗中。尽管一位在做沙拉,另一位在做披萨,但他们的程序化步骤是完全一致的。ProjAgent 找到了厨师 B 并说:“嘿,看看厨师 B 是如何检查生菜是否新鲜的!你可以使用同样的逻辑来检查你的番茄是否新鲜!”
论文明确排除了“表面相似性(观察单词)足以解决问题”的观点。他们认为,仅仅依赖单词或简单的含义往往会错过关键的“如何做”步骤,因为不同的项目会对相同的动作使用不同的名称。
ProjAgent 如何运作:侦探智能体
ProjAgent 扮演着一个拥有特殊工具的超级聪明侦探的角色。它是如何破解谜题的:
- 拆解: 它将你要编写的新代码拆解成微小的逻辑步骤,例如“检查数字是否为负数”或“转换单位”。
- “思考”搜索: ProjAgent 不仅仅阅读单词,它使用一种特殊的技巧来观察 AI 模型的“隐藏思想”。它剥离掉华丽的词汇,只观察纯粹的逻辑。它寻找在项目中执行相同“思维舞蹈”的其他代码,即使这些代码位于完全不同的部分。
- 智能体的搜寻: 如果第一次搜索没有找到足够的资料,一个数字“智能体”(一个小型的 AI 机器人)就会在项目文件中进行一场搜寻游戏。它阅读文件、搜索函数,并询问:“这里是否有任何东西的思考方式与此一致?”
- 双重检查: 为了确保没有被误导,该系统使用了一个“静态分析”工具。你可以把它理解为逻辑层面的“拼写检查器”。它检查代码是否能实际运行而不崩溃。如果 AI 犯了错误,系统会说:“哎呀,那行不通,”并要求 AI 重试。这个循环最多会进行 10 次,直到代码变得稳健为止。
结果:它奏效了吗?
作者在名为 REPOCOD 的基准测试上对 ProjAgent 进行了测试,该测试包含来自 11 个不同软件项目的 980 个真实世界编程问题。
- 得分: ProjAgent 获得了 41.14% 的 Pass@1 分数。这意味着在第一次尝试时,它大约每 100 个问题中就能写出约 41 个可运行的代码。
- 对比: 这击败了之前的最佳方法。旧的“密集搜索”方法仅获得 28.83%,而“稀疏搜索”(寻找关键词)仅获得 26.58%。即使是顶尖系统 SpecAgent 也仅达到了 34.52%。
- 证明: 论文表明,最大的提升来自于寻找那些“程序化相似”的步骤。当他们移除程序化搜索时,分数降至 25.76%。当他们移除语义搜索(单词匹配部分)时,分数降至 32.29%。这证明了你需要“如何做”和“做什么”两者兼备才能成功。
本论文并未声称的事项
了解这篇论文没有说什么是很重要的。
- 它并没有声称已经解决了所有的编程问题。41.14% 的得分意味着它仍然有一半以上的时间会失败。
- 它并没有说这适用于每种编程语言。测试仅针对 Python 项目进行。
- 它并没有声称“智能体”是完美的。作者承认,有时智能体会耗尽时间或内存,从而无法找到最佳代码,这表明仍需要更好的探索工具。
核心结论
论文表明,要为大型项目编写优秀的代码,AI 需要停止仅仅寻找匹配的单词,转而开始寻找思维模式。通过寻找以相同方式解决问题的代码(即使单词完全不同),ProjAgent 帮助 AI 编写出更好、更可靠的软件。这是一个进步,但通往完美代码生成的旅程仍在继续。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。