在这篇文章中,我们将深入探讨一篇关于检索增强生成(RAG)在代码补全领域应用的专业研究。

A Deep Dive into Retrieval-Augmented Generation for Code Completion: Experience on WeChat

代码补全,作为软件工程中的关键一环,旨在通过自动预测和建议代码片段来提升开发者的工作效率。随着大型语言模型(LLMs)的飞速发展,代码补全工具的能力已经从简单的词元建议跃升至生成完整的代码块,极大地赋能了开发者。

然而,LLMs在处理特定领域的任务时,其通用知识可能会力有不逮。为了弥补这一差距,检索增强生成(RAG) 技术应运而生。RAG通过从目标代码库中检索并整合相关上下文,来增强模型的推理能力,而无需对模型进行耗时且昂贵的重新训练。

虽然RAG在开源代码库中已显示出显著成效,但闭源代码库的独有特性(如专有代码模式、自定义框架和特定领域实现)带来了未知的挑战。这篇论文正是为了填补这一空白,通过在微信这一全球最大的专有软件系统之一的代码库上进行实证研究,系统性地评估了RAG在工业环境下的表现。

unsetunset检索增强的代码补全unsetunset

基准数据集的构建

为了在微信的闭源代码环境中全面评估RAG的性能,研究团队首先构建了一个高质量、函数级别的评估基准。这个过程由三名拥有五年以上工业经验的资深开发者通过人工标注完成,并遵循了以下四条严格的规则:

  • 函数重要性:选择的函数必须是日常开发工作流中的关键部分,代表真实的、有挑战性的代码补全场景。
  • 上下文选择:标注者根据专业经验,手动识别并标注了与函数相关的上下文和文档(包括行号和必要的解释),以模拟真实的代码补全情景。
  • 难度分级:每个示例都被划分为“简单”或“困难”,这有助于进行更细粒度的性能分析。
  • 质量保证:所有函数都来自于经过严格测试并正在线上活跃使用的生产系统,确保了其正确性和实用价值。此外,所有标注都经过了三名开发者的交叉验证,以保证一致性。

经过三周的努力,研究团队获得了包含100个示例的基准数据集,涵盖了七个核心业务领域,如远程过程调用(client call)、协程(connection、colib、encoding)、数据存储(kv)、消息队列(mq)和工具函数(utils),全面代表了微信软件开发中的常见模式。

检索语料库的构建

为了进行RAG实验,研究团队收集了1,669个内部项目作为检索语料库的来源。这些项目涵盖了多个业务部门和开发周期,构成了全面的代码基础。尽管如此,从闭源的C++项目中构建检索语料库面临着一系列独特挑战:

  • 文件分割难题:C++大量依赖头文件进行依赖管理,但这些文件通常包含大量冗余的声明。如果将整个文件作为检索单元,会产生过长的片段,而简单的滑动窗口方法又会破坏代码的语义完整性。
  • 递归依赖问题:头文件之间经常相互引用,形成复杂的递归依赖结构,这使得一些通用的依赖解析方法无法直接应用。
  • 自动生成代码:微信团队广泛使用Protocol Buffers(protobuf)进行数据序列化。但protobuf自动生成的C++文件包含大量与实际业务逻辑无关的模板和预定义内容。
  • 宏的特殊性:与Python和Java不同,C++大量使用宏(macro),它们在代码功能中扮演着关键角色,需要特殊的预处理。
基于相似性的RAG

基于相似性的RAG通过提供与当前代码片段相似的代码来提升LLM的代码补全能力。该方法也分为三个主要步骤:

  1. 索引创建:由于重点是函数补全,该方法仅使用函数定义作为检索源。根据所选的检索技术(词法或语义),索引创建过程有所不同:
  • 词法检索:利用TF-IDF(词频-逆文档频率)权重对语料库中的每个词元进行索引。
  • 语义检索:将每个函数编码成一个固定维度的向量,并存储在向量数据库中以进行高效的语义搜索。
  1. 相似代码检索:在这一步,当前代码片段作为查询,从已构建的检索语料库中检索相似代码。
  • 词法检索:基于TF-IDF权重计算当前代码与语料库中所有函数的相似度,并检索得分最高的片段。
  • 语义检索:将当前代码编码为向量,然后使用余弦相似度在向量数据库中查找最相似的函数向量。

