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] 将检索到的相似代码变更及其提交信息作为示
   360   361   362   363   364   365   366   367   368   369   370