本发明涉及代码审查,特别是涉及一种基于大语言模型的代码质控方法及装置。
背景技术:
1、在现代软件开发过程中,代码审查(code review)已成为确保软件质量的主要手段之一。 通过这一手段,开发团队可以发现并修复代码中的错误、漏洞以及不规范等问题,从而提高软件的运行效率和稳定性。但是,传统的人工审查过程却面临许多挑战。例如,人工审查对审核人员提出了更高的要求,审核人员需要去了解相关代码的业务以及相关代码上下文,才能给出相关意见,这是一个非常耗时、繁琐的过程。另外,人工审查也可能受到个体差异的影响,不同的审查人员可能对同一段代码有不同的理解和标准。为了解决这些问题,自动化代码审查工具应运而生,这些工具可以自动分析代码,识别出潜在的代码问题和违法最佳实践的地方。
2、目前,现有的自动化代码审查方法主要通过代码提交人员将代码推送至版本控制系统(如gitlab、svn),版本控制系统会通过提前设置的webhook(用户定义的http回调)通知对应的持续集成工具(如jenkis、travis ci),持续集成工具时就会拉取对应的代码,运行代码审查插件然后把审查后的结果数据推送给自动化代码审查服务进行存储。最后,开发人员需要主动去对应的自动化代码审查的web管理页面去查看对应的审查报告。但是,该现有技术在进行代码审查中,通常采用静态代码分析方法,即针对指定文件进行结构、语法、潜在安全漏洞、最佳实践等方面的检查。尽管静态代码分析在发现潜在缺陷和提升代码质量方面功效显著,但由于缺乏对代码业务逻辑上下文的深刻理解以及较难模拟用户输入,所以在业务逻辑错误的识别上相对困难。另外,静态代码分析需要基于完整的代码文件进行,这也就造成了提交者难以准确地判断本次提交的代码diff是否引入了新的问题。在缺陷管理方面,此流程需要开发者主动的查看相应的缺陷管理页面来获知此次提交的分析报告,但这种方式存在时效性难以保证的问题。开发者难以自定义需要审查的分支、自定义规则进行缺陷等级的分类,这在一定程度上增大了开发者快速确认和处理严重问题的难度。
3、综上所述,现有的自动化代码审查方法由于静态代码分析的限制,在一定程度上影响了业务缺陷的识别效果,且问题解决的时效性较差。
技术实现思路
1、基于此,有必要针对上述技术问题,提供一种能够保障业务缺陷的识别效果且问题解决的时效性较好的基于大语言模型的代码质控方法及装置。
2、本发明提供了一种基于大语言模型的代码质控方法,所述方法包括:
3、接收webhook通知,并响应于所述webhook通知获取相应的分支信息,以判断所述分支信息是否符合设定的分支审查规则;
4、在所述分支信息符合所述分支审查规则时,调用相应的api接口获取当前代码差异,并遍历当前修改文件,以判断所述当前修改文件是否符合设定的文件审查规则;
5、在所述当前修改文件符合所述文件审查规则时,将所述当前代码差异与prompt模板进行组合,得到组装好的提示对话框;
6、将所述组装好的提示对话框通过所述api接口请求大语言模型,以调用所述大语言模型对所述当前代码差异的审核建议格式进行校验,得到校验通过的审核建议;
7、通过正则表达式对所述审核建议进行拆分,遍历拆分后的所述审核建议,以获取缺陷信息库中与所述审核建议正则匹配的缺陷信息,并基于所述缺陷信息以及审核建议,对所述当前代码差异对应的当前代码段进行质控修改。
8、在其中一个实施例中,所述接收webhook通知,并响应于所述webhook通知获取相应的分支信息,以判断所述分支信息是否符合设定的分支审查规则,包括:
9、获取所述设定的分支审查规则,并判断所述分支信息是否符合所述分支审查规则;若是,则
10、调用codeup提供的所述api接口获取当前提交的所述当前代码差异;若否,则
11、忽略所述分支信息。
12、在其中一个实施例中,所述在所述分支信息符合所述分支审查规则时,调用相应的api接口获取当前代码差异,并遍历当前修改文件,以判断所述当前修改文件是否符合设定的文件审查规则,包括:
13、获取所述设定的文件审查规则,并基于所述当前代码差异获取所述当前代码差异对应的所有当前修改文件;
14、依次判断所述所有当前修改文件是否符合所述设定的文件审查规则;若是,则
15、将符合所述设定的文件审查规则的当前修改文件与所述prompt模板进行组合。
16、在其中一个实施例中,所述在所述当前修改文件符合所述文件审查规则时,将所述当前代码差异与prompt模板进行组合,得到组装好的提示对话框,之后还包括:
17、获取所述当前修改文件中的代码片段,并通过所述组装好的提示对话框根据所述审核建议生成所述代码片段对应的优化代码;
18、对所述当前修改文件中的代码进行审核,以识别出所述当前修改文件中的新增代码以及原始代码,并根据所述审核建议对所述新增代码进行审核,生成所述新增代码的优化代码。
19、在其中一个实施例中,所述将所述组装好的提示对话框通过所述api接口请求大语言模型,以调用所述大语言模型对所述当前代码差异的审核建议格式进行校验,得到校验通过的审核建议,包括:
20、调用所述api接口将所述组装好的提示对话框输入至所述大语言模型,并在所述大语言模型对所述提示对话框作出响应时获取所述审核建议格式,以对所述审核建议格式进行校验;
21、在所述审核建议格式符合设定格式时,获取所述校验通过的审核建议。
22、在其中一个实施例中,所述通过正则表达式对所述审核建议进行拆分,遍历拆分后的所述审核建议,以获取缺陷信息库中与所述审核建议正则匹配的缺陷信息,并基于所述缺陷信息以及审核建议,对所述当前代码差异对应的当前代码段进行质控修改,包括:
23、获取校验通过的多个审核建议,并通过正则表达式对每个审核建议进行拆分,得到拆分后的所述审核建议;
24、获取缺陷信息库,并遍历拆分后的所述审核建议,以获取所述缺陷信息库中与拆分后的每条审核建议正则匹配的缺陷信息,并按照设定的缺陷等级对不同的所述缺陷信息进行排序划分。
25、在其中一个实施例中,所述方法还包括:
26、将所述缺陷信息发送至聊天工具,并通过所述聊天工具基于所述缺陷信息生成相应的webhook地址;
27、基于所述webhook地址,向所述聊天工具发送markdown消息,以将基于所述缺陷信息的修改任务传达至用户。
28、本发明还提供了一种基于大语言模型的代码质控装置,所述装置包括:
29、分支审查模块,用于接收webhook通知,并响应于所述webhook通知获取相应的分支信息,以判断所述分支信息是否符合设定的分支审查规则;
30、文件审查模块,用于在所述分支信息符合所述分支审查规则时,调用相应的api接口获取当前代码差异,并遍历当前修改文件,以判断所述当前修改文件是否符合设定的文件审查规则;
31、模板组合模块,用于在所述当前修改文件符合所述文件审查规则时,将所述当前代码差异与prompt模板进行组合,得到组装好的提示对话框;
32、模型处理模块,用于将所述组装好的提示对话框通过所述api接口请求大语言模型,以调用所述大语言模型对所述当前代码差异的审核建议格式进行校验,得到校验通过的审核建议;
33、代码质控模块,用于通过正则表达式对所述审核建议进行拆分,遍历拆分后的所述审核建议,以获取缺陷信息库中与所述审核建议正则匹配的缺陷信息,并基于所述缺陷信息以及审核建议,对所述当前代码差异对应的当前代码段进行质控修改。
34、本发明还提供了一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现如上述任一种所述的基于大语言模型的代码质控方法。
35、本发明还提供了一种计算机存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述的基于大语言模型的代码质控方法。
36、本发明还提供了一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述的基于大语言模型的代码质控方法。
37、上述基于大语言模型的代码质控方法及装置,通过接收webhook通知,并响应于webhook通知获取相应的分支信息,以判断分支信息是否符合设定的分支审查规则。随后,在分支信息符合分支审查规则时,调用相应的api接口获取当前代码差异,并遍历当前修改文件,以判断当前修改文件是否符合设定的文件审查规则。然后,在当前修改文件符合文件审查规则时,将当前代码差异与prompt模板进行组合,得到组装好的提示对话框。再将组装好的提示对话框通过api接口请求大语言模型,以调用大语言模型对当前代码差异的审核建议格式进行校验,得到校验通过的审核建议。最后,通过正则表达式对审核建议进行拆分,遍历拆分后的审核建议,以获取缺陷信息库中与审核建议正则匹配的缺陷信息,并基于缺陷信息以及审核建议,对当前代码差异对应的当前代码段进行质控修改。该方法通过利用自定义prompt加大语言模型进行代码审查,增强了代码审查中对于业务缺陷的识别效果。另外,还对后续结果进行后置处理,按照自定义缺陷规则对审核建议进行缺陷信息检索,使开发人员能够即时、准确地去了解并处理相关缺陷。