Teaching Code LLMs to Use Autocompletion Tools in Repository-Level Code Generation
Teaching Code LLMs to Use Autocompletion Tools in Repository-Level Code GenerationABSTRACET摘要:近年来,大型代码语言模型(LLMs)在生成独立函数方面表现出色。然而,由于缺乏对仓库级依赖(如用户自定义属性)的感知,它们在仓库级代码生成中存在一定局限性,容易导致依赖性错误,例如未定义变量错误和缺少成员错误。在本研究中,我们提出了TOOLGEN方法,通过将自动补全工具集成到代码LLM的生成过程中,以解决这些依赖性问题。TOOLGEN包含两个主要阶段:触发器插入和模型微调(离线阶段),以及工具集成代码生成(在线阶段)。在离线阶段,TOOLGEN对给定代码语料库中的函数进行增强,加入一个特殊的标记符号,用于指示触发自动补全工具的位置。这些增强的函数及其对应的描述随后用于微调所选的代码LLM。在在线阶段,TOOLGEN通过微调后的LLM逐步预测生成函数的每个标记。当遇到标记符号时,TOOLGEN调用自动补全工具提供代码补全建议,并通过约束贪婪搜索选择最合适的建议。
我们进行了全面的实验,评估了TOOLGE ...
Explaining Structured Queries in Natural Language
Explaining Structured Queries in Natural LanguageAbstract摘要——许多应用程序为普通用户提供了一种基于表单的环境,使其无需熟悉数据库模式或结构化查询语言即可访问数据库。用户的交互会被翻译成结构化查询并执行。然而,由于用户不太可能了解表单中各字段之间的底层语义关系,因此为用户提供查询的文本解释通常是有用的。在本文中,我们采用一种基于图的方式来解决查询翻译问题。我们将各种形式的结构化查询表示为有向图,并使用可扩展的模板机制为图的边添加模板标签。我们提出了多种图遍历策略,用于高效地探索这些图并生成查询的文本描述。最后,我们通过实验展示了所提方法在效率和效果上的表现。
INTRODUCTIONBackground and motivation
问题背景:结构化查询语言(SQL)的局限性
SQL 对高级用户和开发者是强大的工具,但大多数普通用户不熟悉。
为此,许多应用提供基于表单的查询环境,简化了数据库搜索和操作。
应用场景
基于表单的查询在以下领域常见:
博物馆门户网站
数字图书馆
电子商务网站
新兴的 DIY 数据库驱动的 W ...
Fuzzing JavaScript Interpreters with Coverage-Guided Reinforcement Learning for LLM-Based Mutation
Fuzzing JavaScript Interpreters with Coverage-Guided Reinforcement Learning for LLM-Based MutationAbstractJavaScript解释器对现代网络浏览器至关重要,需要一种有效的Fuzzing方法来识别安全相关的漏洞。然而,输入的严格语法要求呈现出重大挑战。最近将语言模型整合到上下文感知的突变Fuzzing中的努力是有前景的,但缺乏必要的覆盖指导以充分发挥效用。本文提出了一种新的技术,名为CovRL(基于覆盖率的强化学习),它将大型语言模型(LLMs)与基于覆盖反馈的强化学习(RL)相结合。我们的Fuzzer,CovRL-Fuzz,通过利用词频-逆文档频率(TF-IDF)方法将覆盖反馈直接整合到LLM中,构建了一个加权覆盖图。该图是计算Fuzzing奖励的关键,然后将此奖励应用于基于LLM的突变器通过强化学习。CovRL-Fuzz通过这种方法,能够生成更有可能发现新覆盖区域的测试用例,从而提高漏洞检测效率,同时最小化语法和语义错误,而无需额外后处理。我们的评估结果表明,CovRL-Fuz ...
Finding Logic Bugs in Spatial Database Engines via Affine Equivalent Inputs
Finding Logic Bugs in Spatial Database Engines via Affine Equivalent InputsAbstract空间数据库管理系统(SDBMSs)旨在存储、操作和检索空间数据。SDBMSs 被广泛应用于现代各类应用中,例如地理信息系统、计算机辅助设计工具和基于位置的服务。然而,SDBMSs 中存在逻辑错误可能导致错误的结果,极大地削弱这些应用的可靠性。在 SDBMSs 中检测逻辑错误非常具有挑战性,因为缺乏用于识别错误结果的真实基准。在本文中,我们提出了一种自动几何感知生成器,用于为 SDBMSs 生成高质量的 SQL 语句,并引入了一个新的概念仿射等价输入 (AEI) 来验证 SDBMSs 的结果。我们将这些概念实现为一个名为 Spatter (Spatial DBMSs Tester) 的工具,用于检测四种流行 SDBMSs 中的逻辑错误:PostGIS、DuckDB Spatial、MySQL 和 SQL Server。我们的测试活动检测到了 34 个之前未知且独特的错误,其中已有 30 个得到确认,18 个已被修复。我们的 ...
ClDiff: Generating Concise Linked Code Differences
ClDiff: Generating Concise Linked Code DifferencesABSTRACT分析和理解源代码变更在多种软件维护任务中非常重要。为此,已经提出了许多代码差异分析和代码变更摘要的方法。然而,对于某些任务(例如代码审查和软件合并),这些差异分析方法生成的代码变更表示过于细粒度,而这些摘要方法生成的代码变更表示又过于粗粒度。此外,它们没有考虑代码变更之间的关系。因此,生成的差异或摘要在某些软件维护任务中难以分析和理解。
本文提出了一种代码差异分析方法,称为 ClDiff,用于生成简明的关联代码差异,其粒度介于现有代码差异分析方法和代码变更摘要方法之间。ClDiff 的目标是生成更易于理解的代码差异。ClDiff 以变更前后的源代码文件为输入,包括三个步骤。首先,它通过修剪解析的抽象语法树中的未更改声明来预处理源代码文件。其次,它通过对语句级别及以上的细粒度代码差异进行分组,并描述每组中的高级别变更,生成简明的代码差异。最后,它根据五种预定义的链接方式将相关的简明代码差异链接起来。
通过对 12 个 Java 项目(74,387 次提交)的实验和对 1 ...
Drowzee Metamorphic Testing for Fact-Conflicting Hallucination Detection in Large Language Models
Drowzee: Metamorphic Testing for Fact-Conflicting Hallucination Detection in Large Language ModelsABSTRACT大型语言模型(LLMs)已在语言处理领域引发了革命,但它们面临着安全性、隐私以及生成幻觉(即看似合理但事实上不准确的输出)等关键挑战。一个主要问题是事实冲突幻觉(FCH),即LLM生成的内容与事实真相相矛盾。解决FCH问题非常困难,主要面临两个挑战:1)自动构建和更新基准数据集较为复杂,因为现有方法依赖于人工整理的静态基准数据集,无法涵盖FCH案例的广泛、不断发展的范围;2)验证LLM输出背后的推理过程本身具有挑战性,尤其是对于复杂的逻辑关系。
为了解决这些问题,我们提出了一种新颖的逻辑编程辅助变形测试技术,用于FCH检测。我们开发了一个全面且可扩展的框架,通过爬取像维基百科这样的资源,构建一个全面的事实知识库,并将其无缝集成到Drowzee中。通过逻辑推理规则,我们将这些知识转化并增强为大量具有事实真相答案的测试案例。我们通过基于模板的提示对LLM进行测试,要求它们提供有理有 ...
Vision: Identifying Affected Library Versions for Open Source Software Vulnerabilities
Vision: Identifying Affected Library Versions for Open Source Software VulnerabilitiesABSTRACT漏洞报告在减少开源软件风险中起着至关重要的作用。通常,漏洞报告包含受影响的软件版本。然而,尽管安全专家已经验证了漏洞并且厂商也进行了审查,但受影响的版本并不总是准确的。特别是在处理多个版本及其差异时,保持版本的准确性变得更加复杂。虽然已经有一些方法用来识别受影响的版本,但它们仍然面临一些限制。首先,某些现有的方法是基于代码托管平台(如 GitHub)来识别受影响的版本,但这些版本与包注册表中的版本(如 Maven)并不总是保持一致。其次,现有的方法未能区分多个方法和变更块中漏洞方法与修补语句的重要性。
为了解决这些问题,本文提出了一种新的方法——Vision,旨在准确识别漏洞的受影响库版本(ALVs)。Vision使用来自包注册表的库版本作为输入。为了区分漏洞方法和修补语句的重要性,Vision通过关键方法选择和关键语句选择来优先考虑重要的变更及其上下文。此外,漏洞签名通过加权的跨过程程序依赖图(IP ...
Validating LLM-Generated Programs with Metamorphic Prompt Testing
Validating LLM-Generated Programs with Metamorphic Prompt TestingAbstract软件开发领域的最新范式转变,通过大型语言模型(LLMs)带来的创新和自动化,尤其是生成式预训练变换器(GPT),展示了其自主生成代码的卓越能力,显著减少了各种编程任务所需的人工投入。尽管LLM生成代码的潜在好处十分广泛——尤其是在提升效率和快速原型开发方面——但随着LLM越来越多地被集成到软件开发生命周期以及由此产生的供应链中,由此产生的复杂且多方面的挑战浮现出来。这些挑战源于由此类语言模型生成的代码在质量和正确性方面存在的重大疑问。因此,研究需要全面探讨围绕LLM生成代码的这些关键问题。
在本文中,我们提出了一种称为变形提示测试(Metamorphic Prompt Testing)的新方法,以应对这些挑战。我们的直观观察是,在正确代码片段之间总是存在内在的一致性,但在存在缺陷的代码片段之间可能不存在这种一致性,因此通过检测不一致性,我们可以发现代码中的缺陷。为此,我们可以通过改写将一个提示扩展为多个提示,并让LLM生成多个版本的代码,以便 ...
MASTERKEY: Automated Jailbreaking of Large Language Model Chatbots
MASTERKEY: Automated Jailbreaking of Large Language Model ChatbotsAbstract大型语言模型(LLMs),如聊天机器人,在多个领域取得了显著进展,但仍容易受到越狱攻击(jailbreak attacks)的影响,这类攻击旨在引诱模型生成不恰当的响应。尽管已有尝试识别这些弱点,但由于服务提供商未公开防御措施,现有策略对主流LLM聊天机器人仍然无效。本文提出了一个名为 MASTERKEY 的框架,用于探索越狱攻击及其对应的防御动态。我们提出了一种基于时间特性的全新方法,该方法受时间延迟SQL注入技术启发,用于剖析LLM聊天机器人的防御机制。这项技术揭示了这些防御的工作原理,并在多个LLM聊天机器人上演示了概念验证攻击(proof-of-concept)。
此外,MASTERKEY 提供了一种创新方法,可自动生成针对强防御LLM聊天机器人的越狱提示(jailbreak prompts)。通过对一个含有越狱提示的LLM进行微调,我们生成了成功率达 21.58% 的攻击,大幅高于现有方法的 7.33% 成功率。我们已将这些发现通 ...
How Effective Are They? Exploring Large Language Model Based Fuzz Driver Generation
How Effective Are They? Exploring Large Language Model Based Fuzz Driver GenerationAbstractFuzz驱动程序对于库API的模糊测试至关重要。然而,自动生成Fuzz驱动程序是一项复杂的任务,因为这需要编写高质量、正确且健壮的API使用代码。基于大语言模型(LLM,Large Language Model)的Fuzz驱动程序生成方法是一个颇具前景的研究领域。与传统基于程序分析的生成器不同,这种基于文本的方法更加通用,能够利用多样的API使用信息,从而生成更易于人类阅读的代码。然而,目前在这一方向上对其有效性和潜在挑战等基本问题的理解仍然不足。
为弥补这一空白,我们首次针对使用LLM生成高效Fuzz驱动程序的关键问题进行了深入研究。本研究整理了一个包含86个Fuzz驱动生成问题的数据集,涉及30个广泛使用的C项目。我们设计并测试了六种提示策略,并在五种最先进的LLM上使用五种不同的温度设置进行了评估。总共生成了736,430个Fuzz驱动程序,耗费了8.5亿个token(费用超过8000美元)。此外,我 ...