论文

通过解释与引导实现安全、正确的代码生成

Interpreting and Steering for Safe and Correct Code Generation

模型推理解码与生成控制

摘要

大语言模型(LLM)经常生成包含漏洞的源代码,但很少有工作研究区分其中的安全生成和易受攻击生成的内部机制。在这项工作中,我们系统地对 LLM 进行机械解释,旨在了解代码安全与漏洞如何由 LM 中的组件表示或驱动,并将见解转化为可操作的指导策略,以鼓励更安全的代码生成。为此,我们引入了 CodeSec-Pairs,这是一个包含 9,342 个 Python 安全且易受攻击的对比代码对的数据集,采样自 Llama-3.1-8B-Instruct。利用该数据集,我们探索了与代码安全相关的本地化层和注意力头的方法,并进一步尝试了不同的转向策略以减少推理时间漏洞。我们特别提出了 DuoSteer,这是一种双转向方法,可同时将安全性和代码正确性转向应用于注意力头。在超过五种漏洞类型的实验中,DuoSteer 平均使漏洞率降低了 -26.9%,功能正确性提高了 +7.5%,这不仅优于其他转向变体,而且还优于提示和监督微调基线。该优势也在 Qwen-2.5-Coder-7B-Instruct 上复制,并从该模型中采样了另外 2,500 个对比对。

通过解释与引导实现安全、正确的代码生成:论文配图
图1:每个CWE所有层次和头部的线性概率校验准确度。网格显示每头的精确度,最右侧条显示残余流层的精确度。最好的头部或层都装箱了在CWE-022上几乎没有头级信号,而在每个CWE-295上都用密号编码,而层级信号在每一个CWE中都是高的。