Clover: Closed-Loop Verifiable Code Generation
作者: Chuyue Sun, Ying Sheng, Oded Padon, Clark Barrett
分类: cs.AI, cs.LG, cs.SE
发布日期: 2023-10-26 (更新: 2024-11-16)
备注: add appendix
💡 一句话要点
提出Clover以解决代码生成的正确性验证问题
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 代码生成 正确性验证 一致性检查 大型语言模型 形式验证工具
📋 核心要点
- 现有的代码生成方法缺乏有效的正确性验证机制,可能导致生成代码的错误,影响软件开发的可靠性。
- Clover通过一致性检查在代码、文档字符串和形式注释之间建立联系,确保生成代码的正确性,提升代码质量。
- 实验结果显示,Clover在CloverBench数据集上对正确实例的接受率达87%,且未出现假阳性,表现出色。
📝 摘要(中文)
随着大型语言模型在代码生成中的应用日益普及,确保生成代码的正确性成为一项重要挑战。本文提出了Clover(闭环可验证代码生成)范式,通过一致性检查为错误代码提供强有力的过滤。Clover在代码、文档字符串和形式注释之间进行一致性检查,结合了形式验证工具与大型语言模型的创新集成。理论分析支持Clover在一致性检查中的有效性,实验证明其在手工设计的数据集CloverBench上表现出色,生成的形式规范成功率合理,且一致性检查器对正确实例的接受率高达87%,对错误实例则实现了零假阳性。此外,Clover还在现有人类编写的数据集MBPP-DFY-50中发现了6个错误程序。
🔬 方法详解
问题定义:本文旨在解决大型语言模型生成代码时的正确性验证问题。现有方法缺乏有效的机制来确保生成代码的准确性,可能导致软件开发中的错误和不可靠性。
核心思路:Clover的核心思路是通过一致性检查来验证生成代码的正确性。它通过比较代码、文档字符串和形式注释之间的一致性,来过滤掉错误的代码生成结果。
技术框架:Clover的整体架构包括三个主要模块:代码生成模块、形式验证模块和一致性检查模块。代码生成模块利用大型语言模型生成代码,形式验证模块使用形式验证工具进行代码的形式化验证,而一致性检查模块则负责对生成的代码和相关文档进行一致性分析。
关键创新:Clover的关键创新在于将形式验证工具与大型语言模型进行创新性集成,形成闭环的验证机制。这种设计使得代码生成与验证过程相互关联,显著提高了生成代码的正确性。
关键设计:在技术细节上,Clover采用了特定的参数设置以优化一致性检查的性能,并设计了适合于形式验证的损失函数,以确保生成的代码与文档之间的一致性。
🖼️ 关键图片
📊 实验亮点
Clover在CloverBench数据集上的实验结果显示,生成的形式规范成功率达到合理水平,而一致性检查器对正确实例的接受率高达87%,且未出现假阳性,表现出色。此外,Clover还成功发现了6个错误程序,进一步验证了其有效性。
🎯 应用场景
Clover的研究成果在软件开发、自动化测试和代码审查等领域具有广泛的应用潜力。通过提高代码生成的正确性,Clover可以有效减少软件开发中的错误,提升软件的可靠性和安全性,未来可能对开发流程产生深远影响。
📄 摘要(原文)
The use of large language models for code generation is a rapidly growing trend in software development. However, without effective methods for ensuring the correctness of generated code, this trend could lead to undesirable outcomes. In this paper, we introduce a new approach for addressing this challenge: the Clover paradigm, short for Closed-Loop Verifiable Code Generation, which uses consistency checking to provide a strong filter for incorrect code. Clover performs consistency checks among code, docstrings, and formal annotations. The checker is implemented using a novel integration of formal verification tools and large language models. We provide a theoretical analysis to support our thesis that Clover should be effective at consistency checking. We also empirically investigate its performance on a hand-designed dataset (CloverBench) featuring annotated Dafny programs at a textbook level of difficulty. Experimental results show that for this dataset: (i) LLMs are reasonably successful at automatically generating formal specifications; and (ii) our consistency checker achieves a promising acceptance rate (up to 87%) for correct instances while maintaining zero tolerance for adversarial incorrect ones (no false positives). Clover also discovered 6 incorrect programs in the existing human-written dataset MBPP-DFY-50.