news 2026/5/1 10:32:10

选择性检索增强代码补全技术解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
选择性检索增强代码补全技术解析

通过选择性检索增强仓库级代码补全

大型代码语言模型在补全任意程序函数代码方面表现出色,但面对大型软件开发项目时,正确的代码补全可能依赖于代码仓库中其他地方定义的API调用或函数。检索增强生成通过从仓库中获取相关上下文来解决此问题,从而丰富模型的理解并改善其输出。但执行检索需要时间并会减慢生成速度:它总是最佳选择吗?

在今年的国际机器学习会议上发表的一篇论文中,我们研究了这个问题,并发现,实际上,80%的情况下,检索并没有提高代码生成的质量。

方法概述

为了解决这种低效问题,我们微调了一个大型语言模型,以确定检索是否可能有所帮助,并根据答案输出两个特殊令牌中的一个。

为了进行微调,我们使用了一个通过以下方式构建的数据集:从开源许可证的仓库中采样代码,随机掩码代码行,并从仓库的其他地方检索相关代码。然后,我们比较了大型语言模型在有和没有附加上下文的情况下对掩码代码的重建效果。随后,根据检索是否改善了生成效果来为示例打标。

在实验中,我们发现在代码补全任务上,在我们的数据集上微调的代码大型语言模型,其表现甚至优于总是执行检索的模型——但由于选择性检索,推理速度提高了70%。在论文中,我们还报告了大量实验,旨在证明我们的方法能够很好地推广到不同的模型和不同的代码补全任务。

技术细节

创建我们数据集的所有步骤——采样和掩码代码、检索相关代码、以及在有/无检索上下文的情况下进行代码生成——都可以自动化,这使得我们的方法是自监督的:它不需要人工标注,并且可以扩展到任意大的数据集规模。

我们试验了多种从仓库检索上下文信息的方法,包括使用基于Transformer的语义嵌入来匹配代码序列的UniXCoder,以及使用n-gram数据、语法树和代码流语义的CodeBLEU。然而,两者都没有比更高效的Jaccard相似度(两个符号序列的交集与并集之比)表现得更好。因此,在我们的大多数实验中,我们使用Jaccard相似度进行检索。我们假设,使用结构感知分块而不是固定行分块的语义检索可以获得更好的性能。我们将此留作未来的工作。

对于模型微调,我们使用了“中间填充”机制,即掩码代码从代码序列中切出,前面和后面的部分用特殊令牌标识。训练目标由输入字符串组成,掩码代码附加在字符串末尾,同样用特殊令牌标识。这使得模型能够利用掩码代码前后的上下文信息;研究表明,这比训练模型在前后的部分之间插入生成的代码能产生更好的结果。

在微调过程中,我们有两个训练目标:正确重建缺失的代码,以及准确评估检索到的信息何时有助于重建。

准确性与延迟评估

与现有模型(如StarCoder)相比,我们的方法(称为Repoformer)在多个基准测试(包括RepoEval和针对长格式代码补全的新基准CrossCodeEval)上提高了准确性并减少了推理延迟。

我们通过一个现实的“在线服务”场景来说明Repoformer降低延迟的能力。我们假设工作仓库已被索引。给定一个包含当前文件的代码补全请求,系统同时启动三个进程:

  1. 使用Repoformer做出检索决策;
  2. 使用代码大型语言模型生成没有跨文件上下文的代码补全;
  3. 检索跨文件上下文并使用它生成代码补全。

在一系列固定的选择阈值下,Repoformer的选择性检索能够同时提高准确性和推理速度。这种性能在广泛的阈值设置下也保持稳定。

更有趣的是,Repoformer能够作为一个即插即用的策略模型,减少作为检索增强生成中生成模型的各种强大代码大型语言模型的推理延迟。

凭借超过85%的检索决策准确率,Repoformer确保仅在检索增加价值时才使用上下文检索。进一步的分析表明,所提出的策略提高了Repoformer对检索的鲁棒性,减少了有害检索,并增加了通过检索改进的实例数量。FINISHED
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 10:03:06

CANN轻量化开发实战:快速上手与多场景适配

在上一篇解析生态实战的基础上,本文聚焦CANN的轻量化开发场景,摒弃复杂的全流程部署与重型开发配置,围绕开发者快速上手的核心需求,结合简洁可运行的代码示例,讲解CANN基础极简API调用、parser仓库轻量化解析工具的快速…

作者头像 李华
网站建设 2026/5/1 9:48:45

微信小程序Python-uniapp 校园财递通快递代取系统的设计与实现

目录微信小程序Python-Uniapp校园快递代取系统摘要开发技术路线结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!微信小程序Python-Uniapp校园快递代取系统摘要 该系统基于微信小程序与Uniapp框架开发,后端采用Python技术栈…

作者头像 李华
网站建设 2026/5/1 9:55:38

基于Spring Boot的企业采购管理系统的设计与实现

🍅 作者主页:Selina .a 🍅 简介:Java领域优质创作者🏆、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作。 主要内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据…

作者头像 李华
网站建设 2026/5/1 7:30:48

着色器变量

在WebGL/GLSL的渲染流水线中,顶点着色器与片元着色器的传参有着严格的规范,这是由GPU的渲染架构和数据处理逻辑决定的,以下是核心规定和原因解析:一、着色器变量的作用域与类型约束 WebGL将着色器变量分为三类,各自有明…

作者头像 李华
网站建设 2026/4/24 17:45:21

AI大模型高薪职位全攻略+学习资料包,助程序员薪资翻倍,从入门到实战_AI大模型岗位薪资揭秘:2026大模型岗位薪资

文章详述AI大模型领域10个高薪职位(薪资60-200万/年)及其要求、发展前景,分析AI人才缺口达400万的就业机遇,提供包含学习路线图、视频教程、面试题等的大模型学习资料包,适合应届生、零基础转型者和传统开发者提升技能,实现职业跃…

作者头像 李华
网站建设 2026/5/1 6:16:42

P7930 [COCI 2021/2022 #1] Set题解

P7930 [COCI 2021/2022 #1] Set 题目背景 在知名游戏 SET 中,存在着一些数字、形状、颜色等不同的卡片,玩家的目标是确定一个存在的 triplet of cards(即卡片的三元组,也就是三张卡片构成的组合),使其符合…

作者头像 李华