Page 354 - 《软件学报》2026年第3期
P. 354
张犬俊 等: 检索增强生成在软件工程中的应用综述 1317
base construction, retrieval, and generation, with the future research directions and potential development paths pointed out. Generally, this
study provides a comprehensive review of RAG research for the software engineering community, aiming to help researchers have a
systematic understanding of the current achievements and an insight into key problems, and promote the further development of this field.
Key words: retrieval-augmented generation (RAG); software engineering; large language model (LLM)
1 引 言
软件工程 (software engineering, SE) 是一个至关重要的领域, 专注于系统化且可预测地设计、开发、测试和
维护软件系统 [1] . 随着软件在各个行业 (如交通、医疗和教育) 中的基础设施作用日益增强, 软件工程在现代社会中
扮演着不可或缺的角色, 可确保软件以系统化、可靠和高效的方式构建 [2] . 作为一个非常活跃的研究方向, 软件工
程已经得到了广泛的研究, 并且长期以来一直受到学术界和工业界的关注 [3,4] . 近年来, 预训练语言模型 (pre-trained
language model, PLM) 和大语言模型 (large language model, LLM) 的出现进一步推动软件工程的发展. 诸如
[5]
[7]
[6]
BERT 、T5 和 GPT 等模型通过在大规模未标注数据上的自监督训练, 成功地在自然语言处理 (natural
language processing, NLP) 领域解决了多种复杂任务, 并在代码理解、代码生成和程序修复等方面展现出了强大的
潜力. 以 ChatGPT 为代表的新一代 LLM 凭借超大规模参数量, 为自动化处理代码相关任务带来了新的机遇. 然而,
软件工程流程本身具有较高的复杂度, 包括软件开发、测试和维护等多个环节. 而检索增强生成 (retrieval-augmented
generation, RAG) 框架的提出, 为在软件工程领域高效利用 PLM 和 LLM 提供了一条新路径.
在软件工程领域使用的 RAG 框架是一种结合信息检索与代码生成的混合范式, 专门用于提升代码生成和修
复的能力. 如图 1 所示, RAG 框架通过两个主要模块协同工作: 检索器模块 (retriever) 通过查询相关的代码库或文
档, 获取与当前任务相关的代码片段或文档; 生成器模块 (generator) 则基于这些检索到的材料生成新的代码片段
或修复方案. 具体实现上, 用户输入的自然语言描述、代码片段或两者结合的查询通过分词器进行分词, 并由基
于 Transformer 的编码器转化为高维向量表示. 这些向量捕捉了输入的语义和结构信息, 并通过自监督学习方法增
强对代码语义的理解. 随后, 检索器利用这些向量在预先构建的向量数据库中执行多种检索方法, 包括稀疏向量检
[8]
索 (如 BM25)、密集向量检索 (如 CodeBERT 编码向量)、混合检索和基于图的检索等, 从庞大的代码库中高效
提取相关代码片段或文档. 通过多粒度检索和结果重排序机制, 确保检索结果的相关性与多样性. 检索到的相关信
息通过编码器转换为向量, 并与原始查询的向量结合后输入生成器, 生成器采用 PLM (如 CodeT5 ) 或 LLM (如
[9]
Codex [10] ), 通过解码器根据融合后的向量信息生成符合需求的代码或修复建议. 编码器与解码器的深度集成至关
重要, 可以通过提示工程 (prompt engineering) 将检索到的代码片段嵌入生成提示中, 或在生成模型内部引入多源
注意力机制, 以实现对检索信息的细粒度利用. RAG 模型的优势在于, 通过检索外部知识库, 能够将代码模式、API
调用信息、历史修复示例等多源数据灵活整合到代码生成或修复过程中, 显著提升模型在处理复杂或特定场景任
务时的表现. 此外, 迭代的检索-生成循环和联合训练方法进一步优化检索与生成的协同效应, 使检索器能够根据
生成器的反馈调整检索策略, 确保生成结果的准确性和相关性.
步骤1: 检索器 步骤2: 生成器
输入: 代码查询 代码库 相似代码 输出: 最终方案
图 1 基于 RAG 框架的代码检索与生成流程
检索增强生成技术在诸多软件工程下游任务中得到广泛应用, 并展现出强大的灵活性和适应性 [11–13] . 例如,
RAG 在代码生成和补全中 [14–16] , 通过检索外部代码示例、API 文档和库信息, 为生成器提供更丰富的上下文, 帮
助模型更好地理解任务需求; 在自动程序修复和漏洞检测与修复中, 通过检索历史修复示例和相关上下文, 增强模
型对错误类型和修复模式的理解, 从而提高修复补丁的准确度. 此外, 在代码摘要、Text-to-SQL 和代码注释生成

