Training Language Models to Generate Quality Code with Program Analysis Feedback

📄 arXiv: 2505.22704v1 📥 PDF

作者: Feng Yao, Zilong Wang, Liyuan Liu, Junxia Cui, Li Zhong, Xiaohan Fu, Haohui Mai, Vish Krishnan, Jianfeng Gao, Jingbo Shang

分类: cs.CL, cs.AI

发布日期: 2025-05-28

备注: 10 pages, 3 figures


💡 一句话要点

REAL框架:利用程序分析反馈训练语言模型生成高质量代码

🎯 匹配领域: 支柱二:RL算法与架构 (RL & Architecture) 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 代码生成 大型语言模型 强化学习 程序分析 单元测试 代码质量 安全漏洞 可维护性

📋 核心要点

  1. 现有代码生成方法依赖于人工标注或脆弱的启发式规则,难以保证代码质量,尤其是在安全性和可维护性方面。
  2. REAL框架利用强化学习,通过程序分析和单元测试的自动反馈,指导LLM生成更高质量的代码,无需人工干预。
  3. 实验结果表明,REAL在多个数据集和模型规模上,能够显著提升代码的功能性和质量,优于现有方法。

📝 摘要(中文)

本文提出REAL,一个强化学习框架,旨在利用程序分析引导的反馈,激励大型语言模型(LLMs)生成生产质量的代码。REAL集成了两种自动信号:程序分析检测安全性和可维护性缺陷,以及单元测试确保功能正确性。与以往工作不同,该框架与提示无关且无需参考,从而实现无需人工干预的可扩展监督。在多个数据集和模型规模上的实验表明,REAL在功能和代码质量的同步评估中优于最先进的方法。这项工作弥合了快速原型设计和生产就绪代码之间的差距,使LLM能够同时提供速度和质量。

🔬 方法详解

问题定义:现有的大型语言模型(LLMs)在代码生成方面取得了显著进展,但生成的代码质量难以保证,尤其是在安全漏洞(如SQL注入)和可维护性(如缺少类型注解)方面。现有的方法,如监督微调和基于规则的后处理,依赖于大量的人工标注或脆弱的启发式规则,限制了它们的可扩展性和有效性。因此,如何让LLMs生成既具备功能性又符合生产质量要求的代码是一个关键问题。

核心思路:REAL框架的核心思路是利用强化学习,通过自动化的程序分析和单元测试来提供反馈信号,从而引导LLMs生成更高质量的代码。这种方法避免了人工标注的成本,并且能够更有效地发现和修复代码中的缺陷。通过奖励高质量的代码,惩罚存在缺陷的代码,REAL框架能够训练LLMs生成更安全、更易于维护的代码。

技术框架:REAL框架的整体架构包括以下几个主要模块:1) 代码生成器:使用LLM生成代码;2) 程序分析器:自动检测生成的代码中存在的安全漏洞和可维护性问题;3) 单元测试器:自动运行单元测试,验证生成的代码的功能正确性;4) 奖励函数:根据程序分析和单元测试的结果,计算奖励值,用于指导LLM的训练;5) 强化学习算法:使用强化学习算法(如策略梯度)更新LLM的参数,使其能够生成更高质量的代码。

关键创新:REAL框架的关键创新在于其利用程序分析和单元测试的自动反馈来指导LLM的训练,无需人工干预。与现有的方法相比,REAL框架具有更高的可扩展性和有效性,能够更有效地生成生产质量的代码。此外,REAL框架是prompt-agnostic和reference-free的,这意味着它不依赖于特定的提示或参考代码,可以应用于更广泛的场景。

关键设计:REAL框架的关键设计包括:1) 程序分析器的选择:选择能够有效检测安全漏洞和可维护性问题的程序分析工具;2) 单元测试的设计:设计能够全面覆盖代码功能的单元测试用例;3) 奖励函数的定义:定义能够准确反映代码质量的奖励函数,例如,可以根据检测到的安全漏洞数量、单元测试通过率等指标来计算奖励值;4) 强化学习算法的选择:选择适合代码生成任务的强化学习算法,例如,可以使用策略梯度算法或Actor-Critic算法。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

实验结果表明,REAL框架在多个数据集和模型规模上,能够显著提升代码的功能性和质量。例如,在HumanEval数据集上,REAL框架能够将代码的Pass@1指标提升到state-of-the-art水平,同时显著降低代码中存在的安全漏洞数量。此外,实验还表明,REAL框架具有良好的泛化能力,能够应用于不同的代码生成任务。

🎯 应用场景

REAL框架具有广泛的应用前景,可以应用于各种代码生成场景,例如,可以用于自动生成Web应用程序、移动应用程序、数据库查询等。该框架可以帮助开发者快速生成高质量的代码,提高开发效率,降低开发成本。此外,REAL框架还可以用于代码修复和代码优化,自动修复代码中的安全漏洞和可维护性问题,提高代码的质量和可靠性。未来,REAL框架有望成为代码生成领域的重要技术。

📄 摘要(原文)

Code generation with large language models (LLMs), often termed vibe coding, is increasingly adopted in production but fails to ensure code quality, particularly in security (e.g., SQL injection vulnerabilities) and maintainability (e.g., missing type annotations). Existing methods, such as supervised fine-tuning and rule-based post-processing, rely on labor-intensive annotations or brittle heuristics, limiting their scalability and effectiveness. We propose REAL, a reinforcement learning framework that incentivizes LLMs to generate production-quality code using program analysis-guided feedback. Specifically, REAL integrates two automated signals: (1) program analysis detecting security or maintainability defects and (2) unit tests ensuring functional correctness. Unlike prior work, our framework is prompt-agnostic and reference-free, enabling scalable supervision without manual intervention. Experiments across multiple datasets and model scales demonstrate that REAL outperforms state-of-the-art methods in simultaneous assessments of functionality and code quality. Our work bridges the gap between rapid prototyping and production-ready code, enabling LLMs to deliver both speed and quality.