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

张犬俊 等: 检索增强生成在软件工程中的应用综述                                                        1333


                  6.3   生成阶段挑战
                    生成阶段的主要挑战在于输入上下文处理能力受限. 生成器模型在处理长文本时受制于上下文长度的限制,
                 RAG  方法需要在有限的上下文窗口内有效地选择和组织上下文信息, 以提供最有用的内容, 提升模型性能. 为应
                 对这一挑战, 研究者提出了多种策略. 例如, 选择性检索和上下文精简                  [49,61] 通过检索与查询高度相关的源代码片段         [25]
                 或文档, 通过去冗余策略过滤掉重复的示例, 仅保留包含新增信息的样本以丰富上下文内容, 并对其进行精简后添
                 加到提示中, 减少不必要的信息量. 分层检索策略              [81] 则采用从粗到细的多级检索机制, 先进行粗粒度的检索, 再细
                 化到细粒度, 以逐步缩小上下文范围, 减少上下文长度. 迭代检索和生成方法                      [8] 则通过多轮交替检索和生成, 逐步
                 提供必要的上下文信息, 避免一次性加载过多内容. 上下文压缩技术                     [60] 通过对类或代码进行压缩, 尽可能在有限
                 的上下文窗口内容纳更多相关信息.
                    生成阶段的另一个挑战在于输出结果正确性和可靠性难以保证. 作为 RAG 框架中的最终决策环节, 生成模块
                 的输出质量受多方面因素共同影响, 包括检索内容的准确性、上下文构造的合理性以及模型自身的参数表现. 首
                 先, 在对代码精确性要求较高的场景中, 若缺乏完整的上下文信息支持, 生成模型往往难以输出完整或正确的代码
                 结果. 当涉及未见过的 API、库函数或项目依赖时, 模型可能推荐错误接口或生成不可执行代码                             [30,66] . 其次, 生成
                 模型以静态参数运行, 可能存在“幻觉”问题, 即在缺乏充分上下文或知识支撑的情况下生成不真实、不可执行或
                 逻辑错误的代码内容, 降低生成结果的可靠性. 再者, 现实软件项目持续迭代更新, 使得模型所学习到的知识在面
                 对最新代码库或依赖版本时可能已然过时, 进一步加剧了生成质量的不确定性. 针对上述问题, 可从两方面探索:
                 一方面, 通过提示模板优化与生成后验证机制               (如语法检测和测实验证) 提升结果可靠性; 另一方面, 可在训练阶
                 段引入更加先进的策略, 例如生成-评估-反馈式的多轮优化框架, 或联合检索器与生成器的协同训练机制, 以实现
                 对生成准确性与知识更新能力的提升.
                  7   总 结


                    本文系统梳理了检索增强生成            (RAG) 在软件工程领域的应用, 并详细分析了            2021–2024  年间相关研究的出
                 版趋势、主要发表刊物、常用编程语言及模型分布. 具体而言, 本文着重分析了检索器和生成器在软件工程应用
                 中的关键流程以及集成方法, 详细解析了在不同下游任务中的具体结构和实现方法. 此外, 全面梳理了                               RAG  在代
                 码生成、代码补全、自动程序修复、漏洞检测与修复等多个应用场景中的实践, 探讨其如何通过优化检索策略、
                 增强语义理解以及融合多源知识来提升任务性能. 同时, 还讨论了当前                     RAG  应用面临的知识库质量、代码上下文
                 理解以及输出代码正确性等主要挑战, 为后续研究方向提供了重要的参考依据. 总体而言, RAG                             技术在软件工程
                 领域展示了广泛的应用潜力, 能够显著推动软件开发的自动化和智能化进程, 但其持续发展仍需克服若干关键性
                 问题.

                 References
                  [1]   Biolchini J, Mian PG, Natali AC, Travassos GH. Systematic review in software engineering. Rio de Janeiro: System Engineering and
                      Computer Science Department COPPE/UFRJ, 2005.
                  [2]   Zelkowitz MV. Perspectives in software engineering. ACM Computing Surveys (CSUR), 1978, 10(2): 197–216. [doi: 10.1145/356725.
                      356731]
                  [3]   Yang YM, Xia X, Lo D, Grundy J. A survey on deep learning for software engineering. ACM Computing Surveys (CSUR), 2022,
                      54(10s): 206. [doi: 10.1145/3505243]
                  [4]   Wang JJ, Huang YC, Chen CY, Liu Z, Wang S, Wang Q. Software testing with large language models: Survey, landscape, and vision.
                      IEEE Trans. on Software Engineering, 2024, 50(4): 911–936. [doi: 10.1109/TSE.2024.3368208]
                  [5]   Devlin J, Chang MW, Lee K, Toutanova K. BERT: Pre-training of deep bidirectional Transformers for language understanding. In:
                      Proc.  of  the  2019  Conf.  of  the  North  American  Chapter  of  the  Association  for  Computational  Linguistics:  Human  Language
                      Technologies. Minneapolis: ACL, 2019. 4171–4186.
                  [6]   Raffel C, Shazeer N, Roberts A, Lee K, Narang S, Matena M, Zhou YQ, Li W, Liu PJ. Exploring the limits of transfer learning with a
                      unified text-to-text Transformer. Journal of Machine Learning Research, 2020, 21(1): 140.
   365   366   367   368   369   370   371   372   373   374   375