unsetunset实验研究设置unsetunset

基于相似性的检索技术

为了进行全面的评估,研究团队采用了五种不同的基于相似性的检索技术,包括一种词法技术和四种语义技术:

  • BM25:这是一种经典且高效的词法检索算法,它在TF-IDF的基础上进行了扩展,加入了文档长度归一化和非线性词频缩放。BM25通过计算查询中每个词元在函数语料库中的相关性得分来检索最相似的代码片段。其核心公式考虑了逆文档频率(IDF)和经过修正的词频(TF_mod),确保了检索的精确性。
  • CodeBERT:作为一种基于RoBERTa的大型预训练模型,CodeBERT在自然语言和编程语言语料库上进行了训练。它利用遮蔽语言模型(MLM)和替换词元检测(RTD)等任务,学习通用的代码表示。
  • UniXcoder:该模型通过三种目标进行预训练,并结合了两种创新策略:多模态对比学习(利用抽象语法树,AST,来增强代码表示)和跨模态生成任务(利用代码注释来对齐不同编程语言的嵌入)。这使得UniXcoder能更好地理解代码的结构和语义。
  • CoCoSoDa:该模型架构与UniXcoder相同,但通过动量对比学习(momentum contrastive learning)进一步增强了代码表示。它采用动态数据增强和负采样策略,学习更鲁棒和更具区分性的代码嵌入。
  • GTE-Qwen:作为GTE(通用文本嵌入)系列的一员,GTE-Qwen是一个基于Qwen2的解码器模型。它引入了双向注意力机制,以丰富上下文表示,使其在多语言理解和检索任务中特别有效。实验中,研究人员使用了GTE-Qwen2-1.5B-instruct版本。
大型语言模型

为了全面评估不同模型规模下的代码生成能力,实验选择了26个开源的大型语言模型,参数规模从0.5B到671B不等。这些模型既包括代码专用LLM,如Qwen-Coder、Deepseek-Coder、CodeLlama、Yi-Coder、OpenCoder和Codestral,也包括通用LLM,如Llama系列和DeepSeek-V2.5、DeepSeek-V3。这种混合选择确保了实验对不同类型模型的广泛覆盖。

评估指标

为了客观地衡量代码补全的质量,研究采用了两个关键指标:

  • **CodeBLEU (CB)**:这是一个专门为代码生成任务设计的度量指标,它在传统的BLEU指标基础上,融入了代码的结构和语义信息。CodeBLEU由四个部分加权组合而成:N-gram匹配(词元重叠)、加权N-gram匹配(根据词元重要性赋予不同权重)、AST相似性(衡量语法结构相似性)和数据流相似性(评估语义等价性)。在本次实验中,所有四个部分的权重均设为0.25。
  • 编辑相似度(Edit Similarity, ES):该指标衡量了将生成代码转换为参考代码所需的最少词元级操作数(插入、删除、替换),并将其归一化。得分范围从0到1,1表示完全相同。该指标能够直观地反映生成代码与标准答案之间的相似程度。

unsetunset实验结果unsetunset

RQ1: RAG的有效性

