On Selecting Few-Shot Examples for LLM-based Code Vulnerability Detection
作者: Md Abdul Hannan, Ronghao Ni, Chi Zhang, Limin Jia, Ravi Mangal, Corina S. Pasareanu
分类: cs.SE, cs.CR, cs.LG
发布日期: 2025-10-31
💡 一句话要点
针对LLM代码漏洞检测,提出基于错误模式和相似性的Few-Shot样例选择方法
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 代码漏洞检测 大型语言模型 上下文学习 Few-Shot学习 软件安全
📋 核心要点
- 大型语言模型在代码漏洞检测方面面临挑战,直接应用效果不佳。
- 论文提出基于LLM错误模式和样本相似性的few-shot样例选择策略,提升检测性能。
- 实验表明,结合两种选择标准的策略在多个数据集上能有效提升开源LLM的漏洞检测能力。
📝 摘要(中文)
大型语言模型(LLM)在代码摘要、翻译、补全和生成等多种编码任务中表现出令人印象深刻的能力。然而,检测代码漏洞对于LLM来说仍然是一个具有挑战性的任务。一种提高LLM性能的有效方法是上下文学习(ICL),即提供与查询相似的few-shot示例以及正确的答案,可以提高LLM生成正确解决方案的能力。然而,恰当地选择few-shot示例对于提高模型性能至关重要。在本文中,我们探讨了用于代码漏洞检测任务的ICL中选择few-shot示例的两个标准。第一个标准考虑LLM是否(一致地)在样本上犯错,其直觉是LLM在样本上的表现可以提供关于其作为few-shot示例的有用性的信息。另一个标准考虑示例与查询程序的相似性,并基于给定样本的$k$近邻选择few-shot示例。我们进行了评估,以确定这些标准各自以及在各种组合下的益处,使用了多个数据集上的开源模型。
🔬 方法详解
问题定义:代码漏洞检测是软件安全的关键环节,但现有的大型语言模型(LLM)在该任务上的表现仍有提升空间。直接使用LLM进行漏洞检测,效果往往不理想,需要有效的few-shot学习策略来引导LLM。
核心思路:论文的核心在于选择合适的few-shot示例来提升LLM的漏洞检测能力。选择标准有两个:一是LLM在样本上的错误模式,即LLM是否容易在该样本上犯错;二是样本与待检测代码的相似性。通过选择LLM容易出错和与待检测代码相似的样本作为few-shot示例,可以更好地引导LLM学习。
技术框架:整体流程如下:1) 收集代码样本和对应的漏洞标签;2) 使用LLM在样本集上进行初步预测,记录LLM的错误模式;3) 计算样本之间的相似度,例如使用代码嵌入;4) 对于给定的待检测代码,根据错误模式和相似度选择Top-K个few-shot示例;5) 将选定的few-shot示例和待检测代码输入LLM,进行漏洞检测。
关键创新:关键创新在于结合了LLM的错误模式和样本相似性来选择few-shot示例。传统的few-shot学习往往只考虑样本的相似性,而忽略了LLM自身的特点。通过考虑LLM的错误模式,可以更有针对性地选择能够帮助LLM纠正错误的示例。
关键设计:在错误模式方面,论文可能使用了某种指标来衡量LLM在样本上犯错的频率或严重程度。在相似度计算方面,可能使用了代码嵌入技术,例如CodeBERT或GraphCodeBERT,将代码转换为向量表示,然后计算向量之间的余弦相似度。$k$近邻算法用于选择最相似的$k$个样本。具体参数设置和损失函数等细节未知。
📊 实验亮点
论文通过实验验证了所提出的few-shot示例选择策略的有效性。实验结果表明,结合LLM错误模式和样本相似性的方法,在多个开源数据集上,能够显著提升LLM代码漏洞检测的性能。具体的性能提升数据和对比基线未知。
🎯 应用场景
该研究成果可应用于软件安全领域,提升代码漏洞检测的自动化程度和准确性。通过优化few-shot示例选择,可以降低人工干预成本,提高漏洞检测效率,从而减少软件安全风险。未来,该方法可以集成到IDE或CI/CD流程中,实现实时的代码漏洞检测。
📄 摘要(原文)
Large language models (LLMs) have demonstrated impressive capabilities for many coding tasks, including summarization, translation, completion, and code generation. However, detecting code vulnerabilities remains a challenging task for LLMs. An effective way to improve LLM performance is in-context learning (ICL) - providing few-shot examples similar to the query, along with correct answers, can improve an LLM's ability to generate correct solutions. However, choosing the few-shot examples appropriately is crucial to improving model performance. In this paper, we explore two criteria for choosing few-shot examples for ICL used in the code vulnerability detection task. The first criterion considers if the LLM (consistently) makes a mistake or not on a sample with the intuition that LLM performance on a sample is informative about its usefulness as a few-shot example. The other criterion considers similarity of the examples with the program under query and chooses few-shot examples based on the $k$-nearest neighbors to the given sample. We perform evaluations to determine the benefits of these criteria individually as well as under various combinations, using open-source models on multiple datasets.