Page 360 - 《软件学报》2026年第3期
P. 360
张犬俊 等: 检索增强生成在软件工程中的应用综述 1323
习框架, 将检索器的参数和检索结果视为状态, 调整检索策略 (如选择哪些候选文档) 作为动作, 并根据生成模型
的性能反馈 (如生成代码的困惑度降低) 作为奖励. 通过交互式学习, 检索器与生成模型协同作用, 学习能够提升
生成性能的检索策略, 并根据奖励信号不断优化检索器的策略, 该方法适用于没有大规模标注数据的场景, 能够通
过强化学习自主优化检索器, 从而提高生成模型的性能. 例如, 在 RLCoder [28] 中, 检索器通过强化学习, 学习如何检
索对代码补全有帮助的代码片段, 使用停止信号机制决定何时停止检索. 强化学习优化检索的优势在于检索器能
够根据生成模型的反馈, 自主优化检索策略, 无需大量标注数据, 降低了训练成本, 通过强化学习, 检索器能够找到
最有助于生成的检索结果, 提升生成质量.
4.1.3 混合检索器
混合检索器通过结合稀疏检索和密集检索的优势, 实现更高效和精准的文档检索. 通常来说, 首先使用稀疏检
索 (如 BM25) 快速筛选出一组与查询关键词相关的候选文档; 随后使用密集编码器对候选文档与查询进行语义编
码, 计算语义相似度; 最后将稀疏与密集两种评分结果进行归一化与加权融合, 形成最终的混合得分, 并按该得分
排序返回文档. 通过这种方式, 混合检索器不仅能保持对关键字的高效匹配能力, 还能捕捉更深层次的语义关系, 从
[37]
[30]
而提升检索结果的整体质量. 例如, 在 kNM-LM 和 RRGcode 中, 混合检索器通过整合 BM25 和 GraphCodeBERT
的能力, 显著提升了代码片段的相关性和生成质量. 在 REACT [27] 中, 为了更准确地评估代码差异的相似性并检索
最相关的差异代码对, 设计的混合检索器结合了 BM25 的关键词匹配评分和 CodeT5+ [43] 的语义相似度评分, 通过
加权融合实现了更为健壮和有效的检索效果. REPOFUSE [44] 通过结合 BM25 和 DPR 的多视角检索策略, 对代码片
段的功能描述、语义层级和代码结构等多个维度进行加权重排序, 确保返回最符合需求的代码片段.
4.2 生成器组件
生成器负责生成响应或进行预测, 它们通常基于输入和相应的检索结果来生成结果. 在现有基于 RAG 的软件
工程研究中, 根据是否需要对生成器模型参数进行更新, 生成器主要可以分为两大类: 基于参数微调的生成器和基
于参数冻结的生成器.
4.2.1 基于参数微调的生成器
[4]
该类生成器以白盒 PLM 为代表, 如 CodeT [45–47] 、PLBART [27,30] 和 PolyCoder , 它们专门针对代码理解和生成
任务进行设计和训练. 这类模型通常采用编码器-解码器架构, 在大规模代码语料上通过掩码语言建模和序列生成
等自监督目标进行预训练, 学习代码的语法结构、语义关系与常见编程模式, 从而具备强大的代码理解和生成能
力. 在 RAG 应用中, 这些模型需要在具体任务上进行监督微调, 例如代码补全、代码重构和提交信息生成, 以进一
步优化其在这些任务中的表现. 此外, 一些研究进一步引入先进的训练策略对生成器模型进行优化. 例如, 在代码
补全或重构任务中 [28] , 基于强化学习设计奖励机制鼓励模型生成更准确的代码, 以提升该类模型在特定应用场景
中的性能和适应性.
4.2.2 基于参数冻结的生成器
参数冻结式生成器主要以黑盒 LLM 为代表, 如 GPT-4 [48–52] 、GPT-4o [3,27,46,50,53] 、DeepSeek-Coder [28,46,53,54] 、
[55] [28,56] [46,57]
Qwen2 、CodeLLaMA 和 CodeGemma . 这类模型通常采用自回归训练范式, 在海量自然语言与代码数据
上进行预训练, 从而具备理解复杂指令、处理长上下文信息的能力. 基于这一特性, 冻结式生成器无需进一步训
练, 即可通过适当的提示直接完成多种代码生成任务, 展现出良好的泛化能力, 这使得其在计算资源有限或对部署
效率要求较高的应用场景中具有显著优势. 同时在复杂场景中 (如多语言代码补全和仓库级代码生成等), 这类模
型还可结合 RAG 框架提供少量输入-输出示例, 从而快速适应各种任务. 例如, CREADE [45] 在程序修复和断言生成
任务中, 基于历史相似案例增强提示模板, 引导 Codex 高效完成生成任务. 尽管冻结式生成器在通用任务中展现出
卓越的灵活性与适应性, 但在某些特定任务上可能仍不及经过额外训练的参数微调式生成器. 然而, 随着更先进的
LLM 持续推出, 以及其无需额外训练即可适配多种场景的特性, 使得该类生成器在基于 RAG 的软件工程任务中
愈发流行.
4.3 检索器和生成器的集成策略
在 RAG 框架中, 检索器与生成器的有效集成是提升代码生成与修复任务性能的关键. 本节主要探讨了 RAG

