Page 365 - 《软件学报》2026年第3期
P. 365
1328 软件学报 2026 年第 37 卷第 3 期
混合检索从大型代码库中检索相似的代码片段, 提供实际的实现参考, 帮助生成器生成更准确的补全信息. Repo-
Coder [35] 和 RAMBO [65] 等方法采用了迭代检索-生成流程, 利用生成器的初始输出优化检索结果, 逐步提高生成质
量. 例如, RepoCoder [35] 在生成初始代码补全后, 利用生成的部分代码再次检索仓库, 获取更相关的代码片段, 进一
步完善补全结果. GraphCoder [81] 和 CoCoMIC [68] 构建了代码上下文图, 捕获代码之间的依赖关系和结构信息, 进行
精细的相似度计算和检索, 帮助生成器更准确地理解代码的语义和依赖, 避免生成错误的函数调用或变量引用.
RLCoder [28] 通过强化学习训练检索器, 自主决定何时需要检索仓库上下文, 以及保留哪些候选项, 无需标注数据,
优化检索策略, 提高检索结果的相关性, 减少无用或干扰信息对代码补全的影响. RAMBO [65] 和 REPOFUSE [44] 等
方法聚焦于项目特定元素的检索, 识别并检索仓库中特定的关键元素 (如类、方法、变量) 及其使用示例, 提供
项目特定的上下文信息, 生成更符合项目规范和实际需求的代码. 通过这些策略, 生成器能够更好地理解项目的
编码风格和依赖关系, 生成更一致的代码. 此外, 在生成器的增强方面, 研究者们通过提示工程与模板设计, 将检
索到的上下文信息嵌入到生成器的输入中, 指导生成过程. 例如, De-Hallucinator [38] 利用初始生成结果, 迭代检索
相关的 API 引用, 更新提示, 减少模型的幻觉现象, 确保生成代码符合实际 API 和项目规范. CoCoMIC [68] 引入了
联合注意力机制, 在生成器的每一层中, 对文件内和跨文件上下文进行联合注意力计算, 综合利用多种上下文信
息, 提高生成的准确性.
RAG的8种代码任务
基础编程任务×3 开放域任务×2 仓库级任务×2 代码检索任务×1
5种文档检索来源 可复现的检索与端到端评估
编程解决方案
库文档
使用模型
在线教程
StackOverflow帖子
数据存储 检索器
GitHub仓库
评估 √与标准文档对比 √基于执行的端到端评估
图 9 针对代码生成的 RAG 模型示例 [46]
(3) 代码摘要
RAG 在代码摘要任务中指通过利用检索到的相关代码或摘要, 提供丰富的上下文信息, 增强模型对代码的理
解, 通过不同的融合方式 (如交叉注意力、表示融合、语义增强等), 将检索信息融入生成过程, 动态调整对检索结
果的依赖, 避免过度拟合或盲目复制, 从而提升了代码摘要的质量和性能 [82] . CMR-Sum [36] 提出了一个跨模态检索
增强的代码摘要框架, 在训练阶段动态检索与代码片段相关的原型摘要, 并在生成过程中通过交叉注意力机制对
齐生成摘要与检索摘要. 这样, 生成的摘要更加流畅且符合语义, 同时避免了模型过度依赖固定的检索结果, 提升
了对未见样本的泛化能力. Zhao 等人 [32] 将大语言模型与上下文学习相结合, 利用自定义的检索策略, 从历史智能
合约代码库中检索与目标代码相似的代码片段及其注释, 作为模型的提示. 这种方法有效利用了高质量的检索示
例, 增强了模型对智能合约领域的理解, 生成更准确和信息丰富的代码摘要. Ahmed 等人 [83] 提出了语义增强的提
示方法, 在 few-shot 示例中加入数据流图、标记的标识符等语义信息, 通过检索相关示例, 显式提供代码的语义信
息, 减少模型自我推理的复杂度, 提高生成准确性. RACE 方法 [84] 将检索到的相似代码变更及其提交信息作为示

