
自动补全代码技术可显著提升开发效率。近年来,基于Transformer架构的大规模语言模型(LLM)技术被广泛应用于代码生成任务。然而,已有研究表明,此类模型生成的代码中普遍存在安全漏洞。为此,本文提出一种新型的“漏洞约束解码”(vulnerability-constrained decoding)方法,旨在减少模型生成代码中的漏洞数量。我们利用一个包含已标注漏洞行的小规模代码数据集,对大语言模型进行微调,使其在生成代码时附带漏洞标签,从而实现将漏洞检测功能内嵌于生成过程中,相当于在模型内部构建了一个嵌入式分类器。在解码阶段,通过禁止模型生成带有漏洞标签的代码片段,有效避免生成存在安全缺陷的代码。为验证该方法的有效性,我们选取以太坊区块链智能合约(Smart Contracts, SCs)作为案例研究,因其对安全性具有极为严格的要求。首先,我们基于从2,217,692个智能合约中去除重复后保留的186,397个合约,对拥有60亿参数的GPT-J模型进行微调,整个微调过程耗时超过一周,使用了十张GPU。实验结果表明,微调后的模型在生成智能合约时,平均BLEU(双语评估替补)得分达到0.557。然而,进一步分析发现,自动补全生成的智能合约中仍存在大量漏洞。针对包含多种类型漏洞的176个智能合约,我们以漏洞行之前的代码片段作为输入,进行自动补全,结果发现超过70%的生成代码存在安全隐患。为此,我们进一步在另外941个包含相同类型漏洞的智能合约上对模型进行微调,并引入漏洞约束解码机制。此次微调仅耗时一小时,使用四张GPU完成。随后,我们再次对这176个智能合约进行自动补全,结果显示,本方法能够识别出62%的代码片段存在漏洞,并成功避免生成其中67%的漏洞代码。实验结果表明,所提出的漏洞约束解码方法能够在保证代码生成质量的同时,高效且有效地降低自动补全代码中的安全风险,为提升AI辅助编程的安全性提供了可行的技术路径。