实验结果表明,RAG方法能够持续提升不同规模的基础模型的代码补全性能。这种提升在各个模型中都非常显著。

  • 显著的性能提升:以Qwen2.5-Coder-14B-Instruct为例,在使用基于GTE-Qwen的RAG后,其CodeBLEU(CB)和编辑相似度(ES)指标分别从29.79/48.56大幅提升至51.12/61.96,相对增幅高达71.60%和27.59%。同样,在DeepSeek-V3这样的超大模型上,RAG也带来了71.1%和33.3%的性能提升。
  • 基于标识符的RAG:在这类方法中,检索函数定义的性能提升最为显著,优于检索消息定义或类定义。这表明,提供具体的功能实现细节对LLM进行代码补全帮助最大。
  • 基于相似性的RAGBM25GTE-Qwen这两种检索技术表现最为出色,它们在性能上显著优于CodeBERT和UniXcoder等其他方法。
  • 两种RAG方法的比较:实验结果清晰地显示,基于相似性的RAG的性能明显优于基于标识符的RAG。以DeepSeek-V3为例,基于标识符的RAG使其性能达到42.24/61.75,而基于相似性的RAG则将其推高到60.28/73.11,相对提升高达42.7%和18.4%。

RQ2: 检索技术的影响

本部分深入分析了不同检索技术对基于相似性的RAG性能的影响。

  • 语义检索技术的对比:在语义检索技术中,CodeBERT的性能始终落后于UniXcoder、CoCoSoDa和GTE-Qwen。这可能是因为后三种模型通过对比学习专门针对检索任务进行了优化,能够更好地捕捉代码的语义和相似性关系。
  • 词法检索的有效性:作为一种简单的基于词元匹配的方法,BM25展现出惊人的有效性,其性能在不同模型规模和架构上始终保持强劲。
  • 查询方式的影响:在代码补全任务中,我们通常只能使用不完整的代码上下文作为查询。实验发现,大多数检索技术(如BM25、UniXcoder和CoCoSoDa)在使用完整的代码片段作为查询时,性能会得到进一步提升。这揭示了在实际应用中,如何优化查询输入的重要性。
  • GTE-Qwen的独特优势:与其他技术不同的是,GTE-Qwen在使用不完整的代码上下文作为查询时,表现持续优异,特别是在大型模型上。例如,在DeepSeek-V3上,GTE-Qwen以不完整查询达到了最高的CB/ES得分60.28/73.11,这使得它特别适合实时代码补全场景。

RQ3: 检索结果的探索

由于基于相似性的RAG表现优异,研究团队进一步探索了词法和语义检索结果之间的关系。

结果的互补性:分析发现,BM25和语义技术(如GTE-Qwen)检索到的结果重叠度极低。在100个测试示例中,BM25与GTE-Qwen相比,有64个检索到的样本完全不同。这强有力地表明,词法和语义技术捕获了代码相似性的不同方面,具有显著的互补性。

混合检索的优势:基于这一发现,研究团队尝试将BM25与不同的语义检索技术结合。结果显示,这种组合在**大型模型(7B+)**中带来了显著的性能提升。例如,DeepSeek-V3结合BM25和GTE-Qwen后,CB/ES指标达到63.62/75.26,大幅超越了单独使用任一技术。

超大模型下的性能:值得注意的是,对于Qwen2.5-32B这样的大模型,BM25+GTE-Qwen的组合使其性能达到了63.73/72.25,甚至能与参数量更大的DeepSeek-V2.5和DeepSeek-V3相媲美。这表明混合检索方法可以为相对较小的模型带来超乎预期的能力。然而,对于7B以下的小模型,这种组合带来的性能提升有限甚至为负,这可能说明只有大型模型才能有效利用混合检索提供的多维信息。

unsetunset实验结论unsetunset

本论文对闭源代码库中的代码补全RAG进行了系统性的研究。核心结论包括:

  • RAG的普遍有效性:无论基于标识符还是相似性,RAG都能显著提升LLM在代码补全任务上的性能。
  • 相似性RAG的优越性:基于相似性的RAG在性能上优于基于标识符的方法。
  • 最佳检索技术:BM25和GTE-Qwen在代码补全任务中表现出色,并且两者具有互补性。
  • 最优组合策略:将BM25和GTE-Qwen相结合是提升RAG性能的最佳策略,尤其是在大型模型上,可以实现超越单一技术的最佳效果。

