CN117931190A - 一种代码管理方法及相关设备 - Google Patents
一种代码管理方法及相关设备 Download PDFInfo
- Publication number
- CN117931190A CN117931190A CN202211255384.2A CN202211255384A CN117931190A CN 117931190 A CN117931190 A CN 117931190A CN 202211255384 A CN202211255384 A CN 202211255384A CN 117931190 A CN117931190 A CN 117931190A
- Authority
- CN
- China
- Prior art keywords
- subtask
- code
- descriptions
- user
- description
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000007726 management method Methods 0.000 title abstract description 125
- 238000000354 decomposition reaction Methods 0.000 claims abstract description 107
- 238000000034 method Methods 0.000 claims abstract description 61
- 230000006870 function Effects 0.000 claims description 212
- 230000003993 interaction Effects 0.000 claims description 38
- 230000015654 memory Effects 0.000 claims description 23
- 239000013589 supplement Substances 0.000 claims description 18
- 238000012549 training Methods 0.000 claims description 13
- 239000012634 fragment Substances 0.000 claims description 12
- 238000004590 computer program Methods 0.000 claims description 7
- 230000000694 effects Effects 0.000 abstract description 8
- 238000010586 diagram Methods 0.000 description 23
- 230000008569 process Effects 0.000 description 10
- 238000004891 communication Methods 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 9
- 238000011161 development Methods 0.000 description 8
- 238000012986 modification Methods 0.000 description 7
- 230000004048 modification Effects 0.000 description 7
- 239000008186 active pharmaceutical agent Substances 0.000 description 6
- 238000013473 artificial intelligence Methods 0.000 description 6
- 238000012790 confirmation Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 238000011160 research Methods 0.000 description 4
- 239000000284 extract Substances 0.000 description 3
- 238000003058 natural language processing Methods 0.000 description 3
- 230000004044 response Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 238000003339 best practice Methods 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 230000001364 causal effect Effects 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 230000002452 interceptive effect Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 230000009469 supplementation Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000010367 cloning Methods 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- NGVDGCNFYWLIFO-UHFFFAOYSA-N pyridoxal 5'-phosphate Chemical compound CC1=NC=C(COP(O)(O)=O)C(C=O)=C1O NGVDGCNFYWLIFO-UHFFFAOYSA-N 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001502 supplementing effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/72—Code refactoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Medical Informatics (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Mathematical Physics (AREA)
- Artificial Intelligence (AREA)
- Multi Processors (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供了一种代码管理方法,包括:接收用户输入的任务描述,将该任务描述分解为多个子任务描述,根据多个子任务描述生成多个子任务的代码,其中,多个子任务的代码与多个子任务描述一一对应。该方法通过引入对任务描述的分解,从而将任务分解为多个通用任务或原子任务(不支持进一步分解的任务),提高了在复杂的多步骤任务上代码生成的正确率,具有较好的代码生成效果,能够满足业务需求。
Description
技术领域
本申请涉及人工智能(artificial intelligence,AI)技术领域,尤其涉及一种代码管理方法、系统、计算设备集群、计算机可读存储介质、计算机程序产品。
背景技术
代码生成(code generation)或程序合成(program synthesis)技术,一直是软件工程(software engineering,SE)和人工智能领域学术研究中的热点,并且因其巨大的商业价值而备受工业界关注。近年来,得益于人工智能研究在自然语言处理(naturallanguage processing,NLP)和程序语言处理(programming language processing,PLP)方面取得的成果,两个领域技术的结合将代码生成相关技术从学术研究逐步推向实际应用。为了提高软件开发效率,各种基于AI的代码生成工具应运而生。
目前,基于AI的代码生成工具通常依赖基于大规模的预训练语言模型(pre-trained language model,PLM),在海量程序语言语料(如代码)上继续训练得到的因果语言模型(causal language model,CLM)。CLM可以根据用户输入的自然语言描述,生成特定程序语言的代码,从而实现用户以自然语言描述所表达的需求。
然而,上述基于AI的代码生成工具对所输入的自然语言描述高度依赖,自然语言描述的质量、层次、细节对生成效果影响巨大,导致基于AI的代码生成工具生成的代码的正确率整体较低,难以满足业务需求。
发明内容
本申请提供了一种代码管理方法,该方法通过引入对任务描述的分解,从而将任务分解为多个通用任务或原子任务(不支持进一步分解的任务),提高了在复杂的多步骤任务上代码生成的正确率,具有较好的代码生成效果,能够满足业务需求。本申请还提供了该方法对应的代码管理系统、计算设备集群、计算机可读存储介质以及计算机程序产品。
第一方面,本申请提供了一种代码管理方法。该方法可以由代码管理系统执行。代码管理系统可以是软件系统,该软件系统可以部署在计算设备集群中。计算设备集群通过执行软件系统的程序代码,从而执行本申请的代码管理方法。在一些实施例中,代码管理系统也可以是具有代码管理功能的硬件系统,该硬件系统运行时,执行本申请的代码管理方法。例如,代码管理系统可以是具有代码管理功能的计算设备集群。
具体地,代码管理系统可以接收用户输入的任务描述,将该任务描述分解为多个子任务描述,然后根据多个子任务描述生成多个子任务的代码,其中,多个子任务的代码与多个子任务描述一一对应。
区别于传统的代码生成工具按照自左向右的顺序生成代码,该方法在开发过程中更自然地遵循了从整体到部分的分治思维,分解后的自然语言描述和相应子任务,对于用户更容易理解,也更容易生成,而且还能进行代码复用,提高了代码生成效率和质量。
在一些可能的实现方式中,代码管理系统可以通过任务描述分解模型,将任务描述分解为多个子任务的参考描述,并根据用户对多个子任务的参考描述的反馈,获得多个子任务描述。
该方法通过任务描述分解模型,自动分解任务描述,生成更细粒度、更加命令式的子任务描述,从而进一步提升代码生成的正确率。
在一些可能的实现方式中,用户对多个子任务的参考描述的反馈可以包括:确认、修改或补充。该方法引入用户反馈,由用户对分解结果进行确认、修改或补充,如此使得分解得到子任务描述更加精准,由此生成的代码的正确率得以进一步提升。
在一些可能的实现方式中,代码管理系统可以通过从程序语言语料中抽取任务描述样例以及子任务描述样例,并根据任务描述样例以及子任务描述样例,通过生成式预训练方法训练任务描述分解模型。其中,任务描述分解模型以任务描述为输入,以子任务描述为输出。
由于在软件开发过程中,注释与代码经常交替出现,且不同层次的注释之间存在嵌套关系,该方法从程序语言语料中抽取样例,以进行任务描述分解模型的训练,以此获得更好的训练效果,从而提升任务描述分解的准确度。
在一些可能的实现方式中,代码管理系统可以将任务描述分解为多个第一子任务描述,并向用户呈现多个第一子任务描述,当用户触发分解操作,代码管理系统可以将多个第一子任务描述中的目标子任务描述分解为多个第二子任务描述。
考虑到高层级的任务可以存在嵌套,该方法引入人机交互,由用户判断是否进行子任务描述的继续分解,从而实现更加精准的任务描述分解。
在一些可能的实现方式中,代码管理系统还可以向用户呈现子任务的代码的注释。其中,子任务的代码的注释可以包括子任务描述。该方法使得用户可以直观地获取子任务的代码对应的子任务描述,从而便于用户对子任务的代码进行反馈。
在一些可能的实现方式中,代码管理系统可以根据多个子任务描述,生成代码片段、对库函数的调用或对自定义函数的调用的一种或多种。该方法基于代码的反向生成,利用代码片段补全算法,能够根据子任务描述的粒度,实现自动选择生成的代码形式的功能。
在一些可能的实现方式中,当自定义函数未定义时,代码管理系统还可以根据对自定义函数的调用以及上下文,生成自定义函数的声明和实现代码。该方法通过函数反向生成算法,为被调用但尚不存在的函数反向生成声明和定义,从而使得代码生成过程更加符合软件开发和重构的最佳实践。
在一些可能的实现方式中,代码管理系统可以根据自定义函数的调用以及上下文,生成自定义函数的声明。其中,自定义函数的声明可以包括自定义函数的注释、参数列表、参数类型、返回值类型中的一种或多种。接着,代码管理系统可以根据自定义函数的声明,生成自定义函数的实现代码。该方法可以自动从函数调用语句及其上下文中生成自定义函数的声明,从而生成自定义函数的实现代码,以完成代码生成。
在一些可能的实现方式中,代码管理系统还可以接收用户对自定义函数的声明的反馈,并根据用户对自定义函数的声明的反馈,更新自定义函数的声明。该方法引入用户反馈,使得用户可以对生成的自定义函数的声明进行确认、修改或补充,从而确保自定义函数的声明的准确度。
在一些可能的实现方式中,当用户触发分解操作,代码管理系统可以将自定义函数的声明分解,并根据分解结果,生成自定义函数的实现代码。该方法可以将自定义函数的声明作为子任务再次触发代码生成,从而逐步使代码更加完整。
在一些可能的实现方式中,代码管理系统可以将多个子任务的代码存储在用户指定的输出路径,从而便于用户对生成的代码进行管理。
在一些可能的实现方式中,代码管理系统可以为集成开发环境(integrateddevelopment environment,IDE)。其中,IDE可以包括本地的IDE或云端IDE。IDE具有基于任务描述分解的代码生成能力或插件,IDE的上述能力或插件被触发时,IDE执行接收用户输入的任务描述,将任务描述分解为多个子任务描述,根据多个子任务描述生成子任务的代码的步骤。如此,可以方便开发者进行软件开发,提高了开发效率。
在一些可能的实现方式中,代码管理系统可以为云服务,该云服务具有代码生成接口,当代码生成接口被调用时,云服务可以执行接收用户输入的任务描述,将任务描述分解为多个子任务描述,根据多个子任务描述生成子任务的代码的步骤。如此可以通过云服务为大量开发者提供代码生成服务,满足业务需求。
第二方面,本申请提供了一种代码管理系统。所述系统包括:
交互模块,用于接收用户输入的任务描述;
分解模块,用于将所述任务描述分解为多个子任务描述;
生成模块,用于根据所述多个子任务描述生成多个子任务的代码,所述多个子任务的代码与所述多个子任务描述一一对应。
在一些可能的实现方式中,所述分解模块具体用于:
通过任务描述分解模型,将所述任务描述分解为多个子任务的参考描述;
根据所述用户对所述多个子任务的参考描述的反馈,获得所述多个子任务描述。
在一些可能的实现方式中,所述用户对所述多个子任务的参考描述的反馈包括:确认、修改或补充。
在一些可能的实现方式中,所述任务描述分解模型通过如下方式训练得到:
从程序语言语料中抽取任务描述样例以及子任务描述样例;
根据所述任务描述样例以及所述子任务描述样例,通过生成式预训练方法训练所述任务描述分解模型,所述任务描述分解模型以任务描述为输入,以子任务描述为输出。
在一些可能的实现方式中,所述分解模块具体用于:
将所述任务描述分解为多个第一子任务描述;
向所述用户呈现所述多个第一子任务描述;
当所述用户触发分解操作,将所述多个第一子任务描述中的目标子任务描述分解为多个第二子任务描述。
在一些可能的实现方式中,所述交互模块还用于:
向所述用户呈现所述子任务的代码的注释,所述子任务的代码的注释包括所述子任务描述。
在一些可能的实现方式中,所述生成模块具体用于:
根据所述多个子任务描述,生成代码片段、对库函数的调用或对自定义函数的调用的一种或多种。
在一些可能的实现方式中,当所述自定义函数未定义时,所述生成模块还用于:
根据对所述自定义函数的调用以及上下文,生成所述自定义函数的声明和实现代码。
在一些可能的实现方式中,所述生成模块具体用于:
根据对所述自定义函数的调用以及上下文,生成所述自定义函数的声明,所述自定义函数的声明包括所述自定义函数的注释、参数列表、参数类型、返回值类型中的一种或多种;
根据所述自定义函数的声明,生成所述自定义函数的实现代码。
在一些可能的实现方式中,所述交互模块还用于:
接收所述用户对所述自定义函数的声明的反馈;
根据所述用户对所述自定义函数的声明的反馈,更新所述自定义函数的声明。
在一些可能的实现方式中,所述生成模块具体用于:
当所述用户触发分解操作,将所述自定义函数的声明分解;
根据分解结果,生成所述自定义函数的实现代码。
第三方面,本申请提供一种计算设备集群。所述计算设备集群包括至少一台计算设备,所述至少一台计算设备包括至少一个处理器和至少一个存储器。所述至少一个处理器、所述至少一个存储器进行相互的通信。所述至少一个处理器用于执行所述至少一个存储器中存储的指令,以使得计算设备或计算设备集群执行如第一方面或第一方面的任一种实现方式所述的代码管理方法。
第四方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,所述指令指示计算设备或计算设备集群执行上述第一方面或第一方面的任一种实现方式所述的代码管理方法。
第五方面,本申请提供了一种包含指令的计算机程序产品,当其在计算设备或计算设备集群上运行时,使得计算设备或计算设备集群执行上述第一方面或第一方面的任一种实现方式所述的代码管理方法。
本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
附图说明
为了更清楚地说明本申请实施例的技术方法,下面将对实施例中所需使用的附图作以简单地介绍。
图1为本申请实施例提供的一种代码管理系统的架构示意图;
图2为本申请实施例提供的一种代码管理方法的流程图;
图3为本申请实施例提供的一种代码管理方法的应用场景示意图;
图4为本申请实施例提供的一种前端界面的界面示意图;
图5为本申请实施例提供的一种人机交互界面的界面示意图;
图6为本申请实施例提供的一种修改或填充后的人机交互界面的界面示意图;
图7为本申请实施例提供的另一种前端界面的界面示意图;
图8为本申请实施例提供的一种代码生成结果的示意图;
图9为本申请实施例提供的一种触发反向生成未定义函数的示意图;
图10为本申请实施例提供的一种导入语句或者重新实现以生成未定义函数的函数定义的示意图;
图11为本申请实施例提供的另一种代码管理方法的应用场景示意图;
图12为本申请实施例提供的一种计算设备的结构示意图;
图13为本申请实施例提供的一种计算设备集群的结构示意图;
图14为本申请实施例提供的一种计算设备集群的结构示意图;
图15为本申请实施例提供的一种计算设备集群的结构示意图。
具体实施方式
本申请实施例中的术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。
首先对本申请实施例中所涉及到的一些技术术语进行介绍。
代码生成(code generation),是指通过人工智能(artificial intelligence,AI)辅助开发者开发代码的技术。代码生成可以分为如下类别:根据代码生成代码(也称作code2code)、根据文本生成代码(也称作text2code)。
text2code,具体是从自然语言描述中生成特定编程语言的代码,从而实现用户以自然语言描述所表达的需求。类比于开发者编写代码的过程,text2code对应的代码生成器(code generator)的工作过程类似于开发者先编写代码注释,再由代码生成器生成对应于该注释所描述功能的代码片段,以推荐的形式呈现,由开发者决定接受或拒绝其推荐,或接受后再进行进一步修改。
然而,上述代码生成工具对所输入的自然语言描述高度依赖,自然语言描述的质量、层次、细节对生成效果影响巨大。在需要多个步骤完成的任务上的生成效果普遍较差,相关研究表明,增加一个步骤,代码生成工具的正确率下降幅度可以达到70%。代码生成工具生成的代码的正确率整体较低,难以满足业务需求。
有鉴于此,本申请提供一种代码管理方法。该方法可以由代码管理系统执行。代码管理系统可以是软件系统,该软件系统可以部署在计算设备集群,计算设备集群执行软件系统的程序代码,从而执行本申请的代码管理方法。其中,代码管理系统用于开发者在代码编辑器或集成开发环境(integrated development environment,IDE)中编写代码的场景,基于此,代码管理系统可以以IDE插件的形式直接服务于用户。代码管理系统也可以以云服务或能力的形式提供给其他工具,通过应用程序编程接口(application programminginterface,API)的形式进行调用。在一些可能的实现方式中,代码管理系统也可以是硬件系统,硬件系统运行时执行本申请的代码管理方法。为了便于描述,下文以代码管理系统为软件系统示例说明。
具体地,代码管理系统接收用户输入的任务描述,将该任务描述分解为多个子任务描述,然后根据多个子任务描述生成多个子任务的代码,其中,多个子任务的代码与多个子任务描述一一对应。
该方法通过引入对任务描述的分解,从而将任务分解为多个通用任务或原子任务(不支持进一步分解的任务),提高了在复杂的多步骤任务上代码生成的正确率,具有较好的代码生成效果,能够满足业务需求。进一步地,该方法还可以引入用户反馈,由用户对分解结果进行确认、修改或补充,如此使得分解得到子任务描述更加精准,由此生成的代码的正确率得以进一步提升。
此外,区别于传统的代码生成工具按照自左向右的顺序生成代码,该方法在开发过程中更自然地遵循了从整体到部分的分治思维,分解后的自然语言描述和相应子任务,对于用户更容易理解,也更容易生成,而且还能进行代码复用,提高了代码生成效率和质量。
为了使得本申请的技术方案更加清楚、易于理解,下面结合附图对本申请的代码管理系统的架构进行介绍。
参见图1所示的代码管理系统的架构示意图,代码管理系统100包括交互模块102、分解模块104和生成模块106。下面分别对各个模块的功能进行介绍。
交互模块102用于接收用户输入的任务描述,该任务描述可以是自然语言描述,由于任务描述是用户原始输入的,也称作原始描述。例如,原始描述可以为“Get the defaultbranch of a repo on GitHub”。其中,交互模块102可以通过交互界面中的代码编辑界面接收用户输入的任务描述。交互界面可以是图形用户界面(graphical user interface,GUI),或者是命令用户界面(command user interface,CUI)。
分解模块104用于将所述任务描述分解为多个子任务描述。子任务描述是由任务描述分解得到,因此子任务描述也可以称作分解后描述。其中,任务描述通常可以作为文件、类或函数级注释,子任务描述通常可以作为代码块、行级注释。例如,子任务描述可以为“clone the repo”、“run git command”以及“print branch name”。
具体实现时,分解模块104可以通过任务描述分解模型,将任务描述分解为多个任务子描述。在一些可能的实现方式中,分解模块104可以通过任务描述分解模型,将所述任务描述分解为多个子任务的参考描述,交互模块102还用于向用户呈现多个子任务的参考描述,接收用户对多个子任务的参考描述的反馈,分解模块104根据用户对多个子任务的参考描述的反馈,获得多个子任务的描述。其中,用户对多个子任务的参考描述的反馈可以包括确认、修改或补充。
生成模块106用于根据多个子任务描述生成多个子任务的代码。多个子任务的代码与多个子任务描述一一对应。进一步地,与分解模块104类似,交互模块102还用于向用户呈现生成模块106生成的子任务的代码,接收用户对子任务的代码的反馈,该反馈可以包括确认、修改或补充,然后生成模块106可以根据用户对多个子任务的代码的反馈,更新多个子任务的代码。
基于本申请实施例提供的上述代码管理系统100,本申请实施例还提供了一种代码管理方法,下面结合附图对本申请实施例的代码管理方法进行详细介绍。
参见图2所示的代码管理方法的流程图,该方法包括:
S202:代码管理系统100接收用户输入的任务描述。
具体地,用户输入的任务描述可以是自然语言描述,该任务描述可以是较高层级的任务描述,例如为文件、类、函数级生物描述,用于生成文件、函数或类。该任务描述采用了自然语言描述任务的功能或具体实现,因而可以作为代码的注释。为了将代码与注释区分,任务描述可以包括表征注释的关键字,例如为“#”。
具体实现时,代码管理系统100可以向用户呈现代码编辑界面,该代码编辑界面可以是GUI或者是CUI,用户可以通过GUI或CUI,输入以表征注释的关键字为起始字符的自然语言描述,代码管理系统100可以接收上述自然语言描述。
S204:代码管理系统100将所述任务描述分解为多个第一子任务描述。
具体地,代码管理系统100可以通过任务描述分解模型对任务描述进行分解。任务描述分解模型自动分解任务描述(也即原始描述、原注释),生成更细粒度的、更加命令式的子任务描述。
需要说明,代码管理系统100可以直接将任务描述分解模型自动分解得到的描述作为第一子任务描述,也可以将任务描述分解模型自动分解得到的描述作为参考描述,引入人机交互,由用户基于参考描述确定第一子任务描述。
S206:代码管理系统100向所述用户呈现所述多个第一子任务描述。当用户触发分解操作,执行S208;否则执行S210。
具体地,当代码管理系统100直接将任务描述分解模型自动分解得到的描述作为第一子任务描述时,代码管理系统100向用户呈现任务描述分解模型自动分解得到的描述。当代码管理系统100引入人机交互时,代码管理系统100向用户呈现任务描述分解模型自动分解得到的描述,接收用户对该描述的反馈,例如是对该描述的确认、修改或补充,代码管理系统100可以根据用户对该描述的反馈,获得多个第一子任务描述,向用户呈现多个第一子任务描述。
考虑到高层级的任务可以存在嵌套,用户可以对多个第一子任务描述是否能继续分解进行判断。当多个第一子任务描述中存在能够继续分解的目标子任务描述,用户可以触发分解操作。相应地,代码管理系统100可以响应于分解操作,执行S208。当多个第一子任务描述中不存在能够继续分解的目标子任务描述,也即第一子任务描述均为原子任务描述,代码管理系统100可以直接执行S210。
S208:代码管理系统100将多个第一子任务描述中的目标子任务描述分解为多个第二子任务描述。
目标子任务描述能够继续分解,也即目标子任务描述为高层级的任务描述,代码管理系统100可以将目标子任务描述输入任务描述分解模型,获得更细粒度的子任务描述。与将任务描述分解为多个第一子任务描述类似,代码管理系统100可以直接将任务描述分解模型自动分解得到的描述作为第二子任务描述,也可以引入人机交互,由用户对自动分解得到的描述进行反馈,从而获得第二子任务描述。
当多个第二子任务描述不存在能够继续分解的目标子任务描述,也即第二子任务描述均为原子任务描述,代码管理系统100可以执行S210,否则代码管理系统100可以对第二子任务描述中支持分解的描述继续分解。
上述S204至S208为代码管理系统100将任务描述分解为多个子任务描述的一些具体实现方式,在本申请实施例其他可能的实现方式中,也可以采用其他方式进行任务描述的分解。
S210:代码管理系统100根据多个子任务描述生成多个子任务的代码。
当第一子任务描述不存在能够继续分解的目标子任务描述,多个子任务描述可以为多个第一子任务描述,当第一子任务描述存在能够继续分解的目标子任务描述,多个子任务描述可以为除了目标子任务描述以外的第一子任务描述以及由目标子任务描述分解得到的第二子任务描述。
代码管理系统100可以确定子任务的实现形式,然后按照相应形式生成子任务的代码。例如,对于简单的步骤,代码管理系统100直接生成代码片段。其中,代码片段可以包括简单语句或代码块,代码块包括但不限于变量声明、赋值语句、分支或循环结构。又例如,对于可使用库函数(包括但不限于标准库或三方库的API)实现的步骤,代码管理系统100生成对相应的库函数的调用。还例如,对于较为复杂的步骤,代码管理系统100生成对自定义函数的调用,具体是生成一个或多个函数调用语句。被调用的自定义函数可能来源于项目其他位置,也可以不存在。
当自定义函数未定义时,代码管理系统100可以根据对所述自定义函数的调用以及上下文,生成所述自定义函数的声明和实现代码。具体地,代码管理系统100可以应用软件分析技术,将函数调用的上下文信息(如修饰该函数的注释、函数传入的实际参数、函数返回值的使用等)转换为函数声明中的信息(如函数级注释、参数列表和类型、返回值类型等),并据此生成函数定义的签名(function signature)部分。该部分可以作为一个子任务,继续输入到任务描述分解模型中进一步分解;若粒度已经足够原子,则可以直接输入到代码生成模型中进行实现,将生成的代码作为其函数体(function body)补充到函数定义中。
S212:代码管理系统100向用户呈现多个子任务的代码。
S214:代码管理系统100接收用户对多个子任务的代码的反馈。
S216:代码管理系统100根据用户多个子任务的代码的反馈,更新子任务的代码。
与对子任务描述进行反馈类似,代码管理系统100也可以引入人机交互,由用户对自动生成的代码进行反馈,例如是对自动生成的代码进行确认、修改或补充,从而保障代码的正确率。
对于某一子任务的实现,用户可随时进行修改、测试、调试等常规开发操作,从而保证部分代码的正确性。最终,当所有的子任务都实现后,所有代码即构成了对原始描述所描述的任务的一个实现方案。
需要说明的是,上述S212至S216为本申请实施例的可选步骤,执行本申请实施例的代码管理方法也可以不执行上述S212至S216。例如,代码管理系统100可以直接自动生成的代码作为子任务的实现代码。
基于上述内容,本申请实施例提供的代码管理方法将抽象的高层任务描述自动分解为子任务描述,通过对细粒度的子任务描述分别生成相应的代码,可以提高代码的正确率。而且,该方法可以引入人机交互,由用户对自动生成的子任务描述进行确认,允许用户加以修改和补充,使得用于生成代码的AI模型的输入更加精确,进一步提高代码的正确率。
该方法可以根据用户确认的子任务粒度,动态决定生成代码片段、库函数调用、或者自定义函数调用等不同结构,最终形成的代码天然具有较清晰的结构和注释,无需用户手动注释,降低交互成本。进一步地,当自定义函数调用存在未定义的函数时,可以分析生成代码中用户期望的函数调用的注释、形式、参数、返回类型等,自动生成函数声明,然后对将函数声明作为任务描述进行分解,分解后的子任务粒度更加原子化,有利于最大化发挥AI模型在通用性代码上的生成优势。
接下来,对代码管理方法在不同场景中的应用分别示例说明。
首先,参见图3所示的一种代码管理方法的应用场景示意图,该场景中,代码管理系统100以IDE插件的形式直接服务用户。区别于同类代码生成工具,本申请实施例在一般的代码生成流程前后,创新性地引入了对任务描述的分解、用户的交互和反馈、以及函数的反向生成技术,在面对复杂多步骤任务时比同类工具更为有效。
具体而言,代码管理系统100生成代码的过程可以分为如下两个阶段:人机交互的任务描述分解阶段和以反向生成为核心的代码生成阶段。
在人机交互的任务描述分解阶段,用户提供初始的任务描述(文件/类/函数级注释),由任务描述分解模型自动分解原注释,生成更细粒度的、更加命令式的、子任务描述,并以代码块/行级注释的形式呈现给用户。用户可以阅读所生成的子任务描述,选择确认、修改或补充,当修改或补充完成后可以继续进行确认。用户完成确认后,进入代码生成阶段。
在以反向生成为核心的代码生成阶段,代码管理系统100根据经用户确认的子任务描述,为子任务进行代码实现。步骤式的子任务描述可以从上到下逐步输入到一个代码片段补全算法中,该算法可以根据步骤的粒度,自动选择生成的代码形式。代码形式可以包括代码片段、对库函数的调用或对自定义函数的调用。用户可以阅读代码,选择确认、修改或补充。
进一步地,被调用的自定义函数可能来源于项目其他位置,也可以不存在。当该自定义函数不存在时,代码生成系统100可以通过函数反向生成算法,为被调用但尚不存在的函数反向生成其声明和定义。具体地,代码生成系统100可以通过函数反向生成算法,先生成函数声明,函数声明包括函数级注释、参数列表和类型、返回值类型中的至少一种。进一步地,代码生成系统100可以根据函数声明生成函数定义的签名。函数定义的签名可以作为子任务描述输入到任务描述分解模型中进一步分解。当然,自定义函数足够原子,也可以直接输入到代码生成模型,将代码生成模型生成的代码作为函数体补充至函数定义中。
下面将从前端界面、人机交互、技术方案等方面,详细介绍任务描述分解阶段、代码生成阶段的实现和工作过程。
参见图4所示一种前端界面的示意图,与其他同类工具一样,本实施例的主要实现形式是作为代码编辑器或IDE的扩展功能或插件,因此前端界面是主要内嵌于IDE中的代码生成辅助工具。
以Jetbrains系列IDE、Python语言、函数级生成为例,用户期望生成一个名为get_branch_name的函数,该函数的主要功能是:“获得一个GitHub仓库的默认分支”,它接受一个参数repo作为输入,应返回默认分支名作为输出。然而,此描述是不清晰的,如果直接进行代码生成,可能会产生多种不同的但不符合期望的生成结果。
在此结果中,代码生成工具认为repo变量是有一个对象,直接简单返回其分支名属性;然而,函数实际上接受的是一个GitHub仓库的全名,此仓库不一定存在于用户本地,但现有签名和注释中并未体现这一点。因此,有必要通过人机交互进一步明确用户的需求和条件。例如用户可以点击“Generate”触发代码生成,并进入人机交互界面。
参见图5所示的人机交互界面的示意图,当用户给定较高层次的任务描述(如该例中的函数级注释),代码管理系统100将首先尝试从中生成若干个更具体的步骤式注释(如函数体内的块级和行级注释)。在图5中,获取一个GitHub仓库默认分支名这一任务被分为了三步:下载该仓库到本地,运行Git命令,打印出默认分支名。然而,由于下载耗时且占据磁盘空间,且用户本地不一定安装了Git工具,对于仅获取默认分支名这一轻量操作来说,此分解方案过于重量,依然不符合用户需求。
此时,用户可直接删除所有生成的块级和行级注释,重新按下回车后,工具会再次尝试生成一个不同的分解方案。为了使生成的分解方案更加贴近真正需求,用户可以对函数签名和函数注释进行修改,以补充更多的信息和条件,例如添加参数和返回值类型、指定需要满足的条件等。如图6所示的人机交互界面的示意图,当用户在签名中补充参数和返回值类型为字符串、在注释中补充不需要克隆仓库等信息后按下回车,工具将生成另一个方案,包括三个步骤:创建GitHub GraphQL格式的请求、发送请求并获得响应、解析响应并返回其中包含的分支名字段。
其中,将任务描述分解为子任务描述可以通过任务描述分解模型实现。任务描述分解模型通过训练一个AI模型得到。在软件开发过程中,注释与代码经常交替出现,且不同层次的注释之间存在嵌套关系,记录了开发者在编写代码时的步骤分解过程。例如,文件、类、函数级的注释往往从较高的抽象层次介绍该部分代码整体的作用或使用方法,而行级、块级的注释则多为对所修饰代码片段功能的解释,作为其所在函数注释的步骤说明或细节补充。因此,代码管理系统100可以首先从程序语言语料中抽取任务描述样例以及子任务描述样例,例如是从海量源代码中抽取出各级注释,高层级注释为任务描述样例,高层级注释的子注释为子任务描述样例,根据任务描述样例以及子任务描述样例,通过生成式预训练方法训练所述任务描述分解模型。该任务描述分解模型以任务描述为输入,以子任务描述为输出。
接着,参见7所示的另一种前端界面的示意图,当用户确认子任务描述(也称作步骤式注释)后,通过在某个步骤式注释所在行按下快捷键(如Alt+Enter)或选中某注释后点击右键选择“生成代码”,该注释会被输入到算法中进行代码生成。
图8示出了一种代码生成结果的示意图,如图8所示,IDE此时提示出若干错误信息,因为生成的代码中包含了对未定义函数的调用,用户期望该函数内部可以通过一部分代码实现某种功能,此时每个函数可看作原任务的一个子任务。
通常情况下,开发者需要先编写函数声明或定义,再进行调用,且多数代码生成工具也需要先扫描上下文中已定义的函数才有可能推荐出对现有函数的调用代码。但实际上,先实现主要逻辑,将子函数暂时看做黑箱来使用的方式,更符合软件开发和重构的最佳实践。
为了处理对未定义函数的调用这一情况,代码管理系统100引入了反向生成功能。从交互角度而言,反向生成功能的工作过程是:当用户确认调用出的代码正确之后,可以在函数调用处按下快捷键(如Alt+Enter)或选中某注释后点击右键选择“生成代码”(如图9所示),此时代码管理系统100可以自动生成该函数的函数声明,包含该函数的签名、参数列表及类型、返回值类型、注释等要素。如图10所示,如果该函数来自于其他文件中,代码管理系统100自动生成对该函数的导入语句而不是重新实现;否则,该函数的函数声明部分可以被输入到任务描述分解模型中进行进一步分解,或直接输入到代码生成模型中进行实现代码的生成。
代码管理系统100实现反向生成的关键在于从函数调用中分析得出其定义的签名部分所应包含的信息。在本技术方案中,签名部分的各个要素以及对应的实现方式如下:
(1)函数注释:通过解析函数调用语句,定位修饰该语句的行级注释,将该注释格式化为函数级注释,复制到函数定义位置并适配上下文代码格式;
(2)函数名以及参数类型:使用软件分析中的程序切片技术抽取与该函数调用存在数据流和控制流依赖的上下文代码,特别是函数参数相关的语句;使用类型推断技术得出函数参数类型,并与参数名一一对应,以符合语法的形式带入到函数定义位置;
(3)返回类型:使用后向程序切片技术以及类型推断技术,根据调用处对返回值的定义和使用,推断得到期望函数返回的类型,以符合语法的形式带入到函数定义位置。
需要说明的是,Jetbrains系列的IDE中提供了对不存在的函数的检测、提示以及签名的自动生成功能,但仅能根据规则简单生成函数签名部分,并不能包含注释、数据类型等重要信息。本申请实施例中的反向生成功能在体现形式上可兼容和复用IDE提供的这种能力,并进一步引入了软件分析技术以补充更多重要信息,以使得代码生成模型或任务描述分解模型的输入更加准确。当用户确认子任务的函数名、实参、返回值等信息后,再输入模型中进一步生成其实现代码(即函数体)。分解后的子任务相比于原任务,对于开发者而言更容易描述清楚,对于模型而言也更容易生成正确的代码。用户还可以在生成过程中通过针对子任务的单元测试来修改调试模型生成的结果,从而达到分而治之、逐步生成的效果。
接着,参见图11所示的另一种代码管理方法的应用场景示意图,该场景中,代码管理系统100以云服务的形式提供给其他工具,通过API接口的形式进行调用。其中,API可以提供如下能力:
1.对任务描述进行分解和确认:输入为文件/类/函数级注释,输出为分解后的块级/行级注释。
2.根据任务粒度进行代码补全:输入为分解后的注释,输出为生成的代码。该代码可以包括代码片段(如简单语句、代码块)、语句、对库函数的调用、对自定义函数的调用。
3.根据对自定义函数的调用反向生成函数定义:输入为对自定义函数的调用及其上下文,输出为完整的函数定义(包括函数声明和实现代码)。
由于本申请实施例的云服务实际上独立于具体的代码生成技术,因此以上能力在不同的代码生成技术间具有通用性,可被不同的工具集成,作为一个整体提升代码生成的用户体验。
如图11所示,本申请实施例所提供的能力1可以用于实际触发代码生成之前:先通过用户交互将任务描述分解,用户在确认子任务描述后,可以选择一种或多种代码生成工具(如Copilot,Tabnine等)或补全工具(如IDE内置补全和推荐工具等)进行代码实现。此类工具的推荐往往以推荐列表的形式呈现,此时可使用能力2进行工具的选择及结果的排序(例如,对于简单一行代码片段即可实现的部分,直接调用行级补全并将结果排序在前;对于需要使用库API实现的部分,将IDE中的API联想结果排序在前)。当工具生成的代码被用户接受,但其中存在尚未实现的函数调用时,能力3则可以自动从函数调用语句及其上下文中生成函数声明以及注释,作为子任务再次触发代码生成,从而逐步使代码更加完整,且可通过单元测试验证每一步实现的正确性,从而最终解决原始问题。
基于本申请实施例提供的代码管理方法,本申请实施例还提供了一种如前述的代码管理系统100。下面结合附图对代码管理系统100进行介绍。
参见图1所示的代码管理系统100的结构示意图,该系统100包括:
交互模块102,用于接收用户输入的任务描述;
分解模块104,用于将所述任务描述分解为多个子任务描述;
生成模块106,用于根据所述多个子任务描述生成多个子任务的代码,所述多个子任务的代码与所述多个子任务描述一一对应。
上述交互模块102、分解模块104和生成模块106可以通过硬件模块实现或通过软件模块实现。其中,交互模块102可以通过收发器或者收发器上的软件实现。分解模块104、生成模块106可以通过计算设备或者计算设备上的计算引擎实现。下面,以分解模块104为例进行说明。
当通过软件实现时,分解模块104可以是运行在计算设备或计算设备集群上的应用程序或者应用程序模块,如计算引擎等。
当通过硬件实现时,分解模块104中可以包括至少一个计算设备,如服务器等。或者,分解模块104也可以是利用专用集成电路(application-specific integratedcircuit,ASIC)实现、或可编程逻辑器件(programmable logic device,PLD)实现的设备等。其中,上述PLD可以是复杂程序逻辑器件(complex programmable logical device,CPLD)、现场可编程门阵列(field-programmable gate array,FPGA)、通用阵列逻辑(generic array logic,GAL)或其任意组合实现。
在一些可能的实现方式中,分解模块104具体用于:
通过任务描述分解模型,将任务描述分解为多个子任务的参考描述;
根据用户对多个子任务的参考描述的反馈,获得多个子任务描述。
在一些可能的实现方式中,用户对多个子任务的参考描述的反馈包括:确认、修改或补充。
在一些可能的实现方式中,任务描述分解模型通过如下方式训练得到:
从程序语言语料中抽取任务描述样例以及子任务描述样例;
根据任务描述样例以及子任务描述样例,通过生成式预训练方法训练任务描述分解模型,任务描述分解模型以任务描述为输入,以子任务描述为输出。
在一些可能的实现方式中,分解模块104具体用于:
将任务描述分解为多个第一子任务描述;
向用户呈现多个第一子任务描述;
当用户触发分解操作,将多个第一子任务描述中的目标子任务描述分解为多个第二子任务描述。
在一些可能的实现方式中,交互模块102还用于:
向用户呈现子任务的代码的注释,其中,子任务的代码的注释包括子任务描述。
在一些可能的实现方式中,生成模块106具体用于:
根据多个子任务描述,生成代码片段、对库函数的调用或对自定义函数的调用的一种或多种。
在一些可能的实现方式中,当自定义函数未定义时,生成模块106还用于:
根据对自定义函数的调用以及上下文,生成自定义函数的声明和实现代码。
在一些可能的实现方式中,生成模块106具体用于:
根据对自定义函数的调用以及上下文,生成自定义函数的声明,其中,自定义函数的声明包括自定义函数的注释、参数列表、参数类型、返回值类型中的一种或多种;
根据自定义函数的声明,生成自定义函数的实现代码。
在一些可能的实现方式中,交互模块102还用于:
接收用户对自定义函数的声明的反馈;
根据用户对自定义函数的声明的反馈,更新自定义函数的声明。
在一些可能的实现方式中,生成模块106具体用于:
当用户触发分解操作,将自定义函数的声明分解;
根据分解结果,生成自定义函数的实现代码。
本申请还提供一种计算设备1200。如图12所示,计算设备1200包括:总线1202、处理器1204、存储器1206和通信接口1208。处理器1204、存储器1206和通信接口1208之间通过总线1202通信。计算设备1200可以是服务器或终端设备。应理解,本申请不限定计算设备1200中的处理器、存储器的个数。
总线1202可以是外设部件互连标准(peripheral component interconnect,PCI)总线或扩展工业标准结构(extended industry standard architecture,EISA)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图12中仅用一条线表示,但并不表示仅有一根总线或一种类型的总线。总线1204可包括在计算设备1200各个部件(例如,存储器1206、处理器1204、通信接口1208)之间传送信息的通路。
处理器1204可以包括中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)、微处理器(micro processor,MP)或者数字信号处理器(digital signal processor,DSP)等处理器中的任意一种或多种。
存储器1206可以包括易失性存储器(volatile memory),例如随机存取存储器(random access memory,RAM)。处理器1204还可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-only memory,ROM),快闪存储器,机械硬盘(hard diskdrive,HDD)或固态硬盘(solid state drive,SSD)。存储器1206中存储有可执行的程序代码,处理器1204执行该可执行的程序代码以实现前述代码管理方法。具体的,存储器1206上存有代码管理系统100用于执行代码管理方法的指令。
通信接口1203使用例如但不限于网络接口卡、收发器一类的收发模块,来实现计算设备1200与其他设备或通信网络之间的通信。
本申请实施例还提供了一种计算设备集群。该计算设备集群包括至少一台计算设备。该计算设备可以是服务器,例如是中心服务器、边缘服务器,或者是本地数据中心中的本地服务器。在一些实施例中,计算设备也可以是台式机、笔记本电脑或者智能手机等终端设备。
如图13所示,所述计算设备集群包括至少一个计算设备1200。计算设备集群中的一个或多个计算设备1200中的存储器1206中可以存有相同的代码管理系统100用于执行代码管理方法的指令。
在一些可能的实现方式中,该计算设备集群中的一个或多个计算设备1200也可以用于执行代码管理系统100用于执行代码管理方法的部分指令。换言之,一个或多个计算设备1200的组合可以共同执行代码管理系统100用于执行代码管理方法的指令。
需要说明的是,计算设备集群中的不同的计算设备1200中的存储器1206可以存储不同的指令,用于执行代码管理系统100的部分功能。
图14示出了一种可能的实现方式。如图14所示,两个计算设备1200A和1200B通过通信接口1208实现连接。计算设备1200A中的存储器上存有用于执行交互模块102的功能的指令。计算设备1200B中的存储器上存有用于执行分解模块104和生成模块106的功能的指令。换言之,计算设备1200A和1200B的存储器1206共同存储了代码管理系统100用于执行代码管理方法的指令。
图14所示的计算设备集群之间的连接方式可以是考虑到本申请提供的代码管理方法需要接收用户输入的任务描述和对任务描述进行分解,从而生成代码。因此考虑将交互模块102实现的功能交由计算设备1200A执行,分解模块104和生成模块106实现的功能由计算设备1200B执行。
应理解,图14中示出的计算设备1200A的功能也可以由多个计算设备1200完成。同样,计算设备1200B的功能也可以由多个计算设备1200完成。
在一些可能的实现方式中,计算设备集群中的一个或多个计算设备可以通过网络连接。其中,所述网络可以是广域网或局域网等等。图15示出了一种可能的实现方式。如图15所示,两个计算设备1200C和1200D之间通过网络进行连接。具体地,通过各个计算设备中的通信接口与所述网络进行连接。在这一类可能的实现方式中,计算设备1200C中的存储器1206中存有执行交互模块102的功能的指令。同时,计算设备1200D中的存储器1206中存有执行分解模块104和生成模块106的功能的指令。
图15所示的计算设备集群之间的连接方式可以是考虑到本申请提供的代码管理方法需要接收用户输入的任务描述和对任务描述进行分解,从而生成代码。因此考虑将交互模块102实现的功能交由计算设备1200C执行,分解模块104和生成模块106实现的功能由计算设备1200D执行。应理解,图15中示出的计算设备1200C的功能也可以由多个计算设备1200完成。同样,计算设备1200D的功能也可以由多个计算设备1200完成。
本申请实施例还提供了一种计算机可读存储介质。所述计算机可读存储介质可以是计算设备能够存储的任何可用介质或者是包含一个或多个可用介质的数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘)等。该计算机可读存储介质包括指令,所述指令指示计算设备执行上述应用于代码管理系统用于执行代码管理方法。
本申请实施例还提供了一种包含指令的计算机程序产品。所述计算机程序产品可以是包含指令的,能够运行在计算设备上或被储存在任何可用介质中的软件或程序产品。当所述计算机程序产品在至少一个计算设备上运行时,使得至少一个计算设备执行上述代码管理方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的保护范围。
Claims (25)
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任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211255384.2A CN117931190A (zh) | 2022-10-13 | 2022-10-13 | 一种代码管理方法及相关设备 |
PCT/CN2023/101370 WO2024078000A1 (zh) | 2022-10-13 | 2023-06-20 | 一种代码管理方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211255384.2A CN117931190A (zh) | 2022-10-13 | 2022-10-13 | 一种代码管理方法及相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117931190A true CN117931190A (zh) | 2024-04-26 |
Family
ID=90668637
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211255384.2A Pending CN117931190A (zh) | 2022-10-13 | 2022-10-13 | 一种代码管理方法及相关设备 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN117931190A (zh) |
WO (1) | WO2024078000A1 (zh) |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP2136322A1 (de) * | 2008-06-18 | 2009-12-23 | Marc Thom | Kollaboratives Bearbeitungsverfahren und -system |
CN104461708B (zh) * | 2014-12-03 | 2017-12-26 | 国家电网公司 | 任务信息处理方法和系统 |
US10140101B2 (en) * | 2015-08-26 | 2018-11-27 | International Business Machines Corporation | Aligning natural language to linking code snippets to perform a complicated task |
WO2018236674A1 (en) * | 2017-06-23 | 2018-12-27 | Bonsai Al, Inc. | HIERARCHICAL DECOMPOSITION DEEPENING REINFORCEMENT LEARNING FOR A MODEL OF ARTIFICIAL INTELLIGENCE |
CN110941427B (zh) * | 2019-11-15 | 2023-10-20 | 珠海豹趣科技有限公司 | 代码生成方法及代码生成器 |
CN114493358A (zh) * | 2022-02-17 | 2022-05-13 | 数字浙江技术运营有限公司 | 指标分解方法、装置和电子设备 |
-
2022
- 2022-10-13 CN CN202211255384.2A patent/CN117931190A/zh active Pending
-
2023
- 2023-06-20 WO PCT/CN2023/101370 patent/WO2024078000A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
WO2024078000A1 (zh) | 2024-04-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Pradel et al. | Typewriter: Neural type prediction with search-based validation | |
US11875136B2 (en) | Edit automation using a temporal edit pattern | |
US11561772B2 (en) | Low-code development platform | |
US9361068B2 (en) | System and method for using development objectives to guide implementation of source code | |
EP3365772B1 (en) | Missing include suggestions for external files | |
US20140173563A1 (en) | Editor visualizations | |
US11941372B2 (en) | Edit automation using an anchor target list | |
US20140298290A1 (en) | Identification of code changes using language syntax and changeset data | |
US10489167B2 (en) | Dynamically binding data in an application | |
CN106484389B (zh) | 动作流分段管理 | |
US20240061653A1 (en) | Collaborative industrial integrated development and execution environment | |
CN115469849B (zh) | 一种业务处理系统、方法、电子设备和存储介质 | |
CN116595967A (zh) | 一种基于文本的自然语言规则编写方法及相关装置 | |
CN114449063B (zh) | 一种报文处理方法、装置及设备 | |
CN117931190A (zh) | 一种代码管理方法及相关设备 | |
Gandhi et al. | Natural Language Commanding via Program Synthesis | |
CN112988139A (zh) | 事件处理文件的开发方法与装置 | |
WO2024082983A1 (zh) | 一种代码推荐方法、装置及相关设备 | |
US11526366B2 (en) | Dynamically binding data in an application | |
WO2024078472A1 (zh) | 一种调试云服务应用程序接口api的方法、装置以及相关设备 | |
Chen et al. | Navigation Flow Modeling as a Basis for the Automatic Generation of Android APPs. | |
CN117931146A (zh) | 一种代码推荐方法、装置及相关设备 | |
CN117632224A (zh) | 一种代码管理方法及相关设备 | |
CN115469896A (zh) | 基于低代码的复杂业务应用建模系统及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |