本说明书一个或多个实施例涉及预训练模型,尤其涉及一种基于预训练模型的代码生成方法及相关设备。
背景技术:
1、借助于预训练模型强大的语言理解能力,可以辅助用户进行代码编写工作。例如,预训练模型可以根据用户输入的一部分代码而输出补全后续的代码,这极大程度上减轻了用户的代码编写负担,提升了代码编写效率,进而提升了整体的软件研发效率。
2、在实际应用中,可以将搭载了预训练模型的代码生成插件安装到各类代码编写程序中。该代码生成插件可以一直监听用户在代码编写过程中的每一个输入(例如每一个字符、tab键、空格等),生成与每一个输入事件相对应的代码生成请求,并采用先到先服务(first-come-first-served,fcfs)的规则,按序逐一执行每个代码生成请求,以不断调用上述预训练模型来推理用户当前的代码编写意图,并输出符合用户意图的代码。但是,当用户快速输入时,短时间内会生成与用户输入的大量代码对应的大量代码生成请求,往往当前的代码生成请求还未执行完成,后面就堆积了许多待执行的代码生成请求,从而造成大量请求的堵塞,严重影响预训练模型的代码生成效率,降低用户的使用体验。
技术实现思路
1、有鉴于此,本说明书一个或多个实施例提供一种基于预训练模型的代码生成方法及相关设备。
2、第一方面,本说明书提供了一种基于预训练模型的代码生成方法,所述方法包括:
3、响应于用户在预设的代码编写界面中输入目标代码,生成与所述目标代码对应的目标代码生成请求;
4、确定是否存在正在执行的历史代码生成请求;其中,所述历史代码生成请求为与用户在所述目标代码之前输入的历史代码对应的代码生成请求;
5、若是,则停止执行所述历史代码生成请求,以释放所述历史代码生成请求所占用的系统资源;以及,
6、为所述目标代码生成请求分配对应的系统资源,并基于分配的所述系统资源执行所述目标代码生成请求,以触发调用预训练模型,由所述预训练模型基于所述目标代码和所述历史代码为用户生成代码。
7、在一示出的实施方式中,所述基于分配的所述系统资源执行所述目标代码生成请求,包括:
8、将所述目标代码生成请求添加至等待队列中;
9、若在经过预设的等待时长后没有接收到用户新输入的代码,则基于分配的所述系统资源执行所述目标代码生成请求。
10、在一示出的实施方式中,所述将所述目标代码生成请求添加至等待队列中,包括:
11、确定等待队列中是否包含与用户在所述目标代码之前输入的历史代码对应的历史代码生成请求;
12、若是,则删除所述等待队列中的历史代码生成请求,并将所述目标代码生成请求添加至所述等待队列中。
13、在一示出的实施方式中,所述方法还包括:
14、获取用户在编写历史代码时的代码输入速度,并根据用户的代码输入速度确定所述预设的等待时长;其中,所述预设的等待时长与用户的代码输入速度之间呈负相关。
15、在一示出的实施方式中,所述调用预训练模型,由所述预训练模型基于所述目标代码和所述历史代码为用户生成代码,包括:
16、获取用户在所述目标代码之前输入的历史代码,并基于所述目标代码和所述历史代码生成对应的文本提示词;
17、将所述文本提示词输入至预训练模型中,由所述预训练模型基于所述文本提示词,对用户的代码编写意图进行推理计算,生成符合用户意图的代码。
18、在一示出的实施方式中,所述生成符合用户意图的代码,包括:生成符合用户意图的多组代码;
19、所述方法还包括:
20、响应于用户针对所述多组代码中的任一代码的选择操作,在所述代码编写界面中显示该代码。
21、在一示出的实施方式中,所述响应于用户针对所述多组代码中的任一代码的选择操作,在所述代码编写界面中显示该代码,包括:
22、在所述代码编写界面中显示与生成的所述多组代码对应的多个选项控件;
23、响应于用户针对所述多个选项控件中的任一选项控件的触发操作,在所述代码编写界面中显示与该选项控件对应的代码。
24、在一示出的实施方式中,所述方法还包括:
25、响应于用户针对所述多组代码中已选择的代码的确认操作,根据所述已选择的代码与用户输入的代码,生成完整的代码,并在所述代码编写界面中显示所述完整的代码。
26、在一示出的实施方式中,所述响应于用户针对所述多组代码中已选择的代码的确认操作,根据所述已选择的代码与用户输入的代码,生成完整的代码,包括:
27、在所述代码编写界面中显示与用户已选择的代码对应的代码确认控件;
28、响应于用户针对所述代码确认控件的触发操作,根据所述已选择的代码与用户输入的代码,生成完整的代码。
29、在一示出的实施方式中,所述系统资源包括cpu时间片。
30、第二方面,本说明书提供了一种基于预训练模型的代码生成装置,所述装置包括:
31、请求生成单元,用于响应于用户在预设的代码编写界面中输入目标代码,生成与所述目标代码对应的目标代码生成请求;
32、确定单元,用于确定是否存在正在执行的历史代码生成请求;其中,所述历史代码生成请求为与用户在所述目标代码之前输入的历史代码对应的代码生成请求;
33、请求停止执行单元,用于若存在正在执行的历史代码生成请求,则停止执行所述历史代码生成请求,以释放所述历史代码生成请求所占用的系统资源;以及,
34、代码生成单元,用于为所述目标代码生成请求分配对应的系统资源,并基于分配的所述系统资源执行所述目标代码生成请求,以触发调用预训练模型,由所述预训练模型基于所述目标代码和所述历史代码为用户生成代码。
35、相应地,本说明书还提供了一种计算机设备,包括:存储器和处理器;所述存储器上存储有可由所述处理器运行的计算机程序;所述处理器运行所述计算机程序时,执行上述第一方面所述的基于预训练模型的代码生成方法。
36、相应地,本说明书还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,执行如上述第一方面所述的基于预训练模型的代码生成方法。
37、综上所述,本技术可以响应于用户在预设的代码编写界面中输入目标代码,生成与该目标代码对应的目标代码生成请求。然后,本技术可以直接停止当前正在执行的与用户在上述目标代码之前输入的历史代码对应的历史代码生成请求,以释放该历史代码生成请求所占用的系统资源。进一步地,本技术可以为当前的目标代码生成请求分配对应的系统资源,并基于分配的系统资源执行该目标代码生成请求,以调用预训练模型基于上述目标代码以及用户在目标代码之前输入的历史代码对用户的代码编写意图进行推理计算,生成符合用户意图的代码。如上所述,本技术考虑到用户前期输入的少部分代码对预训练模型来说没有较高的推理价值,因此本技术在接收到用户最新输入的代码后,可以直接停止当前正在执行的与用户前期输入的历史代码对应的代码生成请求,转而执行与用户当前最新输入的代码对应的代码生成请求,以结合用户最新输入的代码以及前期输入的历史代码,得到更加完整的前后文信息,让预训练模型可以基于更加完整的前后文信息来准确推理用户的代码编写意图,生成更加符合用户意图的代码。这样一来,本技术不仅无需执行与用户前期输入的对代码编写意图推理贡献较低的历史代码对应的代码生成请求,避免了预训练模型的计算资源浪费,同时又避免了大量请求排队堵塞的情况,极大程度上提升了大模型的代码生成效率。