← 最新论文
💻 computer science

Generating Complex Code Analyzers from Natural Language Questions

本文介绍了 Merlin,这是一个将大型语言模型与 CodeQL 程序分析框架相结合的系统,它采用一种新颖的基于检索增强生成的迭代生成与自测试方法,以有效回答关于大型代码库的复杂自然语言问题,从而显著提高开发者任务的准确性和效率。

原作者: Amirmohammad Nazari, Sadra Sabouri, Wang Bill Zhu, Robin Jia, Souti Chattopadhyay, Mukund Raghothaman

发布于 2026-05-12
📖 1 分钟阅读☕ 轻松阅读

原作者: Amirmohammad Nazari, Sadra Sabouri, Wang Bill Zhu, Robin Jia, Souti Chattopadhyay, Mukund Raghothaman

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,你拥有一座包含数百万本书籍(即代码库)的巨型图书馆,这些书籍是用一种非常特定且专业的语言写成的。你是一名图书管理员(即开发者),需要寻找一个非常具体的模式:“找出每一本在角色完全‘诞生’之前就先自我介绍的书。”

手工完成这项工作是不可能的。使用简单的搜索栏查找“诞生”这个词(就像 grep 命令一样)毫无用处,因为它忽略了句子的含义。而请一位超级聪明的 AI 助手(即大型语言模型或 LLM)通读整座图书馆并告诉你答案,往往也会失败,因为图书馆太大,AI 无法一次性将其全部载入内存,或者 AI 只是胡乱猜测。

此时,Merlin 登场了。

Merlin 是一个新系统,它就像一个超级强大的翻译官和侦探。它位于你(使用自然英语)与一个非常严格、强大的数据库引擎CodeQL(它能完美理解代码的技术结构)之间。

以下是 Merlin 的工作原理,使用简单的类比来说明:

1. 翻译官(从自然语言到 CodeQL)

你用通俗的英语向 Merlin 提问:“向我展示所有构造函数调用了那些后续可被修改的方法的地方。”
Merlin 不会仅仅猜测答案。相反,它将你的问题转化为针对 CodeQL 数据库的精确查询。你可以把 CodeQL 想象成你整个代码库的一张巨大的、结构化的电子表格。Merlin 会编写一条特定的类 SQL 命令,向这张电子表格请求你所需的确切数据。

2. “自测”(试金石测试)

这里是棘手之处:即使 Merlin 编写的查询在语法上看起来正确,它在逻辑上仍可能是错误的。它可能在你意指“水果”时却去查找“苹果”,或者它可能过于挑剔而一无所获。

为了解决这个问题,Merlin 拥有一个自测功能。在搜索你那庞大的图书馆之前,它会要求 AI 创建一个微小的、虚构的示例(一个“模拟”场景),以验证查询是否有效。

  • 类比:想象你在测试一个金属探测器。在走遍整个城市之前,你先带着它穿过一个埋有几枚硬币的小花园。如果金属探测器对硬币发出蜂鸣声,你就知道它在工作;如果它保持沉默,你就知道探测器坏了,并且你可以在浪费时间去搜索整个城市之前先修复它。
  • 结果:如果查询未能通过这个小测试,Merlin 就知道它出错了,并会再次尝试。

3. “辅助查询”(侦探的手电筒)

有时,查询在语法上是完美的,但仍然一无所获,因为 AI 误解了某个细微的细节。
Merlin 使用一种称为辅助查询的技术。

  • 类比:想象你在森林里寻找一种特定类型的鸟,但你的双筒望远镜起雾了。与其只是更努力地凝视,不如让助手大声喊出他们此刻在树中看到的一切(“我看到一只红鸟,一只蓝鸟,一只松鼠……")。
  • 如何帮助:通过看到这份“目击者”列表,AI 会意识到:“哦!我原本在找红色的鸟,但森林里到处都是蓝色的。我需要改变我的搜索方向。”这有助于 AI 调试其自身的逻辑并找到正确的答案。

4. 结果:为何这很重要

研究人员将 Merlin 与其他工具及人类开发者进行了对比测试。

  • 发现针尖:Merlin 发现了几乎所有现有专业工具发现的漏洞,但它还发现了更多其他工具遗漏的漏洞。
  • 人类速度:在一项要求真实程序员查找并修复漏洞的研究中:
    • 使用 Merlin 的人比未使用的人准确率高出 3.8 倍
    • 他们完成任务的速度快了 31%
  • “原因”:没有 Merlin 时,程序员往往被困在枯燥的手动搜索中,或者依赖那些给出错误答案的 AI。Merlin 为他们提供了一份清晰、可审计的位置列表以及用于查找的确切逻辑,使他们能够信任这些结果。

总结

Merlin 就像拥有一位既懂“人类英语”又懂“机器逻辑”的翻译官,一位在发送指令前进行测试的质量控制检查员,以及一位利用手电筒查明搜索为何失败的侦探。它允许开发者对庞大的代码库提出复杂的问题,并获得可靠、精确的答案,而无需他们自己成为技术查询语言的专家。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →