CN117971186B - 一种代码生成控制方法、装置、终端及介质 - Google Patents
一种代码生成控制方法、装置、终端及介质 Download PDFInfo
- Publication number
- CN117971186B CN117971186B CN202410361931.8A CN202410361931A CN117971186B CN 117971186 B CN117971186 B CN 117971186B CN 202410361931 A CN202410361931 A CN 202410361931A CN 117971186 B CN117971186 B CN 117971186B
- Authority
- CN
- China
- Prior art keywords
- word symbol
- code word
- generated code
- confidence
- code
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 43
- 230000006870 function Effects 0.000 claims description 39
- 238000004458 analytical method Methods 0.000 claims description 11
- 238000012545 processing Methods 0.000 claims description 8
- 238000013507 mapping Methods 0.000 claims description 4
- 230000011218 segmentation Effects 0.000 claims description 4
- 239000012634 fragment Substances 0.000 abstract description 16
- 230000000694 effects Effects 0.000 abstract description 5
- 230000008569 process Effects 0.000 description 9
- 230000018109 developmental process Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 238000004590 computer program Methods 0.000 description 5
- 238000011161 development Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000012549 training Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 235000019800 disodium phosphate Nutrition 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 238000000275 quality assurance Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- 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
- G06F8/43—Checking; Contextual analysis
-
- 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/73—Program documentation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Library & Information Science (AREA)
- Stored Programmes (AREA)
- Machine Translation (AREA)
Abstract
本发明公开了一种代码生成控制方法、装置、终端及介质,所述方法包括:获取功能需求信息,生成与功能需求信息所对应的代码词符;在每生成一个代码词符时,在当前生成的代码词符与终止符不相等时,确定当前生成的代码词符所对应的置信度信息;在当前生成的代码词符所对应的置信度信息小于置信度阈值时,停止生成下一个代码词符,并得到已生成的代码片段;对已生成的代码片段的结构进行检测,若已生成的代码片段的结构完整,则输出已生成的代码片段。本发明可实现及时终止代码生成任务、避免生成低质量代码以及避免生成过短代码片段等效果,确保生成的代码既及时终止又具有良好的质量。
Description
技术领域
本发明涉及代码生成技术领域,尤其涉及一种代码生成控制方法、装置、终端及介质。
背景技术
随着大模型时代的兴起,软件开发领域迎来了一场革命性的变革。传统的软件开发流程通常依赖于开发者手动编写代码,这一过程既费时又容易出错。为了解决这一问题,代码生成插件工具开始崭露头角,为开发者提供了更加便捷高效的开发方式。这些工具利用深度学习和自然语言处理等先进技术,基于庞大的训练数据和模型参数,能够智能地生成符合语法和语义规范的代码片段。这些模型通过学习大量的代码片段、注释和开发者文档,能够理解自然语言描述并将之转化为高质量的代码。这种强大的自动代码生成技术在一定程度上提高了开发效率,减轻了开发者的负担。
然而,现有的代码生成过程中,未能及时终止生成任务,导致出现重复生成、无限生成等情况,严重浪费了计算资源。此外,由于生成的代码质量不一,有时候可能会产生难以理解或者不符合实际需求的代码片段,影响了整体的开发效果。
因此,现有技术还有待改进和提高。
发明内容
本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种代码生成控制方法、装置、终端及介质,旨在解决现有技术中在生成代码过程中,容易出现重复生成、无限生成等情况,严重浪费了计算资源,并且容易产生难以理解或者不符合实际需求的代码片段,影响了整体的开发效果等问题。
为了解决上述技术问题,本发明所采用的技术方案如下:
第一方面,本发明提供一种代码生成控制方法,其中,所述方法包括:
获取功能需求信息,并基于所述功能需求信息,生成与所述功能需求信息所对应的代码词符;
在每生成一个代码词符时,将当前生成的代码词符与预设的终止符进行比较,并在当前生成的代码词符与所述终止符不相等时,确定当前生成的代码词符所对应的置信度信息;
将当前生成的代码词符所对应的置信度信息与预设的置信度阈值进行比较,并在当前生成的代码词符所对应的置信度信息小于所述置信度阈值时,停止生成下一个代码词符,并得到已生成的代码片段;
对已生成的代码片段的结构进行检测,若已生成的代码片段的结构完整,则输出已生成的代码片段。
在一种实现方式中,所述基于所述功能需求信息,生成与所述功能需求信息所对应的代码词符,包括:
获取所述功能需求信息所对应的上下文信息,所述上下文信息为用户输入的与所述功能需求信息所对应的代码内容;
获取预设的代码生成模型,并将所述上下文信息作为所述代码生成模型的输入数据;
基于所述代码生成模型对所述上下文信息进行处理,输出与所述上下文信息所对应的代码词符。
在一种实现方式中,所述基于所述代码生成模型对所述上下文信息进行处理,输出与所述上下文信息所对应的代码词符,包括:
所述代码生成模型对所述上下文信息进行分词处理,得到若干第一词符,并基于预设的词表确定所述第一词符所对应的第一ID信息,其中,所述词表用于反映词符与ID的映射关系;
所述代码生成模型根据所述第一ID信息,生成与所述第一ID信息所对应的第二ID信息,并根据所述词表逐一输出与所述第二ID信息所对应的代码词符和概率值。
在一种实现方式中,所述在当前生成的代码词符与所述终止符不相等时,确定当前生成的代码词符所对应的置信度信息,包括:
若当前生成的代码词符为生成的第一个代码词符,则在当前生成的代码词符与所述终止符不相等时,将当前生成的代码词符的概率值作为当前生成的代码词符所对应的置信度信息。
在一种实现方式中,所述在当前生成的代码词符与所述终止符不相等时,确定当前生成的代码词符所对应的置信度信息,还包括:
根据当前生成的代码词符的概率值与上一个生成的代码词符的置信度信息,确定当前生成的代码词符所对应的置信度信息。
在一种实现方式中,所述对已生成的代码片段的结构进行检测,若已生成的代码片段的结构完整,则输出已生成的代码片段,包括:
对已生成的代码片段进行解析,得到已生成代码片段的最内层结构;
若所述最内层结构是完整的代码块结构,则确定已生成的代码片段的结构完整,并输出已生成的代码片段。
在一种实现方式中,所述对已生成的代码片段的结构进行检测,若已生成的代码片段的结构完整,则输出已生成的代码片段,还包括:
若所述最内层结构不是完整的代码块结构,则继续生成下一个代码词符,并继续分析下一个代码词符所对应的置信度信息。
在一种实现方式中,所述方法还包括:
若当前生成的代码词符与所述终止符相等,则停止生成代码词符。
在一种实现方式中,所述方法还包括:
若当前生成的代码词符所对应的置信度信息大于所述置信度阈值时,则继续生成下一个代码词符,并继续分析下一个代码词符所对应的置信度信息。
第二方面,本发明实施例还提供一种代码生成控制装置,其中,所述装置包括:
代码词符生成模块,用于获取功能需求信息,并基于所述功能需求信息,生成与所述功能需求信息所对应的代码词符;
终止判定模块,用于在每生成一个代码词符时,将当前生成的代码词符与预设的终止符进行比较,并在当前生成的代码词符与所述终止符不相等时,确定当前生成的代码词符所对应的置信度信息;
置信度分析模块,用于将当前生成的代码词符所对应的置信度信息与预设的置信度阈值进行比较,并在当前生成的代码词符所对应的置信度信息小于所述置信度阈值时,停止生成下一个代码词符,并得到已生成的代码片段;
代码片段输出模块,用于对已生成的代码片段的结构进行检测,若已生成的代码片段的结构完整,则输出已生成的代码片段。
第三方面,本发明实施例还提供一种终端,其中,所述终端包括存储器、处理器及存储在存储器中并可在处理器上运行的代码生成控制程序,处理器执行代码生成控制程序时,实现上述方案中任一项的代码生成控制方法的步骤。
第四方面,本发明实施例还提供一种计算机可读存储介质,其中,计算机可读存储介质上存储有代码生成控制程序,所述代码生成控制程序被处理器执行时,实现上述方案中任一项所述的代码生成控制方法的步骤。
有益效果:与现有技术相比,本发明提供了一种代码生成控制方法,本发明首先获取功能需求信息,并基于所述功能需求信息,生成与所述功能需求信息所对应的代码词符。在每生成一个代码词符时,本发明将当前生成的代码词符与预设的终止符进行比较,本发明的终止符是用于对代码生成任务进行终止的,因此本发明可对生成的代码词符进行监测,有利于及时终止代码生成任务,有效避免了重复生成和无限生成的情况,节省了计算资源。进一步地,本发明在当前生成的代码词符与所述终止符不相等时,确定当前生成的代码词符所对应的置信度信息。然后,将当前生成的代码词符所对应的置信度信息与预设的置信度阈值进行比较,并在当前生成的代码词符所对应的置信度信息小于所述置信度阈值时,停止生成下一个代码词符,并得到已生成的代码片段。置信度信息反映的是生成的代码词符的质量。因此,本发明通过对生成的代码词符的置信度信息进行分析,可在代码生成质量较低时及时终止代码生成任务,保证了生成的代码片段更符合用户需求。最后,本发明可对已生成的代码片段的结构进行检测,若已生成的代码片段的结构完整,则输出已生成的代码片段。本发明通过对生成的代码字符的结构完整性进行分析,确保生成的代码片段具备可运行性和完整性。
附图说明
图1为本发明实施例提供的代码生成控制方法的较佳实施例的流程图。
图2为本发明实施例提供的AST分析代码结构示意图。
图3为本发明实施例提供的代码生成控制系统中的合约即服务系统的架构示意图。
图4为本发明实施例提供的终端的原理框图。
具体实施方式
为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
在现有智能代码生成工具中,虽然取得了一定的进展,但仍存在一系列缺陷,主要集中在用户体验方面。这些缺陷直接影响了工具的实用性和开发者的使用体验,具体如下:
(1)现有技术在代码生成过程中缺乏及时终止的机制,导致生成任务难以在必要时停止。这一缺陷在两个方面表现得尤为突出:一是重复生成和无限生成。由于缺乏有效的终止条件,工具在生成过程中未能及时判断任务是否已经完成,结果可能导致相同的代码片段被反复生成,浪费了计算资源。同时,无法及时终止生成也可能导致不必要的长时间运行,对开发者造成不必要的等待。
(2)现有工具在生成质量的控制上存在明显缺陷。即便在生成的内容明显偏离用户需求,与目标需求存在较大偏差的情况下,这些工具仍然会继续生成大段代码,而不会终止生成行为。这导致用户需要花费大量额外的时间和精力来筛选和修改生成的代码 ,增加了开发过程的不确定性和复杂性。
(3)现有技术在生成过程中未能很好地避免生成过于短小的代码片段。有时候,工具可能只生成一两个词符,甚至不完整的表达式,使得生成的内容难以单独成为一个有意义的、可运行的代码片段。这种情况需要开发者额外的努力来组合和完善生成的内容,降低了工具的智能程度,同时影响了开发者的使用效率。
综上所述,现有技术在用户体验方面存在着显著问题,特别是在及时终止生成、避免生成低质量代码以及生成过短代码片段等方面,仍有较大的改进空间。为解决这些问题,本发明提出了一种代码生成控制方法,旨在提高用户体验,确保生成的代码既及时终止又具有良好的质量。
本实施例的代码生成控制方法可应用于终端中,所述终端为电脑、手机、智能电视等产品终端。如图1中所示,本实施例的代码生成控制方法包括如下步骤:
步骤S100、获取功能需求信息,并基于所述功能需求信息,生成与所述功能需求信息所对应的代码词符。
本实施例的目的根据用户输入的功能需求信息来生成对应功能的代码片段。因此,终端首先获取用户输入的功能需求信息,该功能需求信息可基于用户编辑的页面代码来体现。比如,用户编辑的代码内容为:
“# python实现树状数组
class BinaryIndexedTree:
def __init__(self, n):
self.n = n + 1
self.a = [0] * (n + 1)
def work”,
本实施例需要根据用户编辑的代码内容来自动生成代码片段。
在一种实现方式中,本实施例利用代码生成模型来生成代码,代码生成模型可为StarCoder代码大模型、WizardCoder代码大模型、CodeLlama代码大模型。具体地,本实施例首先获取所述功能需求信息所对应的上下文信息,所述上下文信息为用户输入的与所述功能需求信息所对应的代码内容。接着,将所述上下文信息作为所述代码生成模型的输入数据;代码生成模型就会对该上下文信息进行分词处理,得到若干第一词符。接着,本实施例可根据预设的词表确定所述第一词符所对应的第一ID信息,本实施例的词表用于反映词符与ID的映射关系,因此基于该词表就可以得到上下文信息所对应的。然后,本实施例的代码生成模型根据所述第一ID信息,生成与所述第一ID信息所对应的第二ID信息,并根据所述词表逐一输出与所述第二ID信息所对应的代码词符。基于此,本实施例实现了针对上下文信息生成后续代码词符的目的。在另一种实现方式中,本实施例的代码生成模型在逐一输出第二ID信息所对应的代码词符时,还可同步输出每个代码词符的概率值。
步骤S200、在每生成一个代码词符时,将当前生成的代码词符与预设的终止符进行比较,并在当前生成的代码词符与所述终止符不相等时,确定当前生成的代码词符所对应的置信度信息。
由于代码生成模型所输出的代码词符不一定都符合质量要求,为此,本实施例在代码生成模型每输出一个代码词符时,就会对当前生成的代码词符进行检测。本实施例预先定义终止符,该终止符用于对代码生成任务进行终止,该终止符可设置为一组,比如['\nclass', '\ndef', '\n#', '\nif', '\nprint']。这组终止符涵盖了常见的语法结束符号和代码块结束标志。在代码生成任务开始时,本实施例可将这组终止符加载并设定检测终止符的机制。在代码生成模型每生成一个代码词符的过程时,代码生成服务会实时检测当前生成的代码词符是否属于预设的终止符,如果属于,代码生成服务将立即终止生成任务,从而避免了重复生成和无限生成的问题,达到了提高生成效率的目的。
具体地,如果当前生成的代码词符为生成的第一个代码词符,本实施例将当前生成的代码词符逐一与预设的终止符['\nclass', '\ndef', '\n#', '\nif', '\nprint']比较,如果与终止符中的任何一个词符相等,则停止生成代码词符。这样有效避免了重复生成和无限生成的情况,节省了计算资源,提高了代码生成任务的效率。而如果当前生成的代码词符与所述终止符不相等时,将本实施例将当前生成的代码词符/>的概率值/>作为当前生成的代码词符/>所对应的置信度信息,以便后续步骤中根据该置信度信息来判断当前生成的代码词符的质量。
而如果当前生成的代码词符不是生成的第一个代码词符,本实施例同样将当前生成的代码词符逐一与预设的终止符['\nclass', '\ndef', '\n#', '\nif', '\nprint']比较,如果与终止符中的任何一个词符相等,则同样停止生成代码词符。而如果此时当前生成的代码词符与所述终止符不相等时,获取当前生成的代码词符/>的概率值/>以及上一个生成的代码词符的置信度信息/>。在本实施例中,置信度信息/>为上一个生成的代码词符/>更新后的概率值。具体公式如下:
,
其中,为当前生成的代码词符/>更新后的概率值,该/>可作为当前生成的代码词符/>所对应的置信度信息,该/>可存入置信度列表s_list中。
是为当前生成的代码词符/>的概率值/>分配的权重,是一个超参数,如果想侧重参考当前生成词符/>的概率值,/>可设置为大于0.5,如果想侧重参考前面已经生成的i-1个代码词符,/>可设置为小于0.5。
基于此,本实施例就可以确定上一个生成的代码词符更新后的概率值(即)的计算方式为:
,
其中,是比上一个代码词符/>还前一个的代码词符/>更新后的概率值。
由此可见,本实施例中当前生成的代码词符的置信度信息是通过上一个代码词符/>更新后的概率值与当前词符的概率值计算得到的。本实施例通过结合已经生成的词符综合判断当前词符的生成质量的做法,可以保证生成内容在语境、逻辑和风格上的一致性。
步骤300、将当前生成的代码词符所对应的置信度信息与预设的置信度阈值进行比较,并在当前生成的代码词符所对应的置信度信息小于所述置信度阈值时,停止生成下一个代码词符,并得到已生成的代码片段。
本实施例预先设置置信度阈值,该置信度阈值/>用于判断后续生成的代码词符的质量,以决定是否终止生成。当生成的代码词符的置信度信息超过该置信度阈值/>时,则说明生成的代码词符的质量比较高,会继续后续生成。本实施例的置信度阈值/>的设定可以通过多种方式实现,例如通过模型训练的结果、历史数据分析,或者用户反馈。本实施例可在代码生成任务的初始化阶段加载该置信度阈值/>,并在生成过程中进行判断。
具体地,每当确定出当前生成的代码词符所对应的置信度信息后,本实施例就可将当前生成的代码词符/>所对应的置信度信息/>与预设的置信度阈值/>进行比较。如果当前生成的代码词符所对应的置信度信息大于所述置信度阈值/>,则说明当前生成的代码词符/>的质量较高,则将当前生成的代码词符/>的置信度信息/>存入置信度列表s_list,然后继续生成下一个代码词符,并继续分析下一个代码词符所对应的置信度信息。而如果当前生成的代码词符/>所对应的置信度信息/>小于所述置信度阈值/>,则说明当前生成的代码词符/>的质量较低,则停止生成下一个代码词符,此时就可以得到由所有已生成的代码词符组成的代码片段。本实施例通过对当前生成的代码词符的置信度信息的判定,保证了生成代码词符的质量,减少了用户对生成结果的不满意。
步骤S400、对已生成的代码片段的结构进行检测,若已生成的代码片段的结构完整,则输出已生成的代码片段。
由于现有工具有时候生成的代码片段过于短小,难以直接作为可运行的、完整的代码使用。本发明可通过判断已生成的代码片段的结构来确保生成内容至少是一个完整的代码块。具体地,本实施例对已生成的代码片段进行解析,得到已生成代码片段的最内层结构。若所述最内层结构是完整的代码块结构,比如,完整的“循环”块、“条件判断”块、“函数定义”块和“类定义”块,则就可以确定已生成的代码片段的结构完整,并输出已生成的代码片段。具体应用时,本实施例可采用AST结构解析工具(比如tree-sitter)解析已生成的代码片段的结构,如图2所示,完整的树状数组python代码从外到里包含“class def”、“function def”、“if”等多层结构。在当前生成的代码词符的置信度信息小于置信度阈值的时候,代码生成任务终止,进一步判断已经生成的代码片段是否满足一个最内层的结构完整性,如果已生成的代码片段并不完整,例如:
“# python实现树状数组
class BinaryIndexedTree:
def __init__(self, n):
self.n = n + 1
self.a = [0] * (n + 1)
def work(self, op, i):
if op == "query":
s=0
while i:
s +=”,
此时最内层的结构是while循环,但这个while循环层的结构并不完整,此时就会继续生成下一个代码词符,并继续分析下一个代码词符所对应的置信度信息。
如果已生成的代码片段的结构完整,比如生成到
“# python实现树状数组
class BinaryIndexedTree:
def __init__(self, n):
self.n = n + 1
self.a = [0] * (n + 1)
def work(self, op, i):
if op == "query":
s=0
while i:
s += self.a[i]
i -= i&-i
return s”,
此时最内层的结构是while循环,且这个while循环层的结构完整,则结束整个代码生成任务,这样就可以避免生成大段质量较低的代码片段,同时保证已生成的代码片段的可读性和结构完整性,便于软件开发人员修改或继续调用生成服务。若已生成的代码片段的结构完整,则输出已生成的代码片段,并将其返回给用户,供用户参考和使用。
综上,本实施例在终止符的设定、生成的代码词符的置信度的计算、置信度阈值的设定、生成代码完整性的检测和调整等方面取得了创新性的进展,有效提升智能代码生成工具的性能,为用户提供更为可靠和友好的代码生成体验,至少包括了以下具体效果:
(1)智能终止机制:在遇到预设的终止符时,停止代码生成任务,避免了重复生成和无限生成的问题,提高了代码生成任务的效率,降低了计算资源的浪费。
(2)质量保证机制:综合考虑之前已生成的代码的置信度,以及当前生成的代码词符的概率值,为这两者分配权重,共同计算当前这个代码词符的置信度,然后将计算得到的置信度与置信度阈值比较:如果大于置信度阈值,则继续生成下一个代码词符;如果小于置信度阈值,则终止后续生成过程。通过置信度的判定,保证了生成内容的质量,减少了用户对生成结果的不满意。
(3)完整代码片段:当生成的结果只有一两个词符的,让代码生成模型继续生成,直至生成完整的一行代码时,停止生成。确保生成代码片段至少有一行完整的代码,提高了生成的代码的实用性和可用性,减少了用户后续的修改工作。
基于上述实施例,本发明还提供一种代码生成控制装置,如图3中所示,所述装置包括:代码词符生成模块10、终止判定模块20、置信度分析模块30以及代码片段输出模块40。具体地,所述代码词符生成模块10,用于获取功能需求信息,并基于所述功能需求信息,生成与所述功能需求信息所对应的代码词符。所述终止判定模块20,用于在每生成一个代码词符时,将当前生成的代码词符与预设的终止符进行比较,并在当前生成的代码词符与所述终止符不相等时,确定当前生成的代码词符所对应的置信度信息。所述置信度分析模块30,用于将当前生成的代码词符所对应的置信度信息与预设的置信度阈值进行比较,并在当前生成的代码词符所对应的置信度信息小于所述置信度阈值时,停止生成下一个代码词符,并得到已生成的代码片段。所述代码片段输出模块40,用于对已生成的代码片段的结构进行检测,若已生成的代码片段的结构完整,则输出已生成的代码片段。
在一种实现方式中,所述代码词符生成模块10包括:
上下文信息确定单元,用于获取所述功能需求信息所对应的上下文信息,所述上下文信息为用户输入的与所述功能需求信息所对应的代码内容;
输入数据确定单元,用于获取预设的代码生成模型,并将所述上下文信息作为所述代码生成模型的输入数据;
代码词符输出单元,用于基于所述代码生成模型对所述上下文信息进行处理,输出与所述上下文信息所对应的代码词符。
在一种实现方式中,所述代码词符输出单元,包括:
第一ID信息确定子单元,用于所述代码生成模型对所述上下文信息进行分词处理,得到若干第一词符,并基于预设的词表确定所述第一词符所对应的第一ID信息,其中,所述词表用于反映词符与ID的映射关系;
第二ID信息确定子单元,用于所述代码生成模型根据所述第一ID信息,生成与所述第一ID信息所对应的第二ID信息,并根据所述词表逐一输出与所述第二ID信息所对应的代码词符和概率值。
在一种实现方式中,所述终止判定模块20,包括:
第一置信度分析单元,用于若当前生成的代码词符为生成的第一个代码词符,则在当前生成的代码词符与所述终止符不相等时,将当前生成的代码词符的概率值作为当前生成的代码词符所对应的置信度信息。
在一种实现方式中,所述终止判定模块20,还包括:
第二置信度分析单元,用于根据当前生成的代码词符的概率值与上一个生成的代码词符的置信度信息,确定当前生成的代码词符所对应的置信度信息。
在一种实现方式中,所述代码片段输出模块40,包括:
代码解析单元,用于对已生成的代码片段进行解析,得到已生成代码片段的最内层结构;
完整性判断单元,用于若所述最内层结构是完整的代码块结构,则确定已生成的代码片段的结构完整,并输出已生成的代码片段。
在一种实现方式中,所述代码片段输出模块40,还包括:
第一代码继续生成单元,用于若所述最内层结构不是完整的代码块结构,则继续生成下一个代码词符,并继续分析下一个代码词符所对应的置信度信息。
在一种实现方式中,所述装置还包括:
代码停止生成单元,用于若当前生成的代码词符与所述终止符相等,则停止生成代码词符。
在一种实现方式中,所述装置还包括:
第二代码继续生成单元,用于若当前生成的代码词符所对应的置信度信息大于所述置信度阈值时,则继续生成下一个代码词符,并继续分析下一个代码词符所对应的置信度信息。
本实施例的代码生成控制装置中各个模块的工作原理与上述方法实施例中各个步骤的原理相同,此处不再赘述。
基于上述实施例,本发明还提供了一种终端,所述终端的原理框图可以如图4所示。终端可以包括一个或多个处理器100(图4中仅示出一个),存储器101以及存储在存储器101中并可在一个或多个处理器100上运行的计算机程序102,例如,代码生成控制程序。一个或多个处理器100执行计算机程序102时可以实现代码生成控制方法实施例中的各个步骤。或者,一个或多个处理器100执行计算机程序102时可以实现代码生成控制方法实施例中各模块/单元的功能,此处不作限制。
在一个实施例中,所称处理器100可以是中央处理单元(Central ProcessingUnit,CPU),还可以是其他通用处理器、数字信号处理器 (Digital Signal Processor,DSP)、专用集成电路 (Application Specific Integrated Circuit,ASIC)、现成可编程门阵列 (Field-Programmable Gate Array,FPGA) 或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
在一个实施例中,存储器101可以是电子设备的内部存储单元,例如电子设备的硬盘或内存。存储器101也可以是电子设备的外部存储设备,例如电子设备上配备的插接式硬盘,智能存储卡(smart media card,SMC),安全数字(secure digital,SD)卡,闪存卡(flash card)等。进一步地,存储器101还可以既包括电子设备的内部存储单元也包括外部存储设备。存储器101用于存储计算机程序以及终端所需的其他程序和数据。存储器101还可以用于暂时地存储已经输出或者将要输出的数据。
本领域技术人员可以理解,图4中示出的原理框图,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的终端的限定,具体的终端以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成的,计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、运营数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双运营数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink) DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种代码生成控制方法,其特征在于,所述方法包括:
获取功能需求信息,并基于所述功能需求信息,生成与所述功能需求信息所对应的代码词符;
在每生成一个代码词符时,将当前生成的代码词符与预设的终止符进行比较,并在当前生成的代码词符与所述终止符不相等时,确定当前生成的代码词符所对应的置信度信息;
将当前生成的代码词符所对应的置信度信息与预设的置信度阈值进行比较,并在当前生成的代码词符所对应的置信度信息小于所述置信度阈值时,停止生成下一个代码词符,并得到已生成的代码片段;
对已生成的代码片段的结构进行检测,若已生成的代码片段的结构完整,则输出已生成的代码片段;
所述在当前生成的代码词符与所述终止符不相等时,确定当前生成的代码词符所对应的置信度信息,包括:
若当前生成的代码词符为生成的第一个代码词符,则在当前生成的代码词符与所述终止符不相等时,将当前生成的代码词符的概率值作为当前生成的代码词符所对应的置信度信息;
所述在当前生成的代码词符与所述终止符不相等时,确定当前生成的代码词符所对应的置信度信息,还包括:
根据当前生成的代码词符的概率值与上一个生成的代码词符的置信度信息,确定当前生成的代码词符所对应的置信度信息。
2.根据权利要求1所述的代码生成控制方法,其特征在于,所述基于所述功能需求信息,生成与所述功能需求信息所对应的代码词符,包括:
获取所述功能需求信息所对应的上下文信息,所述上下文信息为用户输入的与所述功能需求信息所对应的代码内容;
获取预设的代码生成模型,并将所述上下文信息作为所述代码生成模型的输入数据;
基于所述代码生成模型对所述上下文信息进行处理,输出与所述上下文信息所对应的代码词符。
3.根据权利要求2所述的代码生成控制方法,其特征在于,所述基于所述代码生成模型对所述上下文信息进行处理,输出与所述上下文信息所对应的代码词符,包括:
所述代码生成模型对所述上下文信息进行分词处理,得到若干第一词符,并基于预设的词表确定所述第一次词符所对应的第一ID信息,其中,所述词表用于反映词符与ID的映射关系;
所述代码生成模型根据所述第一ID信息,生成与所述第一ID信息所对应的第二ID信息,并根据所述词表逐一输出与所述第二ID信息所对应的代码词符和概率值。
4.根据权利要求1所述的代码生成控制方法,其特征在于,所述对已生成的代码片段的结构进行检测,若已生成的代码片段的结构完整,则输出已生成的代码片段,包括:
对已生成的代码片段进行解析,得到已生成代码片段的最内层结构;
若所述最内层结构是完整的代码块结构,则确定已生成的代码片段的结构完整,并输出已生成的代码片段。
5.根据权利要求4所述的代码生成控制方法,其特征在于,所述对已生成的代码片段的结构进行检测,若已生成的代码片段的结构完整,则输出已生成的代码片段,还包括:
若所述最内层结构不是完整的循环结构,则继续生成下一个代码词符,并继续分析下一个代码词符所对应的置信度信息。
6.根据权利要求1所述的代码生成控制方法,其特征在于,所述方法还包括:
若当前生成的代码词符与所述终止符相等,则停止生成代码词符。
7.根据权利要求1所述的代码生成控制方法,其特征在于,所述方法还包括:
若当前生成的代码词符所对应的置信度信息大于所述置信度阈值时,则继续生成下一个代码词符,并继续分析下一个代码词符所对应的置信度信息。
8.一种代码生成控制装置,其特征在于,所述装置包括:
代码词符生成模块,用于获取功能需求信息,并基于所述功能需求信息,生成与所述功能需求信息所对应的代码词符;
终止判定模块,用于在每生成一个代码词符时,将当前生成的代码词符与预设的终止符进行比较,并在当前生成的代码词符与所述终止符不相等时,确定当前生成的代码词符所对应的置信度信息;
置信度分析模块,用于将当前生成的代码词符所对应的置信度信息与预设的置信度阈值进行比较,并在当前生成的代码词符所对应的置信度信息小于所述置信度阈值时,停止生成下一个代码词符,并得到已生成的代码片段;
代码片段输出模块,用于对已生成的代码片段的结构进行检测,若已生成的代码片段的结构完整,则输出已生成的代码片段;
所述终止判定模块,包括:
第一置信度分析单元,用于若当前生成的代码词符为生成的第一个代码词符,则在当前生成的代码词符与所述终止符不相等时,将当前生成的代码词符的概率值作为当前生成的代码词符所对应的置信度信息;
所述终止判定模块,还包括:
第二置信度分析单元,用于根据当前生成的代码词符的概率值与上一个生成的代码词符的置信度信息,确定当前生成的代码词符所对应的置信度信息。
9.一种终端,其特征在于,所述终端包括存储器、处理器及存储在所述存储器中并可在所述处理器上运行的代码生成控制程序,所述处理器执行代码生成控制程序时,实现如权利要求1-7任一项所述的代码生成控制方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有代码生成控制程序,所述代码生成控制程序被处理器执行时,实现如权利要求1-7任一项所述的代码生成控制方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410361931.8A CN117971186B (zh) | 2024-03-28 | 2024-03-28 | 一种代码生成控制方法、装置、终端及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410361931.8A CN117971186B (zh) | 2024-03-28 | 2024-03-28 | 一种代码生成控制方法、装置、终端及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117971186A CN117971186A (zh) | 2024-05-03 |
CN117971186B true CN117971186B (zh) | 2024-06-04 |
Family
ID=90855681
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410361931.8A Active CN117971186B (zh) | 2024-03-28 | 2024-03-28 | 一种代码生成控制方法、装置、终端及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117971186B (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102662630A (zh) * | 2012-04-24 | 2012-09-12 | 广州市广晟微电子有限公司 | 一种代码生成方法 |
WO2022265745A1 (en) * | 2021-06-15 | 2022-12-22 | Microsoft Technology Licensing, Llc | Code generation with reinforcement learning |
CN116069337A (zh) * | 2023-02-28 | 2023-05-05 | 北京航空航天大学 | 一种结合修复模板与深度学习的代码缺陷自动修复方法 |
CN116700780A (zh) * | 2023-06-29 | 2023-09-05 | 南通大学 | 一种基于抽象语法树代码表征的代码补全方法 |
CN117321565A (zh) * | 2021-05-15 | 2023-12-29 | 微软技术许可有限责任公司 | 包括空洞建议的代码完成 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE102019105418B3 (de) * | 2019-03-04 | 2020-08-13 | Fujitsu Technology Solutions Intellectual Property Gmbh | Verfahren zum Erzeugen einer Darstellung einer Programmlogik, Dekompiliervorrichtung, Rekompiliersystem und Computerprogrammprodukte |
-
2024
- 2024-03-28 CN CN202410361931.8A patent/CN117971186B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102662630A (zh) * | 2012-04-24 | 2012-09-12 | 广州市广晟微电子有限公司 | 一种代码生成方法 |
CN117321565A (zh) * | 2021-05-15 | 2023-12-29 | 微软技术许可有限责任公司 | 包括空洞建议的代码完成 |
WO2022265745A1 (en) * | 2021-06-15 | 2022-12-22 | Microsoft Technology Licensing, Llc | Code generation with reinforcement learning |
CN116069337A (zh) * | 2023-02-28 | 2023-05-05 | 北京航空航天大学 | 一种结合修复模板与深度学习的代码缺陷自动修复方法 |
CN116700780A (zh) * | 2023-06-29 | 2023-09-05 | 南通大学 | 一种基于抽象语法树代码表征的代码补全方法 |
Non-Patent Citations (1)
Title |
---|
基于关键词的代码自动摘要;张世琨;谢睿;叶蔚;陈龙;;计算机研究与发展;20200901(09);第1987-1999页 * |
Also Published As
Publication number | Publication date |
---|---|
CN117971186A (zh) | 2024-05-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110765763B (zh) | 语音识别文本的纠错方法、装置、计算机设备和存储介质 | |
CN110413730B (zh) | 文本信息匹配度检测方法、装置、计算机设备和存储介质 | |
WO2022142613A1 (zh) | 训练语料扩充方法及装置、意图识别模型训练方法及装置 | |
JP5901001B1 (ja) | 音響言語モデルトレーニングのための方法およびデバイス | |
CN109033150B (zh) | 敏感词验证方法、装置、计算机设备及存储介质 | |
US20200074992A1 (en) | Method and apparatus for judging termination of sound reception and terminal device | |
WO2022020167A1 (en) | Systems and methods for automated document image orientation correction | |
CN112395857B (zh) | 基于对话系统的语音文本处理方法、装置、设备及介质 | |
CN112052329A (zh) | 文本摘要生成方法、装置、计算机设备及可读存储介质 | |
WO2019061998A1 (zh) | 断点智能分流方法、电子装置及计算机可读存储介质 | |
CN111625284B (zh) | 固态硬盘的低功耗模式唤醒恢复方法、装置和计算机设备 | |
CN117971186B (zh) | 一种代码生成控制方法、装置、终端及介质 | |
CN113851111A (zh) | 一种语音识别方法和语音识别装置 | |
WO2021217619A1 (zh) | 基于标签平滑的语音识别方法、终端及介质 | |
CN117079645A (zh) | 语音模型优化方法、装置、设备及介质 | |
CN110929514B (zh) | 文本校对方法、装置、计算机可读存储介质及电子设备 | |
CN110442843B (zh) | 字符替换方法、系统、计算机设备及计算机可读存储介质 | |
CN115858776B (zh) | 一种变体文本分类识别方法、系统、存储介质和电子设备 | |
US20220171926A1 (en) | Information processing method, storage medium, and information processing device | |
CN113239171B (zh) | 对话管理系统更新方法、装置、计算机设备及存储介质 | |
CN113886199B (zh) | 一种数据处理方法及装置 | |
CN111796830B (zh) | 一种协议解析处理方法、装置、设备及介质 | |
CN109901829A (zh) | 一种基于ace扩展的第三方库的代码补全方法及装置 | |
CN115563021A (zh) | 基于固态硬盘的重复读性能提升方法、装置和计算机设备 | |
CN115422936A (zh) | 实体识别方法、装置、计算机设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |