一种生成仓库级代码的方法及装置

摘要: 本发明涉及大语言模型,特别是涉及一种生成仓库级代码的方法及装置。背景技术:1、近年来,大语言模型在代码生成任务中已展现出较强能力,但在更复杂的仓库级代码生成场景...
一种生成仓库级代码的方法及装置

本发明涉及大语言模型,特别是涉及一种生成仓库级代码的方法及装置。

背景技术:

1、近年来,大语言模型在代码生成任务中已展现出较强能力,但在更复杂的仓库级代码生成场景中,模型需要依赖仓库内部代码上下文才能生成正确结果。现有方法通常通过检索增强生成技术,将多个候选代码片段作为上下文输入模型。但是这种方式在检索得到的代码上下文中往往包含大量语义相似但功能无关的冗余信息,这些噪声上下文会干扰模型的推理过程,使模型难以准确捕捉真正有用的信息,从而降低生成代码的正确性。并且当增加检索数量以提高召回率时,无效上下文比例同步上升,导致模型性能出现“先提升后下降”的现象。同时冗余上下文会显著增加输入长度,从而带来较高的计算成本和推理延迟,降低系统整体效率。因此,如何简单且高效地生成仓库级代码成为现在亟待需要解决的问题。

技术实现思路

1、本发明提供了一种生成仓库级代码的方法及装置,以解决现有不能高效/快速且高质量地生成仓库级代码的问题。

2、第一方面,本发明提供了一种生成仓库级代码的方法,所述方法包括:

3、所述代码上下文选择阶段,包括:对代码仓库进行静态分析得到代码上下文集合库,并基于所述代码上下文集合库,根据接收到的代码生成请求得到候选代码上下文集合;对所述候选代码上下文集合进行分组,利用草稿模型对各个组的候选上下文分别按组生成草稿代码序列{d1, ..., dn},并应用结构感知草稿引导预设的上下文选择算法选择出有效代码上下文集合g*,其中,n为自然数;

4、所述目标代码生成阶段,包括:根据所述有效代码上下文集合g*和所述代码生成请求构造生成提示,基于草稿代码序列结合所述提示,利用代码生成模型使用草稿感知的并行解码方法生成最终代码。

5、可选地,所述对代码仓库进行静态分析得到代码上下文集合库,包括:

6、利用代码解析工具tree-sitter对源代码文件构建抽象语法树 ast,遍历 ast 节点,提取函数和类的代码文本作为代码单元c,并将每个代码单元保存为一个代码上下文对象,完成解析后,将代码上下文集合{c1, ..., cn}保存为 jsonl 文件或数据库表,并为检索建立索引,即得到所述代码上下文集合库。

7、可选地,基于所述代码上下文集合库,根据接收到的代码生成请求得到候选代码上下文集合,包括:

8、将接收到的代码生成请求作为查询 q,利用bm25 算法进行关键词检索从代码上下文集合中检索最高的top-k个候选上下文,得到与所述代码生成请求最相关的k个代码文本片段{c1, ..., ck},即所述候选代码上下文集合。

9、可选地,所述对所述候选代码上下文集合进行分组,利用草稿模型对各个组的候选上下文分别按组生成草稿代码序列{d1, ..., dn},并应用结构感知草稿引导预设的上下文选择算法选择出有效代码上下文集合g*,包括:

10、按照候选上下文与查询 q 的相似度分数降序排列,并按照预设分组大小 m 将top-k 上下文划分为n组gi,n为k/m,向下取整,每个上下文组 gi与原始查询q拼接为一个独立的提示pi;

11、将多个pi输入草稿模型,对应生成多个代码草稿di,进行api匹配筛选和逻辑相似性筛选得到最终有效上下文集合 g*。

12、可选地,所述进行api匹配筛选和逻辑相似性筛选得到最终有效上下文集合 g*,包括:

13、所述api匹配筛选中,是使用tree-sitter工具对草稿代码和候选上下文代码进行解析,提取草稿中的外部api调用集合,同时提取候选上下文中的内部api集合和外部api集合,计算所述外部api调用集合与候选上下文的所有api集合之间是否存在交集,若二者之间存在交集,则保留该代码上下文;

14、在逻辑相似性筛选中,是计算每个草稿di与其对应上下文组gi中各候选上下文{c1,...,cm}的相似度,并选择分数最高的l个代码上下文,l为预设超参数,将api匹配筛选的上下文和逻辑相似性筛选的上下文取并集,得到最终有效上下文集合 g*。

15、可选地,基于草稿代码序列结合所述提示,利用代码生成模型使用草稿感知的并行解码方法生成最终代码,包括:

16、利用代码生成模型,将代码生成请求与所述有效上下文集合g*拼接为提示,并转化为token序列,其中,token是代码生成模型处理文本和代码的基本词元单位,并基于所述token序列控制代码生成模型生成最终代码。

17、可选地,所述基于所述token序列控制代码生成模型生成最终代码,还包括:

18、从所述草稿代码序列{d1, ..., dn}中选择一个草稿代码作为候选序列,将该草稿代码通过代码生成模型分词器转换为token序列,并通过将多个草稿token并行输入代码生成模型,由代码生成模型通过一次前向推理计算这些位置的全部预测概率分布,如果草稿token与代码生成模型在对应位置预测的token一致,则接受该token,并继续验证后续token;如果不一致,则停止当前连续验证,并使用代码生成模型预测的token替换该位置,最后生成最终代码。

19、可选地,所述方法还包括:根据当前生成代码的后缀是否为草稿代码的代码片段的前缀来从草稿代码中寻找潜在的可利用代码片段,如果找到潜在的可利用代码片段则继续使用草稿感知的并行解码来并行验证,否则继续进行自回归生成,直到代码生成模型生成结束符时停止生成并输出最终代码。

20、第二方面,本发明提供了一种生成仓库级代码的装置,所述方法包括:

21、代码上下文选择模块,用于对代码仓库进行静态分析得到代码上下文集合库,并基于所述代码上下文集合库,根据接收到的代码生成请求得到候选代码上下文集合;对所述候选代码上下文集合进行分组,利用草稿模型对各个组的候选上下文分别按组生成草稿代码序列{d1, ..., dn},并应用结构感知草稿引导预设的上下文选择算法选择出有效代码上下文集合g*,其中,n为自然数;

22、目标代码生成模块,用于根据所述有效代码上下文集合g*和所述代码生成请求构造生成提示,基于草稿代码序列结合所述提示,利用代码生成模型使用草稿感知的并行解码方法生成最终代码。

23、第三方面,本发明提供了一种计算机可读存储介质,所述存储介质上存储有计算机程序,所述程序被处理器执行时实现上述任一种所述的面向无人机群定向网络快速建网的预规划簇首推举方法。

24、本发明有益效果如下:

25、本发明是在仓库级代码生成过程中,从候选上下文中高效筛选出真正有效的代码片段,在提升生成质量的同时显著降低计算开销与推理时间,从而高效/快读且高质量地生成仓库级代码。

26、上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。