Page 361 - 《软件学报》2026年第3期
P. 361

1324                                                       软件学报  2026  年第  37  卷第  3  期


                 框架下检索与生成信息的多种集成方式.
                    ● 提示工程. 提示工程的优势在于其实现简单高效, 不需要对模型进行复杂的训练或调整, 且能够充分利用检
                 索到的上下文信息       [58] . 然而, 其效果在很大程度上依赖于提示的设计质量, 需确保模型能够正确理解并利用其中
                 包含的信息. 首先, 通过代码示例的嵌入           [35,59] , 研究者们将检索到的代码片段与未完成的代码上下文结合, 构建包
                 含任务描述和相关代码的上下文提示, 确保生成的代码补全具备语义一致性并减少错误. 其次, 针对漏洞代码示例
                 与重要代码行     [60] , 提示模板被设计用于将不同生成策略下的漏洞代码示例和关键代码行嵌入提示, 指导                         LLM  生
                 成包含特定漏洞特性的代码片段. 此外, 通过集成源代码片段或文档                    [61–63] , 提示工程将检索到的相关源代码或       API
                 文档添加到用户查询中, 构建包含必要上下文信息的提示, 并通过精简和过滤确保提示内容在                             LLM  的上下文长度
                 限制内, 从而提高代码翻译和查询的准确性与稳定性. 对于测试用例与相关文档                         [49] , 详细的系统提示将检索到的
                 相关文档、代码片段和先前的测试用例嵌入生成提示, 提供丰富的上下文信息, 引导                          LLM  生成符合需求的测试用
                 例, 提升测试覆盖率和缺陷检测能力           [64] . 在涉及代码结构与依赖关系信息的应用          [50,65] , 提示工程通过将检索到的代
                 码图结构信息或仓库特定的关键元素和相关用法嵌入提示中, 动态调整提示内容, 以形成反馈循环, 提高生成的相
                 关性和准确性, 确保生成的代码符合仓库的编码规范和依赖关系. 对于                     API 规范与函数块信息      [66,67] , 提示模板设计
                 包括库描述和     API 列表, 将检索到的具体      API 信息嵌入生成提示中, 指导        LLM  正确使用预定义的函数块或生成
                 准确且功能性强的代码示例, 确保代码的正确性和可维护性. 最后, 在提交信息示例的生成中                            [27] , 通过将检索到的
                 代码差异和对应的提交信息示例整合进提示模板, 利用先进的检索技术和精确的提示设计, 显著提升了提交信息
                 生成任务的质量.
                    ● 模型融合. 模型融合策略从架构角度出发, 通过引入特定的融合模块 (如多源注意力机制或门控单元等), 在
                 模型内部深度整合检索到的外部信息和原始输入数据. 该类策略通常需要针对特定的软件工程任务, 对                                RAG  模型
                 架构进行相应改动, 同时涉及模型的微调或重新训练, 增加了实现的复杂性和计算成本. 例如, CMR-Sum                           [36] 通过跨
                 注意力机制和门控机制, 将检索到的跨模态摘要信息深度融合到生成模型中, 显著提升了代码摘要的质量. 如图                                  5
                 所示, CMR-Sum  框架由生成模块、检索模块与提取模块组成, 各模块协同工作实现生成与检索的深度集成: 生成
                 模块根据源代码生成初步摘要, 检索模块则从外部数据库动态获取语义相近的摘要, 而提取模块通过跨注意力机
                 制对生成摘要与检索摘要进行对齐, 并使用复制门机制融合两者的表示分布, 从而输出更为准确与凝练的摘要内
                 容. CoCoMIC [68] 则在  Transformer 架构的每一层中, 通过引入多源注意力机制, 融合了跨文件的上下文信息和文件
                 内的上下文信息, 使得模型在编码和解码过程中能够同时关注本文件和相关文件的内容. 这种深度融合的方式, 使
                 得模型能捕获更全面的代码依赖关系和上下文信息, 从而在代码补全和跨文件代码生成任务中表现出更高的准确
                 性和连贯性. 总体而言, 此类模型融合策略虽需对模型结构进行修改, 但在特定任务中, 通过深度融合外部代码知
                 识库展现出显著优势, 尤其适用于生成质量较高的任务.
                    ● 迭代的检索-生成循环. 迭代的检索-生成循环是一种在生成过程中反复进行检索和生成的策略, 通过多次交
                 互, 逐步完善生成结果. 该方法允许模型根据当前的生成状态或中间结果, 动态地检索新的上下文信息, 从而在后
                 续的生成中加以利用, 实现生成质量的持续提升. 迭代的检索-生成循环的优势在于其动态性和灵活性, 但可能会
                 增加计算成本和时间开销. 在         RepoCoder  [35] 的研究中, 模型首先根据初始输入生成代码片段, 然后根据生成的中间
                 结果, 迭代地检索仓库中相关的代码片段和上下文信息. 这些检索到的内容被逐步添加到模型的输入中, 使得模型
                 在每次生成时都能参考更全面的上下文, 提高代码生成的准确性和与代码仓库的兼容性. 类似地, De-Hallucinator                        [38]
                 根据输入生成初步代码后执行该代码并验证其正确性, 根据执行结果与预期之间的差异, 分析错误并通过外部知
                 识库或反馈机制对模型提供校验信息, 模型根据这些反馈信息调整生成策略并重新生成代码再次验证, 直到生成
                 的代码符合预期效果或符合可接受标准. 图              6  展示了  De-Hallucinator 如何通过更多  API 信息  (如  relevance 函数)
                 和不断优化排序依据, 逐步改进生成的代码. 最初的简单排序基于文档的                      score, 经过迭代优化后, 最终基于文档与
                 关键词之间的相关性        (通过  relevance 计算) 来进行排序. InferFix [69] 采用了迭代的检索-生成策略, 在生成修复代码
                 之前, 首先检索与当前错误相关的历史修复示例, 将其作为提示提供给生成模型. 生成模型在参考这些示例的基础
   356   357   358   359   360   361   362   363   364   365   366