DualGauge: Automated Joint Security-Functionality Benchmarking of Specification-Only Code Generation by LLMs and Coding Agents
该论文介绍了 DualGauge,这是一个自动化框架和基准测试,旨在证明当前的 LLM 和编程智能体难以同时生成既具备功能正确性又具备安全性代码,其在多种语言中的联合成功率仍低于 15%,并揭示了增强模型能力或迭代脚手架并不能可靠地解决这些安全性与功能性的权衡问题。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你雇佣了一位口若悬河、动作极快的机器人厨师,根据一个简单的口头描述来做饭:“做一个三明治。”
长期以来,我们只检查机器人是否遵循了食谱。它有没有把面包放在盘子里?是的。它有没有加火腿?是的。如果这个三明治看起来没错,我们就说:“做得好!”
但这项名为 DualGauge 的新论文提出了一个更难的问题:“这个三明治可以安全食用吗?”
也许机器人完美地遵循了食谱,但它也可能不小心用抽屉里发现的一把生锈的刀片切了火腿,或者使用了一个从未清洗过的切菜板。这个三明治看起来像个三明治,但它是危险的。
以下是研究人员发现的过程,用简单的语言进行了解释。
1. 问题所在:“看起来不错”的陷阱
研究人员发现,目前的 AI 编程工具(就像这位机器人厨师)非常擅长制作那些“看起来能运行”的东西,但它们非常不擅长制作那些“真正安全”的东西。
他们构建了一个新的测试系统,叫做 DualGauge。你可以把它想象成一个“双重检查厨房”。
- 旧的方法: 你品尝三明治。如果吃起来有火腿味,你就通过了测试。
- DualGauge 的方法: 你品尝三明治(功能性),并且你检查厨房里是否有生锈的刀、脏掉的菜板和毒药(安全性)。
2. 基准测试:“307 份三明治订单”
为了测试这一点,他们创建了一个包含 307 种不同任务 的庞大菜单。
- 每个任务都只是一个简单的句子,比如“写一个读取文件的程序”。
- 他们没有给 AI 提供任何提示、代码片段或安全警告。只有一个指令。
- 对于每一份订单,他们都创建了两套测试:
- 口味测试: 程序是否完成了它应该做的事情?
- 安全检查: 程序是否试图窃取文件、导致系统崩溃或让黑客入侵?
3. 令人震惊的结果
他们要求 10 个最聪明的 AI 模型(即“厨师”)制作这 307 份三明治。结果如下:
- “看起来不错”的分数很高: 许多模型大约能让 39% 的三明治口味正确。它们遵循了食谱!
- “安全”的分数很低: 当检查安全性时,分数下降了。
- “完美”的分数微乎其微: 当他们问,“你是否做出了一个既好吃又安全的三明治?”时,表现最好的 AI 模型得分低于 15%。
类比: 想象一个学生在参加数学考试。他答对了 90% 的题目(功能正确性)。但如果你问:“你是否也检查了计算错误?”他就会不及格。论文发现,擅长编程并不自动意味着擅长安全地编程。
4. 为什么“思考得更努力”没有帮助
研究人员尝试通过给 AI 提供更多工具来解决这个问题,就像给厨师更好的刀具或更多的思考时间一样。他们尝试了:
- 更大的模型: 使用“超级厨师”(更大的 AI 大脑)。
- 扩展思考: 告诉 AI,“慢慢来,一步步思考”。
- 专门化训练: 教导 AI 如何专门成为一名程序员。
结果: 这些技巧并不能可靠地解决安全问题。有时 AI 在食谱方面做得更好,但仍然忘记了清洗菜板;有时它在安全性方面做得更好,但却忘了食谱。安全性和功能性是两种不同的技能,它们并不总是同步增长的。
5. “机器人助手”也无济于事
现在有一些新的 AI 工具充当“智能体(agents)”。它们不仅仅是写一次代码,而是尝试修复自己的错误。它们编写代码,运行代码,看到错误,然后再次尝试。
研究人员发现,在这些“纯粹食谱型”任务中,这些智能体的表现并不比简单的机器人好。
- 原因: 这些智能体把所有时间都花在了寻找厨房里的工具上(比如搜索特定文件或搭建服务器),而不是实际修复三明治的安全性。它们忙于“管理厨房”,而不是“安全烹饪”。
6. “隐藏的危险”
论文发现了一个关于 AI 为何失败的具体模式。
- 功能性失败: AI 通常是因为回答的“形状”错了而失败(例如,它返回了错误类型的数据)。
- 安全性失败: AI 通常确实尝试了要保持安全,但做得不完整。
- 例子: AI 给门装了一把锁(保安),但它忘了锁好后窗。保安看起来没问题,但房子依然是不安全的。
核心结论
论文得出结论,我们不能仅仅因为 AI 写出的代码“能用”就信任它。
- 功能正确性是判断安全性的糟糕测谎仪。 仅仅因为代码运行没有崩溃,并不意味着它是安全的。
- 我们需要一个新的标准。 我们需要同时测试安全性与功能性,并使用相同的规则。
- 目前的 AI 还没达到这个水平。 即便是最聪明的模型,也无法持续产生既有用又安全的代码。
简而言之:仅仅因为机器人厨师做出了一个看起来美味的三明治,并不意味着你应该吃它。 我们也需要检查一下厨房。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。