LLM 结对编程员检测不安全代码的能力如何?
LLM结对编程助手能够检测出相当大比例的不安全代码,其表现往往优于传统的静态分析工具。在一项基于MUBench(API误用案例基准测试)的研究中,GitHub Copilot的检测准确率达到86.2%,精确率为91.2%,召回率为92.4%[1]。这意味着它能正确识别超过九成的API误用情况,并且当它标记某段代码为不安全时,正确率约为91%。作为对比,针对PHP Web漏洞测试的最佳传统静态代码分析工具仅能发现32%的漏洞,而ChatGPT的检测率则达到62-68%[2]。即便将多种传统工具组合使用,检测率也仅为53%,仍远低于ChatGPT的表现[2]。
大语言模型能修复它们发现的不安全代码吗?
当大语言模型检测到不安全代码时,它们通常非常擅长修复这些问题。同一项Copilot研究表明,一旦Copilot识别出API误用,它成功修复了其中超过95%的误用情况[1]。这表明该模型不仅善于发现问题,也擅长生成修正后的代码。然而,这种高修复率仅适用于它实际检测到的误用——它仍会遗漏部分问题,尤其是复杂或依赖上下文的案例[1]。此外,另一项研究发现,Copilot生成的代码本身常包含跨站脚本攻击和SQL注入等漏洞[4],这意味着若未仔细审查,修复过程可能引入新的问题。
主要局限有哪些?
最大的局限性在于,大语言模型(LLM)的误报率非常高——它们会将安全的代码标记为不安全,从而浪费开发者的时间。ChatGPT的误报率高达91%,这意味着每发出100条警报,就有91条是错误的[2]。即便是最差的传统静态分析工具,其误报率也低于此(82%)[2]。另一个局限性是,LLM难以处理复合型或上下文敏感的误用案例[1],并且它们生成的代码常常包含严重的安全漏洞[4]。例如,一项针对Copilot代码建议的研究发现,只有57%的Java解决方案通过了测试,而JavaScript解决方案的通过率仅为27%[3]。这意味着开发者不能盲目信任LLM的建议,必须始终对代码进行审查。
关于这些来源
该回答基于5篇经同行评审的研究构建而成——发表于2022年至2025年间,其中3篇为2024年或之后发表,累计被引用269次——这些研究是从通过质量筛选的5项研究中选出的最具相关性的成果,而该筛选过程则源于从超过5亿篇论文的数据库中检索到的52篇文献。
本文引用的文献
我们能信任AI结对程序员吗?Copilot在API误用检测与修正中的应用
GitHub Copilot 在 MUBench 基准测试中检测 API 误用的准确率为 86.2%,精确率为 91.2%,召回率为 92.4%,并且修复了其识别出的超过 95% 的误用。
旧代码的新把戏:AI聊天机器人能否取代静态代码分析工具?
ChatGPT发现了62-68%的PHP网页漏洞,表现优于最佳传统静态分析器(32%)甚至组合工具(53%),但其误报率高达91%。
GitHub Copilot代码建议的实证评估
在一项涵盖4种编程语言、使用33道LeetCode题目的实证评估中,Copilot的Java建议正确率最高(57%),JavaScript最低(27%),且部分代码依赖于未定义的辅助方法。
CodingCare:面向常见漏洞缓解的AI代码生成安全框架
一项研究发现,AI生成的代码存在跨站脚本攻击和SQL注入等严重漏洞,并提出了一个安全框架,该框架减少了已报告的CVE数量。
演示:利用大语言模型修复C/C++漏洞:提示、检测、修复:告别不安全代码
本地部署的LLM(如Deep Seek)能够扫描整个代码库以发现漏洞并提出修复方案,从而降低使用ChatGPT等远程LLM所带来的后门风险。
