LLM Hallucinations in Practical Code Generation: Phenomena, Mechanism, and Mitigation
作者: Ziyao Zhang, Yanlin Wang, Chong Wang, Jiachi Chen, Zibin Zheng
分类: cs.SE, cs.AI, cs.CL
发布日期: 2024-09-30 (更新: 2025-01-17)
备注: Accepted by ISSTA 2025
🔗 代码/项目: GITHUB
💡 一句话要点
针对代码生成中LLM幻觉问题,提出RAG方法并在仓库级场景验证有效性
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 代码生成 大型语言模型 幻觉 检索增强生成 软件工程 仓库级代码生成 RAG
📋 核心要点
- 现有LLM代码生成方法在处理复杂上下文依赖时易产生幻觉,尤其是在仓库级别代码生成中。
- 论文提出基于检索增强生成(RAG)的方法,通过检索相关信息来减少LLM代码生成中的幻觉。
- 实验表明,所提出的RAG方法在多个主流LLM上均能有效缓解代码生成中的幻觉问题。
📝 摘要(中文)
代码生成旨在根据输入需求自动生成代码,从而显著提高开发效率。最近基于大型语言模型(LLM)的方法已经显示出令人鼓舞的结果,并彻底改变了代码生成任务。尽管性能良好,但LLM经常生成带有幻觉的内容,尤其是在需要处理实际开发过程中复杂上下文依赖关系的代码生成场景中。虽然之前的研究已经分析了LLM驱动的代码生成中的幻觉,但该研究仅限于独立的函数生成。在本文中,我们进行了一项实证研究,以研究LLM幻觉的现象、机制和缓解方法,该研究位于更实际和复杂的开发上下文中的存储库级生成场景中。首先,我们手动检查来自六个主流LLM的代码生成结果,以建立LLM生成的代码的幻觉分类。接下来,我们详细阐述了幻觉的现象,分析了它们在不同模型中的分布。然后,我们分析了幻觉的原因,并确定了导致幻觉的四个潜在因素。最后,我们提出了一种基于RAG的缓解方法,该方法在所有研究的LLM中都表现出一致的有效性。包含代码、数据和实验结果的复制包可在https://github.com/DeepSoftwareAnalytics/LLMCodingHallucination获得。
🔬 方法详解
问题定义:论文旨在解决大型语言模型(LLM)在实际代码生成场景中,特别是仓库级别代码生成时,产生的幻觉问题。现有方法,尤其是针对独立函数生成的分析,无法有效应对复杂上下文依赖关系带来的挑战,导致生成的代码包含不真实或不一致的内容,影响开发效率和代码质量。
核心思路:论文的核心思路是利用检索增强生成(RAG)框架,通过检索与当前代码生成任务相关的上下文信息,为LLM提供更准确的输入,从而减少幻觉的产生。这种方法借鉴了人类在编写代码时会查阅相关文档和代码示例的习惯,旨在让LLM在生成代码时也能参考外部知识,提高代码的可靠性和正确性。
技术框架:整体框架包含以下几个主要阶段:1) 需求分析:解析用户输入的代码生成需求。2) 信息检索:根据需求,从代码仓库或其他知识源中检索相关的代码片段、文档或API说明。3) 上下文增强:将检索到的信息与原始需求进行融合,形成增强的上下文。4) 代码生成:将增强的上下文输入LLM,生成代码。5) 后处理:对生成的代码进行必要的格式化和验证。
关键创新:论文的关键创新在于将RAG框架应用于仓库级别的代码生成,并针对代码生成的特点进行了优化。与传统的RAG方法相比,该方法更加注重代码上下文的理解和利用,能够更有效地减少LLM在代码生成过程中产生的幻觉。此外,论文还对LLM代码生成中的幻觉进行了分类,并分析了其产生的原因,为后续的研究提供了有价值的参考。
关键设计:论文的关键设计包括:1) 检索策略:设计高效的检索算法,快速准确地找到与当前代码生成任务相关的代码片段。2) 上下文融合:研究如何将检索到的信息与原始需求进行有效融合,避免引入噪声。3) LLM选择:选择合适的LLM,并根据代码生成的特点进行微调。4) 评估指标:设计合适的评估指标,用于衡量代码生成结果的质量和幻觉的程度。
🖼️ 关键图片
📊 实验亮点
论文通过实验验证了RAG方法在缓解LLM代码生成幻觉方面的有效性。实验结果表明,在多个主流LLM上,使用RAG方法后,生成的代码质量显著提高,幻觉现象明显减少。具体的性能数据和提升幅度在论文中进行了详细的展示。
🎯 应用场景
该研究成果可应用于智能代码助手、自动化代码生成平台等领域,帮助开发者更高效、更可靠地生成代码。通过减少LLM代码生成中的幻觉,可以提高软件开发的效率和质量,降低开发成本,并促进人工智能在软件工程领域的应用。
📄 摘要(原文)
Code generation aims to automatically generate code from input requirements, significantly enhancing development efficiency. Recent large language models (LLMs) based approaches have shown promising results and revolutionized code generation task. Despite the promising performance, LLMs often generate contents with hallucinations, especially for the code generation scenario requiring the handling of complex contextual dependencies in practical development process. Although previous study has analyzed hallucinations in LLM-powered code generation, the study is limited to standalone function generation. In this paper, we conduct an empirical study to study the phenomena, mechanism, and mitigation of LLM hallucinations within more practical and complex development contexts in repository-level generation scenario. First, we manually examine the code generation results from six mainstream LLMs to establish a hallucination taxonomy of LLM-generated code. Next, we elaborate on the phenomenon of hallucinations, analyze their distribution across different models. We then analyze causes of hallucinations and identify four potential factors contributing to hallucinations. Finally, we propose an RAG-based mitigation method, which demonstrates consistent effectiveness in all studied LLMs. The replication package including code, data, and experimental results is available at https://github.com/DeepSoftwareAnalytics/LLMCodingHallucination