Helping LLMs Improve Code Generation Using Feedback from Testing and Static Analysis

本文提出了一种利用测试和静态分析反馈来指导开源大语言模型自我改进的框架,研究发现尽管这些模型生成的代码常存在错误和安全漏洞且难以自行检测,但在获得相关反馈后却展现出显著的代码修复能力。

Greta Dolcetti, Vincenzo Arceri, Eleonora Iotti, Sergio Maffeis, Agostino Cortesi, Enea Zaffanella

发布于 2026-03-16
📖 1 分钟阅读☕ 轻松阅读

Each language version is independently generated for its own context, not a direct translation.

这篇论文就像是在给人工智能(AI)写代码的能力做一次全面的“体检”和“特训”

想象一下,你雇佣了一位名叫"LLM"(大型语言模型)的超级天才程序员。他语速极快,能瞬间写出成千上万行代码。但是,这位天才有个毛病:他有时候会犯低级错误,甚至写出带有安全隐患的代码,而且他自己往往意识不到这些错误。

这篇论文的研究团队(来自意大利和英国的大学)设计了一套流程,来测试这位天才程序员,并试图教会他如何自我纠错。

1. 实验背景:天才的“双刃剑”

现在的 AI 写代码越来越火,大家都想用它们来提高效率。但就像让一个没经过严格训练的新手直接去修核电站一样,风险很大。AI 生成的代码可能:

  • 跑不通(有语法错误)。
  • 算不对(逻辑错误)。
  • 有漏洞(比如内存泄漏,就像水管没关紧,水会流干,导致系统崩溃)。

2. 实验流程:三步走的“特训营”

研究人员把整个实验分成了三个主要阶段,就像给 AI 安排了一场“生成 - 考试 - 补习”的循环:

第一阶段:生成代码(“自由发挥”)

  • 任务:让 4 个不同的 AI 模型(Llama 3, Gemma, Mixtral 等)去解决 100 个编程题目(把原本 Python 的题目翻译成了 C 语言,因为 C 语言对内存管理要求更严,更容易出大错)。
  • 结果:AI 确实能写出代码,但只有不到一半(46%-65%)的代码是完全正确的。很多代码要么编译不过,要么运行起来就崩溃。
  • 比喻:就像让四个厨师做 100 道菜,结果只有一半的菜能端上桌,而且有些菜里可能还藏着老鼠(安全漏洞)。

第二阶段:自我评估(“照镜子”)

  • 任务:让 AI 自己检查刚才写的代码,或者检查别的 AI 写的代码。问它:“这段代码对吗?”“这里有漏洞吗?”
  • 结果AI 非常不擅长“照镜子”
    • 它们很难发现代码里的逻辑错误。
    • 它们几乎完全看不懂代码里的安全漏洞(比如内存泄漏)。
    • 有趣的是,AI 并没有表现出“护短”(即没有特别偏爱自己写的代码),但它们确实缺乏自知之明
  • 比喻:就像让那个厨师自己尝菜,问他“这菜咸不咸?有没有毒?”。结果他要么说“完美无缺”(其实咸得发苦),要么说“绝对有毒”(其实很安全)。他根本看不清自己的手艺。

第三阶段:修复代码(“带病上岗”)

  • 任务:这是最精彩的部分。研究人员不再让 AI 瞎猜,而是直接告诉它:“你的代码这里错了(测试失败)”或者“这里有个漏洞(静态分析工具发现的)”。然后让 AI 根据这些具体的反馈去修改代码。
  • 结果AI 的修复能力惊人地强!
    • 一旦有了具体的错误报告,AI 就能把大部分错误的代码改对。
    • 对于安全漏洞,修复成功率甚至高达 89%
    • 而且,AI 并没有“护短”,它能把别人写的烂代码修得比修自己的还快。
  • 比喻:一旦有人拿着放大镜告诉厨师:“这道菜盐放多了”或者“这块肉没熟”,厨师立刻就能把菜改得完美无缺。

3. 核心发现与启示

  1. AI 写代码,经常“翻车”:如果不加干预,AI 生成的代码经常有错,甚至不安全。
  2. AI 是个“瞎子”:让它自己检查代码,它根本看不出问题在哪里。它缺乏“自我意识”。
  3. AI 是个“好学生”:只要有人(或者工具)给它指错,它就能迅速改正,而且改得非常好。
  4. 工具很重要:研究中用了一个叫 Infer 的静态分析工具(就像是一个不知疲倦的“代码质检员”),它能在代码运行前就发现潜在的危险。这个工具 + AI 的组合,效果最好。

4. 总结:未来的路怎么走?

这篇论文告诉我们,不要指望 AI 能一次性写出完美的代码,也不要指望它能自己发现所有错误。

但是,如果我们建立一个自动化的流水线

  1. AI 写代码。
  2. 自动化工具(如 Infer)和测试程序像“质检员”一样挑错。
  3. 把挑出来的错误反馈给 AI。
  4. AI 根据反馈自动修复。

这样,我们就能得到既安全又正确的代码。这就像给 AI 配了一个严格的“导师”和一套“体检设备”,让它从“天才但鲁莽的学徒”变成“严谨可靠的工程师”。

一句话总结:AI 写代码很有潜力,但它需要人类(或工具)在旁边拿着“纠错本”和“放大镜”盯着它,它才能变得真正可靠。

在收件箱中获取类似论文

根据您的兴趣定制的每日或每周摘要。Gist或技术摘要,使用您的语言。

试用 Digest →