如何学习大模型 AI ?

我国在AI大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年,人才缺口已超百万,凸显培养不足。随着Al技术飞速发展,预计到2025年,这一缺口将急剧扩大至400万,严重制约我国Al产业的创新步伐。加强人才培养,优化教育体系,国际合作并进,是破解困局、推动AI发展的关键。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

2025最新大模型学习路线

明确的学习路线至关重要。它能指引新人起点、规划学习顺序、明确核心知识点。大模型领域涉及的知识点非常广泛,没有明确的学习路线可能会导致新人感到迷茫,不知道应该专注于哪些内容。

对于从来没有接触过AI大模型的同学,我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线。

在这里插入图片描述

针对以上大模型的学习路线我们也整理了对应的学习视频教程,和配套的学习资料。

大模型经典PDF书籍

新手必备的大模型学习PDF书单来了!全是硬核知识,帮你少走弯路!

在这里插入图片描述

配套大模型项目实战

所有视频教程所涉及的实战项目和项目源码等
在这里插入图片描述

博主介绍+AI项目案例集锦

MoPaaS专注于Al技术能力建设与应用场景开发,与智学优课联合孵化,培养适合未来发展需求的技术性人才和应用型领袖。

在这里插入图片描述

在这里插入图片描述

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

为什么要学习大模型?

2025人工智能大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。

在这里插入图片描述

适合人群

  • 在校学生:包括专科、本科、硕士和博士研究生。学生应具备扎实的编程基础和一定的数学基础,有志于深入AGI大模型行业,希望开展相关的研究和开发工作。
  • IT行业从业人员:包括在职或失业者,涵盖开发、测试、运维、产品经理等职务。拥有一定的IT从业经验,至少1年以上的编程工作经验,对大模型技术感兴趣或有业务需求,希望通过课程提升自身在IT领域的竞争力。
  • IT管理及技术研究领域人员:包括技术经理、技术负责人、CTO、架构师、研究员等角色。这些人员需要跟随技术发展趋势,主导技术创新,推动大模型技术在企业业务中的应用与改造。
  • 传统AI从业人员:包括算法工程师、机器视觉工程师、深度学习工程师等。这些AI技术人才原先从事机器视觉、自然语言处理、推荐系统等领域工作,现需要快速补充大模型技术能力,获得大模型训练微调的实操技能,以适应新的技术发展趋势。
    在这里插入图片描述

课程精彩瞬间

大模型核心原理与Prompt:掌握大语言模型的核心知识,了解行业应用与趋势;熟练Python编程,提升提示工程技能,为Al应用开发打下坚实基础。

在这里插入图片描述

RAG应用开发工程:掌握RAG应用开发全流程,理解前沿技术,提升商业化分析与优化能力,通过实战项目加深理解与应用。 在这里插入图片描述

Agent应用架构进阶实践:掌握大模型Agent技术的核心原理与实践应用,能够独立完成Agent系统的设计与开发,提升多智能体协同与复杂任务处理的能力,为AI产品的创新与优化提供有力支持。
在这里插入图片描述

模型微调与私有化大模型:掌握大模型微调与私有化部署技能,提升模型优化与部署能力,为大模型项目落地打下坚实基础。 在这里插入图片描述

顶尖师资,深耕AI大模型前沿技术

实战专家亲授,让你少走弯路
在这里插入图片描述

一对一学习规划,职业生涯指导

  • 真实商业项目实训
  • 大厂绿色直通车

人才库优秀学员参与真实商业项目实训

以商业交付标准作为学习标准,具备真实大模型项目实践操作经验可写入简历,支持项目背调

在这里插入图片描述
大厂绿色直通车,冲击行业高薪岗位
在这里插入图片描述

文中涉及到的完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