本发明涉及一种基于api文档的代码生成方法、装置、设备及存储介质,属于软件。
背景技术:
1、在当前软件开发环境中,使用大规模预训练模型chatgpt生成代码已经是一种实用的解决方案,尤其是在生成不太复杂的代码时。然而,这个过程面临着几个主要问题:
2、1.生成代码是否正确。一般来说,在完成简单任务时生成代码正确率较高;但在生成较复杂任务时,大规模预训练模型gpt往往会自己编造函数来使代码看起来合理,但实际上是无法运行的。
3、2.生成代码是否符合需求。一般来说,大规模预训练模型gpt都是根据他以往的训练数据来生成代码,但在有些场景下,根据他以往的训练数据不够满足需求,例如:有些业务场景只允许使用自己开发的函数,或者一些大规模预训练模型gpt不知道的函数,那么它就无法完成。在这种情况下,大规模预训练模型gpt也往往会编造函数来使代码看起来合理。
4、3.使用函数是否准确。一般来说,大规模预训练模型gpt是根据我们给的提示信息来生成代码,所以怎么准确的给大规模预训练模型gpt提示信息也是个问题。
5、以上问题均会导致尽管大规模预训练模型gpt生成了代码,但代码无法运行或者不符合需求,那么程序员就需要重新理解和修改这些代码,并没有节省太多时间和精力。这增加了软件开发的复杂性和难度,也降低了开发效率。
技术实现思路
1、目的:鉴于以上技术问题中的至少一项,本发明提供一种基于api文档的代码生成方法、装置、设备及存储介质,通过使用向量化的(应用程序编程接口)api文档来控制代码的生成内容,充分利用了大规模预训练模型gpt的生成能力,同时也保证了生成的代码符合实际业务场景的需求。
2、技术方案:为解决上述技术问题,本发明采用的技术方案为:
3、第一方面,本发明提供了一种基于api文档的代码生成方法,所述方法包括:
4、获取api文档和包括有用户需求的文本描述;其中所述api文档包括有多个api的描述;
5、对所述api文档进行向量化,得到api向量库,其中所述api向量库中包括有多个按顺序编号的api文本;
6、基于所述包括有用户需求的文本描述,生成对应的实现用户需求的步骤描述,其中,所述步骤描述包括有多个子步骤的步骤描述;
7、基于各个子步骤的步骤描述和所述api向量库,依次生成各个子步骤的代码;其中,在依次生成各个子步骤的代码过程中,根据子步骤的步骤描述和子步骤的代码,从api向量库中提取目标api文本;基于子步骤的步骤描述、子步骤的代码和提取到的目标api文本修改前一次生成的代码。
8、在一些实施例中,一个api的描述至少包括api的名称、api的参数、api的功能描述、api的示例;
9、一个api的描述在api文档的一个区域中,多个api的描述依次链接以形成所述api文档。
10、在一些实施例中,对所述api文档进行向量化,得到api向量库,包括:
11、将api文档对应的原始整段api文本按设定固定长度进行第一次切分并按照顺序依次编号,得到带编号的多段小文本;
12、针对每段小文本使用正则匹配,对匹配到的对应段小文本进行第二次切分,得到两个相同编号的第一更小文本和第二更小文本;
13、按照编号顺序遍历,将前一个第二更小文本和后一个第一更小文本与两者之间的小文本按编号顺序进行拼接,得到切分后的一个完整的api文本;
14、对切分后的所有api文本使用向量化算法转为向量并按照顺序依次重新编号,形成api向量库。
15、进一步地,在一些实施例中,针对每段小文本使用正则匹配,对匹配到的对应段小文本进行第二次切分,包括:
16、使用正则表达式找到每段小文本中最长一段连续的换行符且后面跟的是英文的位置,进行第二次切分;
17、其中所述正则表达式为:“最长的连续换行符+英文开头”,或“最长的连续换行符+英文+():”。
18、进一步地,在一些实施例中,所述设定固定长度为:(可能最短的api文本长度+可能最长的api文本长度)//2;
19、所述设定固定长度不大于上限长度,其中所述上限长度为:min(可能最长api文本长度//3,gpt最大窗口//3))。
20、在一些实施例中,基于所述包括有用户需求的文本描述,生成对应的实现用户需求的步骤描述,包括:
21、将所述包括有用户需求的文本描述输入至大规模预训练模型中;
22、大规模预训练模型将用户需求拆分为多个子步骤,从而生成各个子步骤的步骤描述。
23、在一些实施例中,基于所述包括有用户需求的文本描述,利用大规模预训练模型生成对应的实现用户需求的步骤描述的过程中,还包括:
24、将预设的第一提示词输入至大规模预训练模型中,其中所述第一提示词用于帮助大规模预训练模型生成对应的步骤描述。
25、在一些实施例中,根据子步骤的步骤描述和子步骤的代码,从api向量库中提取目标api文本,包括:
26、根据子步骤的步骤描述和对应生成的子步骤的代码,从api向量库中查找能替换的多个功能相似的api文本,将多个功能相似的api文本以及对应编号前后各至少一个的api文本作为目标api文本;
27、其中能替换的多个功能相似的api文本根据子步骤的步骤描述和对应生成的子步骤的代码和api向量库中api文本的余弦相似度来确定。
28、在一些实施例中,基于各个子步骤的步骤描述,依次生成各个子步骤的代码,包括:
29、将每一子步骤的代码中对应的重要变量取出,存储在预设的变量池中,其中所述重要变量为后续子步骤对应代码中需要使用的变量;
30、根据下一子步骤的步骤描述和变量池中存储的重要变量,利用大规模预训练模型生成对应的代码。
31、在一些实施例中,基于子步骤的步骤描述、子步骤的代码和提取到的目标api文本修改前一次生成的代码,包括:
32、将所述目标api文本作为提示信息,连同子步骤的步骤描述、子步骤的代码一起输入大规模预训练模型中,大规模预训练模型自动决策用最合适的api文本修改前一次生成的代码,如果没有合适的api文本则保留前一次生成的代码。
33、在一些实施例中,在基于各个子步骤的步骤描述和所述api向量库,依次生成各个子步骤的代码之后,还包括:
34、将各子步骤的步骤描述和修改后的代码输入至大规模预训练模型中,进行代码整理,得到最终生成的代码。
35、在一些实施例中,在生成除了第一子步骤之外的其他的子步骤的代码时,根据下一子步骤的步骤描述和变量池中存储的重要变量,利用大规模预训练模型生成对应的代码的过程中,还包括:
36、将预设的第二提示词输入大规模预训练模型中,其中所述第二提示词用于描述输入的重要变量的意义。
37、在一些实施例中,所述变量池中还存储有重要变量对应文本描述,其中所述重要变量对应文本描述的获取方法包括:
38、将当前子步骤生成的代码以及代码中的重要变量输入大规模预训练模型,生成重要变量对应文本描述,其中所述重要变量对应文本描述为用于描述重要变量功能和/或作用的文本信息。
39、在一些实施例中,将当前子步骤生成的代码以及代码中的重要变量输入大规模预训练模型,生成重要变量对应文本描述的过程中,还包括:
40、将预设的第三提示词输入大规模预训练模型中,其中所述第三提示词用于帮助大规模预训练模型生成子步骤代码中重要变量的文本描述。
41、在一些实施例中,子步骤的代码中重要变量的确定方法包括:
42、将上一子步骤的代码中的所有变量均存储至变量池中;
43、当下一步骤的代码生成后,将下一步骤的代码中的变量与变量池中存储的变量进行比较,将未被复用的变量从变量池中删去,只留存复用的变量;并将下一步骤的代码中的所有变量存储至变量池中。
44、在一些实施例中,变量池中存储形式包括:子步骤索引、变量、文本描述和对应的权重;其中所述子步骤索引表示为该变量第一次出现的子步骤标识;
45、每当生成一个子步骤的代码时,提取对应子步骤的代码的变量和对应的文本描述存储至变量池中,并赋予变量初始权重;
46、在生成子步骤代码的过程中,更新变量池,具体包括:根据变量池中变量的复用情况,更新变量的权重;若更新后的权重低于阈值,将对应的变量从变量池中删除;若某个变量被复用一次,权重重置为初始权重;若存储一新变量时,赋予变量初始权重。
47、在一些实施例中,在生成各子步骤的代码过程中,输入子步骤的步骤描述、变量池中存储的变量、变量的文本描述,并调用大规模预训练模型对之前所有的子步骤的代码进行理解和总结,具体包括:
48、基于大规模预训练模型的窗口大小,将之前所有的子步骤的代码进行切块,得到多个均能容纳至窗口之中的代码块,并且为每个代码块生成对应的文本描述,所述文本描述是用于描述代码块功能和/或作用的文本信息;
49、合并所有代码块的文本描述,得到总文本描述;
50、在生成各子步骤的代码过程,将子步骤的步骤描述、变量池中存储的变量、变量的文本描述以及所述的总文本描述输入至大规模预训练模型,以生成更为连贯的代码。
51、第二方面,本发明提供了一种基于api文档的代码生成装置,所述装置包括:
52、获取模块,用于获取api文档和包括有用户需求的文本描述;其中所述api文档包括有多个api的描述;
53、api处理模块,用于对所述api文档进行向量化,得到api向量库,其中所述api向量库中包括有多个按顺序编号的api文本;
54、第一生成模块,用于基于所述包括有用户需求的文本描述,生成对应的实现用户需求的步骤描述,其中,所述步骤描述包括有多个子步骤的步骤描述;
55、第二生成模块,用于基于各个子步骤的步骤描述和所述api向量库,依次生成各个子步骤的代码;其中,在依次生成各个子步骤的代码过程中,根据子步骤的步骤描述和子步骤的代码,从api向量库中提取目标api文本;基于子步骤的步骤描述、子步骤的代码和提取到的目标api文本修改前一次生成的代码。
56、第三方面,本发明提供了一种设备,包括,
57、存储器;
58、处理器;
59、以及
60、计算机程序;
61、其中,所述计算机程序存储在所述存储器中,并被配置为由所述处理器执行以实现上述第一方面所述的方法。
62、第四方面,本发明提供了一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面所述的方法。
63、有益效果:本发明提供的基于api文档的代码生成方法、装置、设备及存储介质,具有以下优点:本发明提供一种基于api文档的代码生成方法、装置、设备及存储介质,通过使用向量化的(应用程序编程接口)api文档来控制代码的生成内容,充分利用了大规模预训练模型gpt的生成能力,同时也保证了生成的代码符合实际业务场景的需求。这种方法可以大大减少开发人员需要修改代码的时间和精力,提高软件开发的效率。
64、进一步地,将根据子步骤的步骤描述和代码查找到的api文本编号前后携带的方式给大规模预训练模型gpt作为提示信息,极大程度的降低了因api文本切分问题导致的上下文语义不连贯的情况。