System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及一种基于代码森林agent的大语言模型分步生成代码方法,属于数据处理。
技术介绍
1、目前,使用大语言模型(llm)生成代码是一种常用的解决方案,由于受限于llm的训练数据和每次的最大生成tokens数(max_tokens),代码相关的训练数据通常也不会用很长的代码片段,所以模型能力和max_tokens通常也不会允许一次生成很长的内容,llm无法通过一次对话就生成长度较长、多个文件的复杂代码。
2、通常首先想到的解决方法是分步生成,分步生成代码往往代码之间不连贯,无法正确的相互关联,导致最终生成的代码是错误的、不可运行的。最常见的错误是标识符(变量)问题,以python代码为例,例如:
3、情况1.变量是全局变量还是局部变量,在当前生成代码中是否可以使用该变量;
4、假设有如下已生成的代码,后续生成的代码只能使用a1这个全局变量,而不能使用a2这个func函数中的局部变量,a2只能在func函数中使用,对于比较简单或简短的代码和提示词中,llm能比较好的处理这种情况,因为训练数据中也会包含这类情况,但在复杂的或较长的代码和提示词中,llm可能就无法正确处理这种情况,错误的使用变量a2。
5、已生成的代码:
6、a1=1#全局变量
7、def func():
8、a2=2#func函数中的局部变量
9、后续生成的代码:
10、print(a1)#能正确输出结果
11、print(a2)#错误,报错没
12、情况2.变量在代码逻辑上是否可以引用;
13、因为llm只能理解这个变量在后续要生成的代码之前,而无法理解其中的逻辑结构,所以可能误认为变量已定义可使用,导致变量错误的引用。在以下例子中,print(b)可能在变量b未定义的时候输出,导致报错。
14、已生成的代码:
15、if a=0:
16、b=1
17、后续生成的代码:
18、else:
19、print(b)
20、情况3.变量在上下文中被忽略;
21、当llm对话上下文内容不断增加时,已生成的代码中的变量可能被忽略,所以导致后续生成时无法注意到已有该变量而重复定义,或者是编造一个类似但错误的变量,最终导致程序报错。
22、例如,已生成的代码中a1已经变为2了,但后续生成的代码重新定义了一个a1=1的变量,覆盖了前面的a1=2;或者编造了一个b1的变量,其实是想输出变量b。已生成的代码:
23、a1=1
24、a2=2
25、a1=2
26、b=3
27、后续生成的代码:
28、a1=1
29、print(b1)
30、当然分步生成会出现的前后代码不连贯的情况不仅是变量,还有函数等等一些标识符情况,这里不一一列举,就以变量为例,但大部分都是因为llm无法理解代码逻辑结构或上下文内容太多被忽略导致的错误。所以光依赖llm本身的能力自行分步生成代码,最终代码大概率根本无法运行,所以需要提供一些明确的辅助信息帮助llm更好的生成正确的代码。
31、那么分步生成的代码要如何进行整合是实现分步生成代码首要解决的问题,具体来说,后续生成的代码如何与前面生成的代码进行正确的关联,即最终代码在语法、逻辑上是完整的、正确的。
技术实现思路
1、目的:鉴于以上技术问题中的至少一项,本申请提供一种基于代码森林agent的大语言模型分步生成代码方法,通过多个树形结构管理llm分步生成代码,有效确保最终生成语法、逻辑上完整的、正确的代码。
2、技术方案:为解决上述技术问题,本申请采用的技术方案为:
3、第一方面,本申请提供了一种基于代码森林agent的大语言模型分步生成代码方法,所述方法包括:
4、s1、根据初步生成的代码生成构建代码森林;其中所述代码森林包括多个代码树,一个代码树代表一个代码文件中所有的代码内容,通过树形结构组织节点,即组织代码片段;代码树的每个节点包含代码片段及代码片段标识符信息;
5、s2、agent自动管理代码森林,生成代码时获取代码片段及代码片段标识符信息,再将生成的代码追加到代码森林中。
6、在一些实施例中,s1、根据初步生成的代码生成构建代码森林,包括:
7、s11、获取大语言模型根据需求生成的初始代码片段;
8、s12、对初始代码片段进行解析得到初始代码片段标识符信息;其中所述标识符包括后续可用变量、函数、常量、对象、类名、模块中至少一种;
9、s13、根据初始代码片段和对应初始代码片段标识符信息构成一个代码树的根节点;
10、s14、对初始代码片段之后续写的代码片段进行解析得到对应代码片段标识符信息;根据代码片段和对应代码片段标识符信息构成新的节点,并根据代码结构追加到这个代码树上,重复执行该步骤,最终形成一个与代码结构相同的代码树,并将最终生成的代码写入代码文件;
11、s15、按照s11至s14的步骤生成多个代码树,多个代码树形成代码森林。
12、在一些实施例中,s2、agent自动管理代码森林,生成代码时获取代码片段及代码片段标识符信息,再将生成的代码追加到代码森林中,包括:
13、s21、在生成新的代码时,agent首先根据生成代码的需求使用工具从代码森林中获取需要用到的代码树,并定位在代码树的哪个节点的位置增加节点;
14、s22、然后从该节点出发找出该节点的所有祖先节点,这些祖先节点的所有标识符信息就是当前要增加的节点生成的代码能用的所有标识符信息,然后在大语言模型llm生成代码时附带上这些标识符信息,并明确提示这些是当前生成的代码所能用的所有标识符信息;
15、s23、获取大语言模型根据需求和这些标识符信息生成的代码片段,对新生成的代码片段进行解析得到对应代码片段标识符信息;根据代码片段和对应代码片段标识符信息构成新的节点,并根据定位的增加节点位置将节点追加到这个代码树上。
16、在一些实施例中,一个代码森林表示为一个工作目录,由该工作目录下的所有代码文件组成。
17、在一些实施例中,通过解析程序对生成的代码片段进行解析得到对应代码片段标识符信息,或利用大语言模型llm进行解析。
18、在一些实施例中,所述代码森林采用json结构化形式,包括:各个代码树的树名、所有节点的前节点和后节点、各节点的代码片段以及对应代码片段标识符信息。
19、进一步地,代码片段标识符信息包括标识符名称、标识符值以及标识符描述信息。
20、在一些实施例中,agent自动管理代码森林,包括:首先agent根据需求使用get_tree工具指定要获取的本文档来自技高网...
【技术保护点】
1.一种基于代码森林Agent的大语言模型分步生成代码方法,其特征在于,所述方法包括:
2.根据权利要求1所述的基于代码森林Agent的大语言模型分步生成代码方法,其特征在于,S1、根据初步生成的代码生成构建代码森林,包括:
3.根据权利要求1所述的基于代码森林Agent的大语言模型分步生成代码方法,其特征在于,S2、Agent自动管理代码森林,生成代码时获取代码片段及代码片段标识符信息,再将生成的代码追加到代码森林中,包括:
4.根据权利要求1-3任一项所述的基于代码森林Agent的大语言模型分步生成代码方法,其特征在于,一个代码森林表示为一个工作目录,由该工作目录下的所有代码文件组成。
5.根据权利要求2或3所述的基于代码森林Agent的大语言模型分步生成代码方法,其特征在于,通过解析程序对生成的代码片段进行解析得到对应代码片段标识符信息,或利用大语言模型LLM进行解析。
6.根据权利要求1所述的基于代码森林Agent的大语言模型分步生成代码方法,其特征在于,所述代码森林采用JSON结构化形式,包括:各个代码树的树名
7.根据权利要求6所述的基于代码森林Agent的大语言模型分步生成代码方法,其特征在于,代码片段标识符信息包括标识符名称、标识符值以及标识符描述信息。
8.根据权利要求6所述的基于代码森林Agent的大语言模型分步生成代码方法,其特征在于,Agent自动管理代码森林,包括:首先Agent根据需求使用get_tree工具指定要获取的代码树的树名,get_tree工具根据树名查找JSON中的字段名,获取代码树并返回给Agent,Agent判断当前需求生成的代码应增加到哪个节点位置,使用locate_node工具指定要插入的位置,locate_node工具根据指定的位置,递归的查找JSON中的前节点pre_node字段,获取所有祖先节点的标识符信息直到树根节点,将所有查找到的祖先节点的标识符信息返回给Agent,Agent将需求、标识符信息发送给LLM开始生成代码,生成的代码测试无误,再对新生成的代码片段进行解析得到对应代码片段标识符信息;根据代码片段和对应代码片段标识符信息构成新的节点,并根据定位的增加节点位置将节点追加到这个代码树上。
9.一种基于代码森林Agent的大语言模型分步生成代码装置,其特征在于,所述装置包括:
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至8任一项所述方法的步骤。
...【技术特征摘要】
1.一种基于代码森林agent的大语言模型分步生成代码方法,其特征在于,所述方法包括:
2.根据权利要求1所述的基于代码森林agent的大语言模型分步生成代码方法,其特征在于,s1、根据初步生成的代码生成构建代码森林,包括:
3.根据权利要求1所述的基于代码森林agent的大语言模型分步生成代码方法,其特征在于,s2、agent自动管理代码森林,生成代码时获取代码片段及代码片段标识符信息,再将生成的代码追加到代码森林中,包括:
4.根据权利要求1-3任一项所述的基于代码森林agent的大语言模型分步生成代码方法,其特征在于,一个代码森林表示为一个工作目录,由该工作目录下的所有代码文件组成。
5.根据权利要求2或3所述的基于代码森林agent的大语言模型分步生成代码方法,其特征在于,通过解析程序对生成的代码片段进行解析得到对应代码片段标识符信息,或利用大语言模型llm进行解析。
6.根据权利要求1所述的基于代码森林agent的大语言模型分步生成代码方法,其特征在于,所述代码森林采用json结构化形式,包括:各个代码树的树名、所有节点的前节点和后节点、各节点的代码片段以及对应代码片段标识符信息。
7.根据权利要求6所述的基于代码森林agent的大语言模型分步...
【专利技术属性】
技术研发人员:唐琦松,吴鑫,林平,曾俊铭,
申请(专利权)人:上海艺赛旗软件股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。