本技术涉及人工智能(artificial intelligence,ai),尤其涉及一种代码管理方法、系统、计算设备集群、计算机可读存储介质、计算机程序产品。
背景技术:
1、代码生成(code generation)或程序合成(program synthesis)技术,一直是软件工程(software engineering,se)和人工智能领域学术研究中的热点,并且因其巨大的商业价值而备受工业界关注。近年来,得益于人工智能研究在自然语言处理(naturallanguage processing,nlp)和程序语言处理(programming language processing,plp)方面取得的成果,两个领域技术的结合将代码生成相关技术从学术研究逐步推向实际应用。为了提高软件开发效率,各种基于ai的代码生成工具应运而生。
2、目前,基于ai的代码生成工具通常依赖基于大规模的预训练语言模型(pre-trained language model,plm),在海量程序语言语料(如代码)上继续训练得到的因果语言模型(causal language model,clm)。clm可以根据用户输入的自然语言描述,生成特定程序语言的代码,从而实现用户以自然语言描述所表达的需求。
3、然而,上述基于ai的代码生成工具对所输入的自然语言描述高度依赖,自然语言描述的质量、层次、细节对生成效果影响巨大,导致基于ai的代码生成工具生成的代码的正确率整体较低,难以满足业务需求。
技术实现思路
1、本技术提供了一种代码管理方法,该方法通过引入对任务描述的分解,从而将任务分解为多个通用任务或原子任务(不支持进一步分解的任务),提高了在复杂的多步骤任务上代码生成的正确率,具有较好的代码生成效果,能够满足业务需求。本技术还提供了该方法对应的代码管理系统、计算设备集群、计算机可读存储介质以及计算机程序产品。
2、第一方面,本技术提供了一种代码管理方法。该方法可以由代码管理系统执行。代码管理系统可以是软件系统,该软件系统可以部署在计算设备集群中。计算设备集群通过执行软件系统的程序代码,从而执行本技术的代码管理方法。在一些实施例中,代码管理系统也可以是具有代码管理功能的硬件系统,该硬件系统运行时,执行本技术的代码管理方法。例如,代码管理系统可以是具有代码管理功能的计算设备集群。
3、具体地,代码管理系统可以接收用户输入的任务描述,将该任务描述分解为多个子任务描述,然后根据多个子任务描述生成多个子任务的代码,其中,多个子任务的代码与多个子任务描述一一对应。
4、区别于传统的代码生成工具按照自左向右的顺序生成代码,该方法在开发过程中更自然地遵循了从整体到部分的分治思维,分解后的自然语言描述和相应子任务,对于用户更容易理解,也更容易生成,而且还能进行代码复用,提高了代码生成效率和质量。
5、在一些可能的实现方式中,代码管理系统可以通过任务描述分解模型,将任务描述分解为多个子任务的参考描述,并根据用户对多个子任务的参考描述的反馈,获得多个子任务描述。
6、该方法通过任务描述分解模型,自动分解任务描述,生成更细粒度、更加命令式的子任务描述,从而进一步提升代码生成的正确率。
7、在一些可能的实现方式中,用户对多个子任务的参考描述的反馈可以包括:确认、修改或补充。该方法引入用户反馈,由用户对分解结果进行确认、修改或补充,如此使得分解得到子任务描述更加精准,由此生成的代码的正确率得以进一步提升。
8、在一些可能的实现方式中,代码管理系统可以通过从程序语言语料中抽取任务描述样例以及子任务描述样例,并根据任务描述样例以及子任务描述样例,通过生成式预训练方法训练任务描述分解模型。其中,任务描述分解模型以任务描述为输入,以子任务描述为输出。
9、由于在软件开发过程中,注释与代码经常交替出现,且不同层次的注释之间存在嵌套关系,该方法从程序语言语料中抽取样例,以进行任务描述分解模型的训练,以此获得更好的训练效果,从而提升任务描述分解的准确度。
10、在一些可能的实现方式中,代码管理系统可以将任务描述分解为多个第一子任务描述,并向用户呈现多个第一子任务描述,当用户触发分解操作,代码管理系统可以将多个第一子任务描述中的目标子任务描述分解为多个第二子任务描述。
11、考虑到高层级的任务可以存在嵌套,该方法引入人机交互,由用户判断是否进行子任务描述的继续分解,从而实现更加精准的任务描述分解。
12、在一些可能的实现方式中,代码管理系统还可以向用户呈现子任务的代码的注释。其中,子任务的代码的注释可以包括子任务描述。该方法使得用户可以直观地获取子任务的代码对应的子任务描述,从而便于用户对子任务的代码进行反馈。
13、在一些可能的实现方式中,代码管理系统可以根据多个子任务描述,生成代码片段、对库函数的调用或对自定义函数的调用的一种或多种。该方法基于代码的反向生成,利用代码片段补全算法,能够根据子任务描述的粒度,实现自动选择生成的代码形式的功能。
14、在一些可能的实现方式中,当自定义函数未定义时,代码管理系统还可以根据对自定义函数的调用以及上下文,生成自定义函数的声明和实现代码。该方法通过函数反向生成算法,为被调用但尚不存在的函数反向生成声明和定义,从而使得代码生成过程更加符合软件开发和重构的最佳实践。
15、在一些可能的实现方式中,代码管理系统可以根据自定义函数的调用以及上下文,生成自定义函数的声明。其中,自定义函数的声明可以包括自定义函数的注释、参数列表、参数类型、返回值类型中的一种或多种。接着,代码管理系统可以根据自定义函数的声明,生成自定义函数的实现代码。该方法可以自动从函数调用语句及其上下文中生成自定义函数的声明,从而生成自定义函数的实现代码,以完成代码生成。
16、在一些可能的实现方式中,代码管理系统还可以接收用户对自定义函数的声明的反馈,并根据用户对自定义函数的声明的反馈,更新自定义函数的声明。该方法引入用户反馈,使得用户可以对生成的自定义函数的声明进行确认、修改或补充,从而确保自定义函数的声明的准确度。
17、在一些可能的实现方式中,当用户触发分解操作,代码管理系统可以将自定义函数的声明分解,并根据分解结果,生成自定义函数的实现代码。该方法可以将自定义函数的声明作为子任务再次触发代码生成,从而逐步使代码更加完整。
18、在一些可能的实现方式中,代码管理系统可以将多个子任务的代码存储在用户指定的输出路径,从而便于用户对生成的代码进行管理。
19、在一些可能的实现方式中,代码管理系统可以为集成开发环境(integrateddevelopment environment,ide)。其中,ide可以包括本地的ide或云端ide。ide具有基于任务描述分解的代码生成能力或插件,ide的上述能力或插件被触发时,ide执行接收用户输入的任务描述,将任务描述分解为多个子任务描述,根据多个子任务描述生成子任务的代码的步骤。如此,可以方便开发者进行软件开发,提高了开发效率。
20、在一些可能的实现方式中,代码管理系统可以为云服务,该云服务具有代码生成接口,当代码生成接口被调用时,云服务可以执行接收用户输入的任务描述,将任务描述分解为多个子任务描述,根据多个子任务描述生成子任务的代码的步骤。如此可以通过云服务为大量开发者提供代码生成服务,满足业务需求。
21、第二方面,本技术提供了一种代码管理系统。所述系统包括:
22、交互模块,用于接收用户输入的任务描述;
23、分解模块,用于将所述任务描述分解为多个子任务描述;
24、生成模块,用于根据所述多个子任务描述生成多个子任务的代码,所述多个子任务的代码与所述多个子任务描述一一对应。
25、在一些可能的实现方式中,所述分解模块具体用于:
26、通过任务描述分解模型,将所述任务描述分解为多个子任务的参考描述;
27、根据所述用户对所述多个子任务的参考描述的反馈,获得所述多个子任务描述。
28、在一些可能的实现方式中,所述用户对所述多个子任务的参考描述的反馈包括:确认、修改或补充。
29、在一些可能的实现方式中,所述任务描述分解模型通过如下方式训练得到:
30、从程序语言语料中抽取任务描述样例以及子任务描述样例;
31、根据所述任务描述样例以及所述子任务描述样例,通过生成式预训练方法训练所述任务描述分解模型,所述任务描述分解模型以任务描述为输入,以子任务描述为输出。
32、在一些可能的实现方式中,所述分解模块具体用于:
33、将所述任务描述分解为多个第一子任务描述;
34、向所述用户呈现所述多个第一子任务描述;
35、当所述用户触发分解操作,将所述多个第一子任务描述中的目标子任务描述分解为多个第二子任务描述。
36、在一些可能的实现方式中,所述交互模块还用于:
37、向所述用户呈现所述子任务的代码的注释,所述子任务的代码的注释包括所述子任务描述。
38、在一些可能的实现方式中,所述生成模块具体用于:
39、根据所述多个子任务描述,生成代码片段、对库函数的调用或对自定义函数的调用的一种或多种。
40、在一些可能的实现方式中,当所述自定义函数未定义时,所述生成模块还用于:
41、根据对所述自定义函数的调用以及上下文,生成所述自定义函数的声明和实现代码。
42、在一些可能的实现方式中,所述生成模块具体用于:
43、根据对所述自定义函数的调用以及上下文,生成所述自定义函数的声明,所述自定义函数的声明包括所述自定义函数的注释、参数列表、参数类型、返回值类型中的一种或多种;
44、根据所述自定义函数的声明,生成所述自定义函数的实现代码。
45、在一些可能的实现方式中,所述交互模块还用于:
46、接收所述用户对所述自定义函数的声明的反馈;
47、根据所述用户对所述自定义函数的声明的反馈,更新所述自定义函数的声明。
48、在一些可能的实现方式中,所述生成模块具体用于:
49、当所述用户触发分解操作,将所述自定义函数的声明分解;
50、根据分解结果,生成所述自定义函数的实现代码。
51、第三方面,本技术提供一种计算设备集群。所述计算设备集群包括至少一台计算设备,所述至少一台计算设备包括至少一个处理器和至少一个存储器。所述至少一个处理器、所述至少一个存储器进行相互的通信。所述至少一个处理器用于执行所述至少一个存储器中存储的指令,以使得计算设备或计算设备集群执行如第一方面或第一方面的任一种实现方式所述的代码管理方法。
52、第四方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,所述指令指示计算设备或计算设备集群执行上述第一方面或第一方面的任一种实现方式所述的代码管理方法。
53、第五方面,本技术提供了一种包含指令的计算机程序产品,当其在计算设备或计算设备集群上运行时,使得计算设备或计算设备集群执行上述第一方面或第一方面的任一种实现方式所述的代码管理方法。
54、本技术在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
1.一种代码管理方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述将所述任务描述分解为多个子任务描述,包括:
3.根据权利要求2所述的方法,其特征在于,所述用户对所述多个子任务的参考描述的反馈包括:确认、修改或补充。
4.根据权利要求2或3所述的方法,其特征在于,所述任务描述分解模型通过如下方式训练得到:
5.根据权利要求1至4任一项所述的方法,其特征在于,所述将所述任务描述分解为多个子任务描述,包括:
6.根据权利要求1至5任一项所述的方法,其特征在于,所述方法还包括:
7.根据权利要求1至6任一项所述的方法,其特征在于,所述根据所述多个子任务描述生成多个子任务的代码,包括:
8.根据权利要求7所述的方法,其特征在于,当所述自定义函数未定义时,所述方法还包括:
9.根据权利要求8所述的方法,其特征在于,所述根据对所述自定义函数的调用以及上下文,生成所述自定义函数的声明和实现代码,包括:
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
11.根据权利要求9所述的方法,其特征在于,所述根据所述自定义函数的声明,生成所述自定义函数的实现代码,包括:
12.一种代码管理系统,其特征在于,所述系统包括:
13.根据权利要求12所述的系统,其特征在于,所述分解模块具体用于:
14.根据权利要求13所述的系统,其特征在于,所述用户对所述多个子任务的参考描述的反馈包括:确认、修改或补充。
15.根据权利要求13或14所述的系统,其特征在于,所述任务描述分解模型通过如下方式训练得到:
16.根据权利要求12至15任一项所述的系统,其特征在于,所述分解模块具体用于:
17.根据权利要求12至16任一项所述的系统,其特征在于,所述交互模块还用于:
18.根据权利要求12至17任一项所述的系统,其特征在于,所述生成模块具体用于:
19.根据权利要求18所述的系统,其特征在于,所述生成模块还用于:
20.根据权利要求19所述的系统,其特征在于,所述生成模块具体用于:
21.根据权利要求20所述的系统,其特征在于,所述交互模块还用于:
22.根据权利要求20所述的系统,其特征在于,所述生成模块具体用于:
23.一种计算设备集群,其特征在于,所述计算设备集群包括至少一台计算设备,所述至少一台计算设备包括至少一个处理器和至少一个存储器,所述至少一个存储器中存储有计算机可读指令;所述至少一个处理器执行所述计算机可读指令,以使得所述计算设备集群执行如权利要求1至11中任一项所述的方法。
24.一种计算机可读存储介质,其特征在于,包括计算机可读指令;所述计算机可读指令用于实现权利要求1至11任一项所述的方法。
25.一种计算机程序产品,其特征在于,包括计算机可读指令;所述计算机可读指令用于实现权利要求1至11任一项所述的方法。