Page 369 - 《软件学报》2026年第3期
P. 369
1332 软件学报 2026 年第 37 卷第 3 期
先前生成的代码片段来检索相似的代码, 辅助后续生成. ReACC [42] 则引入多模态代码表示, 包括代码文本、AST
结构、依赖信息等, 构建多视角检索器, 从多个维度捕获代码语义. RLCoder [28] 则通过强化学习优化检索策略, 自
主学习何时需要检索以及如何筛选上下文.
总体而言, RAG 在软件工程中的应用并非简单复用自然语言处理中的机制, 而是针对任务特性在信息源选择、
检索内容建模、生成器融合等方面做出相应优化设计与任务适配. 这种灵活性与适应性正是其在软件工程场景中
广泛适用的关键原因, 也为未来研究提供了多个可扩展的探索方向.
5.5 研究问题 3 结论
RAG 已经在软件工程研究的各个阶段得到了应用, 涵盖了多种任务, 本节对这些任务进行了更深入的探索,
具体分析不同任务的检索输入和增强生成的方式, 例如在代码生成和补全任务中, RAG 通过整合外部知识资源如
代码示例、API 文档及库信息, 优化了生成策略. 在自动程序修复和漏洞检测与修复应用中, RAG 通过检索历史
修复示例和漏洞案例, 增强了生成器对错误类型和修复模式的理解等. 值得注意的是, 随着 LLM 在软件开发和测
试领域的广泛应用, 它作为 RAG 中的生成器展现了显著的潜力. 与此同时, RAG 在软件需求和软件管理中的应用
仍然处于初步阶段, 这表明这一领域未来可能成为研究的重点.
6 研究难点与未来挑战
根据前文对 RAG 在软件工程中相关研究的介绍可以得知, 尽管 RAG 已经在代码生成和自动修复等软件工
程任务中取得了显著成果, 但现有框架在检索和生成的优化过程中仍然面临很多挑战. 例如, 数据质量的不一致可
能影响检索结果的相关性和准确性, 降低生成代码的质量; 模型对长文本理解能力限制了其对代码全局功能的全
面理解. 此外, 生成模型容易出现“幻觉”现象, 导致生成内容与实际需求不符或包含错误信息, 降低了结果的可靠
性. 本节围绕 RAG 的典型流程, 从知识库构建、检索阶段与生成阶段这 3 个角度对 RAG 在软件工程应用当前所
面临的挑战进行详细的总结分类. 进一步探讨这些问题的成因及其对 RAG 技术应用的影响, 并总结目前存在的解
决方案和未来研究方向.
6.1 知识库构建阶段挑战
知识库阶段的主要挑战在于代码质量和多样性难以保证. RAG 框架依赖大量高质量数据进行检索和生成. 然
而, 软件工程领域的开源代码库质量参差不齐, 可能导致模型学习到不准确或不可靠的知识, 从而影响检索与生成
效果 [27,30] . 此外, 现有代码库和文档的多样性有限, 难以涵盖所有编码风格、编程语言、框架和工具, 限制了模型
在特定上下文中的应用, 导致生成的代码可能不通用或不符合实际需求. 为了提升知识库中代码样本的多样性, 部
分研究尝试通过数据增强或变异策略扩充原有代码数据. 例如, Daneshvar 等人 [60] 在漏洞检测任务中利用 LLM 与
RAG 框架生成多样化的漏洞代码样本, 从而丰富训练数据并提高模型的泛化能力. 尽管这类方法在一定程度上缓
解了数据稀缺问题, 但生成代码的多样性仍受限, 检索到的样本也难以覆盖所有潜在代码模式. 未来可以进一步构
建高质量、广覆盖的代码知识库与评估基准, 涵盖多种软件工程任务与代码仓库场景, 为 RAG 提供更丰富的代码
检索支持.
6.2 检索阶段挑战
检索阶段的主要挑战在于如何实现高效、准确且任务相关的知识检索. RAG 框架依赖高效且准确的检索来
支撑生成质量. 然而, 当前检索策略在匹配精度与表示一致性方面仍存不足: 一方面, 稀疏与密集检索方法各有局
限. 前者难以捕捉深层语义等价关系, 后者则对向量表示质量依赖较高, 尤其在跨库迁移或多任务适配中表现不稳
定. 虽然混合检索融合两者优势, 但在融合策略选择与多源评分平衡上仍面临挑战. 另一方面, 检索器与生成器优
化目标往往不一致, 检索器常返回包含语义冗余或任务无关信息, 导致检索结果的相关性与有效性难以保障. 未来
研究可从两方面改进: 一是引入候选数据聚类、语义筛选和多阶段过滤等策略, 在前处理与后处理中减少冗余信
息; 二是通过强化学习 (如 PPO) 机制优化检索器, 使其结果更符合生成器偏好, 从而整体提升系统性能.

