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

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


                 成到生成过程中, 模型在生成代码时可以动态地检索                 API 信息, 选择合适的     API 调用, 显著提升了代码生成的准
                 确性, 特别是在使用不熟悉的库或          API 时. AutoAPIEval [66] 框架通过检索  API 文档, 为生成器提供准确的     API 用法
                 信息, 确保生成的代码正确地使用了           API, 解决了模型在调用      API 时可能出现的错误, 提高了代码的可编译性和可
                 执行性. 此外, RAG    还通过检索并生成导入语句和库使用模式, 确保生成的代码正确使用指定的第三方库.
                 CodeGen4Libs [45] 采用两阶段生成机制, 首先生成导入语句, 然后生成代码, 确保生成的代码正确地导入和调用指定
                                          3
                 的第三方库, 减少库调用错误. A -CodGen       [78] 整合本地信息、全局信息和第三方库信息, 将项目中的已有代码、全
                 局函数和可用的第三方库信息提供给生成器, 帮助其生成与代码库一致的代码, 避免重复实现现有功能和兼容性
                 问题, 提高了代码的可维护性和一致性. 同时, RAG            利用代码符号和仓库级信息, 帮助模型理解代码依赖和项目结
                 构, 生成符合项目要求的代码. CodeAgent      [79] 集成了多种编程工具, 如文档搜索、代码符号导航等, 帮助模型在复杂
                 的代码仓库环境中生成代码, 处理仓库级别的依赖和上下文, 使生成的代码能够正确地与现有项目集成. RRG                                [40] 引
                 入了代码重构器, 对检索到的代码片段进行重构和精简, 优化输入, 从而提高生成效率. CodeRAG-Bench                        通过整合
                 来自多个信息源的上下文, 丰富了模型的知识基础, 提高了代码生成的准确性. CodeAgent 采用工具驱动的生成策
                 略, 使模型在生成过程中能够动态调用外部工具, 优化生成流程, 进一步提升了代码质量. 综上所述, 这些方法通过
                 优化输入、自动化评估、整合多源知识以及动态工具集成, 全面提升了                       RAG  在代码生成任务中的性能和实用性,
                 为开发者提供了更加高效和可靠的代码生成支持.

                                  90
                                                                                        76
                                  80
                                  70
                                  60
                                 应用次数  50                                26
                                  40
                                  30
                                  20
                                                          11
                                  10
                                           3
                                  0
                                         2021年          2022年          2023年           2024年
                          编程助手             0              0              0              1
                          程序分析             0              0              1              0
                          漏洞检测             0              0              0              1
                          日志生成             0              0              0              1
                          代码审查             0              0              0              1
                          GUI测试            0              0              0              1
                          提交信息生成           0              1              0              1
                          代码重构             0              0              0              2
                          测试生成             0              0              0              3
                          断言生成             0              0              1              2
                          代码翻译             0              0              0              3
                          代码摘要             1              2              2              4
                          Text-to-SQL生成    0              2              6              3
                          程序修复             0              0              4              8
                          代码补全             1              1              4              10
                          代码生成             1              5              8              35
                                                 图 8 软件工程任务分布趋势

                    (2) 代码补全
                    RAG  方法通过将检索机制与生成模型相结合, 利用大型代码库、项目仓库或外部知识库中的相关信息, 增
                 强了代码生成模型对上下文的理解, 从而显著提升了代码补全的准确性和质量                          [16] . 具体而言, RAG  方法在代码补
                 全任务中通过设计高效的检索器和增强生成器的策略, 取得了显著的进展. 例如, ProCC                         [80] 通过设计多视角检索
                 器, 从词汇语义、假设代码行、代码摘要等不同角度获取未完成代码的表示, 然后利用上下文多臂赌博机算法自
                 适应地选择最相关的检索结果, 将其输入生成器, 生成更准确的代码补全. ReACC                       [42] 采用了混合检索模型, 使用
   359   360   361   362   363   364   365   366   367   368   369