CN119248239A - 代码生成方法、装置、设备及介质 - Google Patents

代码生成方法、装置、设备及介质 Download PDF

Info

Publication number
CN119248239A
CN119248239A CN202411775470.5A CN202411775470A CN119248239A CN 119248239 A CN119248239 A CN 119248239A CN 202411775470 A CN202411775470 A CN 202411775470A CN 119248239 A CN119248239 A CN 119248239A
Authority
CN
China
Prior art keywords
target
information
code
cursor
cursor position
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.)
Granted
Application number
CN202411775470.5A
Other languages
English (en)
Other versions
CN119248239B (zh
Inventor
宋泽坤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Qihoo Technology Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN202411775470.5A priority Critical patent/CN119248239B/zh
Publication of CN119248239A publication Critical patent/CN119248239A/zh
Application granted granted Critical
Publication of CN119248239B publication Critical patent/CN119248239B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/903Querying

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • User Interface Of Digital Computer (AREA)

Abstract

本申请公开了一种代码生成方法、装置、设备及介质。其中,该方法包括:获取编辑器中的光标信息,光标信息包括光标位置;根据光标信息在索引数据库中进行检索得到光标位置所在当前文件中的目标相关代码信息和光标位置所在目标项目的其他文件中的目标关联信息,索引数据库包括目标项目中各目标文件对应的目标索引数据,目标索引数据基于目标文件对应的目标节点信息及各目标节点之间的目标关系信息构建得到;将光标信息、目标相关代码信息及目标关联信息输入目标大模型,生成目标推荐代码信息,确保目标项目中与光标信息相关信息提取的完整性和精准性,提高光标信息对应目标相关代码信息和目标关联信息的提取效率以及代码生成地准确性和有效性。

Description

代码生成方法、装置、设备及介质
技术领域
本申请涉及计算机技术领域,尤其涉及一种代码生成方法、装置、设备及介质。
背景技术
在代码开发场景下,开发人员进行代码开发的过程中,一般需要开发人员依靠鼠标和键盘进行代码编写。代码编写的速度完全依赖于软件工程师对鼠标和键盘的熟练度,且每次操作均有延迟,导致整个代码开发过程中的交互效率和代码编写效率较低。
相关技术中,为了简化代码开发过程,逐渐开始采用智能代码补全和代码生成工具辅助开发人员进行代码开发。这些工具通常采用机器学习技术,特别是自然语言处理(NLP)模型,来预测和推荐代码片段。然而,在模型处理的过程中往往缺乏对相关代码的有效利用,导致所生成的代码不准确,无法为开发人员提供有效的代码支持。
发明内容
本申请实施例提供了一种代码生成方法、装置、设备及介质,既确保目标项目中与光标信息相关信息提取的完整性和精准性,又提高光标信息对应目标相关代码信息和目标关联信息的提取效率,还可以通过输入目标项目的当前文件中的目标相关代码信息和其他文件中的目标关联信息来提高利用目标大模型进行代码生成过程与光标信息以及整个目标项目的关联性,确保目标大模型生成的目标推荐代码信息在目标项目中的可执行性和有效性,提高代码生成地准确性。上述技术方案如下:
第一方面,本申请实施例提供了一种代码生成方法,上述方法包括:
获取编辑器中的光标信息;上述光标信息包括光标位置;
根据上述光标信息在索引数据库中进行检索,得到上述光标位置所在的当前文件中的目标相关代码信息和上述光标位置所在目标项目的其他文件中的目标关联信息;上述索引数据库包括上述目标项目中各目标文件对应的目标索引数据;上述目标索引数据基于上述目标文件对应的目标节点的目标节点信息以及各上述目标节点之间的目标关系信息构建得到;
将上述光标信息、上述目标相关代码信息以及上述目标关联信息输入目标大模型,生成上述光标位置信息对应的目标推荐代码信息。
在一种可能的实现方式中,上述根据上述光标信息在索引数据库中进行检索,得到上述光标位置所在的当前文件中的目标相关代码信息和上述光标位置所在目标项目的其他文件中的目标关联信息,包括:
根据上述光标位置在索引数据库中进行检索,得到上述光标位置对应的当前文件节点信息和当前函数节点信息;
根据上述当前文件节点信息在上述索引数据库中进行检索,得到上述当前文件节点信息在上述目标项目的其他文件中对应的其他引入信息;
根据上述当前函数节点信息在上述索引数据库中进行检索,得到上述当前函数节点信息在上述当前文件节点信息中对应的当前变量引用信息和在上述其他文件中对应的其他变量引用信息;
根据上述当前函数节点信息和上述当前变量引用信息确定上述光标位置所在的当前文件中的目标相关代码信息;
根据上述其他引入信息和上述其他变量引用信息确定上述光标位置所在上述其他文件中的目标关联信息。
在一种可能的实现方式中,上述根据上述光标信息在索引数据库中进行检索,得到上述光标位置所在的当前文件中的目标相关代码信息和上述光标位置所在目标项目的其他文件中的目标关联信息之后,上述方法还包括:
在上述目标相关代码信息和上述目标关联信息对应的目标代码总量小于或等于目标阈值的情况下,根据上述当前函数节点信息在上述索引数据库中进行检索,得到上述当前函数节点信息对应的函数调用关系信息;
将上述光标信息、上述目标相关代码信息、上述目标关联信息以及上述函数调用关系信息输入目标大模型,生成上述光标位置信息对应的目标推荐代码信息;
在上述目标相关代码信息和上述目标关联信息对应的目标代码总量大于上述目标阈值的情况下,执行上述将上述光标信息、上述目标相关代码信息以及目标关联信息输入目标大模型,生成上述光标位置信息对应的目标推荐代码信息的步骤;上述目标阈值小于上述目标大模型的输入长度阈值。
在一种可能的实现方式中,上述将上述光标信息、上述目标相关代码信息以及上述目标关联信息输入目标大模型,生成上述光标位置信息对应的目标推荐代码信息,包括:
将上述光标信息、上述目标相关代码信息以及上述目标关联信息输入目标大模型,根据上述光标位置确定待推荐代码长度类型,并根据上述待推荐代码长度类型、上述光标信息、上述目标相关代码信息以及上述目标关联信息生成上述光标位置信息对应的目标推荐代码信息。
在一种可能的实现方式中,上述根据上述光标位置确定待推荐代码长度类型,包括:
在上述光标位置处于对应当前函数体的第一行或最后一行或上述光标位置后对应的代码信息为空的情况下,确定上述光标位置对应的待推荐代码长度类型为由多行代码组成的代码段;
在上述光标位置不处于上述当前函数体的第一行和最后一行且上述光标位置后对应的代码信息不为空的情况下,确定上述光标位置对应的待推荐代码长度类型为单行。
在一种可能的实现方式中,上述根据上述光标信息在索引数据库中进行检索,得到上述光标位置所在的当前文件中的目标相关代码信息和上述光标位置所在目标项目的其他文件中的目标关联信息,包括:
在上述光标位置不位于当前文件的任意函数范围内或只位于上述当前文件的类函数范围内或不位于上述当前文件中的任意子元素内的情况下,根据上述当前文件对应的函数信息集以及上述光标位置确定上述光标信息对应的目标相关代码信息;和/或,在上述当前文件为指定语言类文件的情况下,将上述当前文件中光标位置对应预设上下文行数的代码信息确定为上述光标信息对应的目标相关代码信息;
根据上述目标相关代码信息在索引数据库中进行检索,得到上述光标位置所在目标项目的其他文件中的目标关联信息。
在一种可能的实现方式中,上述方法还包括:
对上述目标项目中的多个目标文件进行解析,得到上述多个目标文件各自对应的目标代码结构信息;
从上述多个目标文件各自对应的目标代码结构信息中提取多个目标节点各自对应的目标节点信息以及各上述目标节点之间的目标关系信息;
根据上述多个目标节点各自对应的目标节点信息以及各上述目标节点之间的目标关系信息构建上述多个目标节点各自对应的目标索引数据;
将上述多个目标节点各自对应的目标索引数据存储在上述索引数据库中。
在一种可能的实现方式中,上述将上述多个目标节点各自对应的目标索引数据存储在上述索引数据库中,包括:
将上述多个目标节点各自对应的目标索引数据转换为lsif格式,得到上述多个目标节点各自对应的lsif索引数据;
将上述多个目标节点各自对应的lsif索引数据存储在上述索引数据库中。
在一种可能的实现方式中,上述目标节点信息包括上述目标节点对应的目标节点类型、目标代码片段、目标节点位置以及目标节点标识;上述目标节点的作用不同,上述目标节点对应的目标节点类型不同;上述目标关系信息包括上述目标节点之间的目标关系对应的目标关系类型和目标关系描述信息。
第二方面,本申请实施例提供了一种代码生成装置,上述代码生成装置包括:
获取模块,用于获取编辑器中的光标信息;上述光标信息包括光标位置;
第一信息检索模块,用于根据上述光标信息在索引数据库中进行检索,得到上述光标位置所在的当前文件中的目标相关代码信息和上述光标位置所在目标项目的其他文件中的目标关联信息;上述索引数据库包括上述目标项目中各目标文件对应的目标索引数据;上述目标索引数据基于上述目标文件对应的目标节点的目标节点信息以及各上述目标节点之间的目标关系信息构建得到;
第一代码生成模块,用于将上述光标信息、上述目标相关代码信息以及上述目标关联信息输入目标大模型,生成光标位置信息对应的目标推荐代码信息。
第三方面,本申请实施例提供了一种电子设备,包括:处理器以及存储器;
上述处理器与上述存储器相连;
上述存储器,用于存储可执行程序代码;
上述处理器通过读取上述存储器中存储的可执行程序代码来运行与上述可执行程序代码对应的程序,以用于执行本说明书实施例第一方面或第一方面的任意一种可能的实现方式提供的方法。
第四方面,本说明书实施例提供了一种计算机存储介质,上述计算机存储介质存储有多条指令,上述指令适于由处理器加载并执行本说明书实施例第一方面或第一方面的任意一种可能的实现方式提供的方法。
在本申请一个或多个实施例中,一方面,根据光标信息在索引数据库中进行检索,得到光标位置所在的当前文件中的目标相关代码信息和光标位置所在目标项目的其他文件中的目标关联信息,从而通过对当前文件中目标相关代码信息的提取和其他文件中目标关联信息的提取,而不是输入整个目标项目文件或当前文件,既使得需要分析的代码相对于整个目标项目工程的代码较少,又能够减少目标项目中的当前文件和其他文件中大量与光标信息无关的信息对代码生成过程的干扰,在一定程度上确保目标相关代码信息和目标关联信息与光标信息的相关性的同时,还确保了与光标信息相关信息提取的完整性和精准性;同时,通过根据目标项目中各目标文件对应的目标节点的目标节点信息以及各目标节点之间的目标关系信息构建对应的目标索引数据并存储在索引数据库中,以供代码生成过程中针对整个目标项目进行与光标信息的相关信息检索,既提高了光标信息对应目标相关代码信息和目标关联信息的提取效率,又可以根据各目标文件对应的目标节点信息以及各目标节点之间的目标关系信息构建的目标索引数据实现光标位置对应完整代码信息的提取;
另一方面,将光标信息、目标相关代码信息以及目标关联信息输入目标大模型,通过整个目标项目中与光标信息相关的目标相关代码信息和目标关联信息辅助目标大模型生成光标信息对应的目标推荐代码信息,既减小目标大模型输入的代码长度,避免光标所在当前文件或目标项目文件过长且直接输入目标大模型可能造成处理器显存报错崩溃,或者代码直接被随意截断导致代码语义不全,可能会造成模型的幻觉问题,或者代码重复生成以及生成错误等问题,提高目标大模型生成推目标推荐代码信息的效率,又通过输入目标相关代码信息和目标关联信息来提高利用目标大模型进行代码生成过程与光标信息以及整个目标项目的关联性,确保目标大模型生成的目标推荐代码信息在目标项目中的可执行性和有效性,提高代码生成地准确性。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例中所需使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请一示例性实施例提供的一种代码生成系统的架构示意图;
图2为本申请一示例性实施例提供的一种代码生成方法的流程示意图;
图3为本申请一示例性实施例提供的一种信息检索的实现流程示意图;
图4为本申请一示例性实施例提供的另一种信息检索的实现流程示意图;
图5为本申请一示例性实施例提供的一种代码生成的交互效果示意图;
图6为本申请一示例性实施例提供的另一种代码生成方法的流程示意图;
图7为本申请一示例性实施例提供的一种索引数据的构建流程示意图;
图8为本申请一示例性实施例提供的一种代码生成方法的实现过程示意图;
图9为本申请一示例性实施例提供的一种代码生成装置的结构示意图;
图10为本申请一示例性实施例提供的一种电子设备的结构示意图。
具体实施方式
为使得本申请的特征和优点能够更加的明显和易懂,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而非全部实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。
接下来请参考图1,其为本说明书一示例性实施例提供的一种代码生成系统的架构示意图。如图1所示,该代码生成系统可以包括:终端110和服务器120。其中:
终端110可以通过网络与服务器120交互,以接收来自服务器120的消息或向服务器120发送消息。终端110可以是硬件,也可以是软件。当终端110为硬件时,可以是各种电子设备,包括但不限于智能手表、智能手机、平板电脑、膝上型便携式计算机和台式计算机等。当终端110为软件时,可以是安装在上述所列举的电子设备中,其可以实现呈多个软件或软件模块(例如:用来提供分布式服务),也可以实现成单个软件或软件模块,在此不作具体限定。
在本说明书实施例中,终端110可以是软件开发人员等需要进行代码生成的用户对应的用户端。终端110上可安装有编辑器,以供开发人员通过编辑器实现代码编辑和项目开发等。在用户利用编辑器编写代码文件的过程中,可以但不限于获取终端110上的编辑器中的光标信息,光标信息包括光标位置。终端110在获取到光标信息后,可以先根据光标信息在索引数据库中进行检索,得到光标位置所在的当前文件中的目标相关代码信息和光标位置所在目标项目的其他文件中的目标关联信息,索引数据库包括目标项目中各目标文件对应的目标索引数据,目标索引数据基于目标文件对应的目标节点的目标节点信息以及各目标节点之间的目标关系信息构建得到;然后,将光标信息、目标相关代码信息以及目标关联信息输入目标大模型,生成光标位置信息对应的目标推荐代码信息。
可选地,当终端110获取到编辑器中的光标信息、光标信息对应的目标相关代码信息和目标关联信息后,也可以直接将上述编辑器中的光标信息、光标信息对应的目标相关代码信息和目标关联信息通过网络发送至服务器120,以使服务器120根据本申请实施例提供的代码生成方法生成并返回该光标信息对应的目标推荐代码信息。
服务器120可以是提供各种代码生成服务的服务器。需要说明的是,服务器120可以是硬件,也可以是软件。当服务器120为硬件时,可以实现成多个服务器组成的分布式服务器集群,也可以实现成单个服务器。当服务器120为软件时,可以实现成多个软件或软件模块(例如用来提供分布式服务),也可以实现成单个软件或软件模块,在此不做具体限定。服务器120可以但不限于是硬件服务器、虚拟服务器、云服务器等。
可选地,服务器120在接收到终端110发送的编辑器中的光标信息以及光标信息对应的目标相关代码信息和目标关联信息后,也可以通过本申请实施例提供的代码生成方法进行相应的代码生成并将生成的目标推荐代码信息返回至终端110。
可以理解地,本申请实施例所提供的代码生成方法可以由终端110单独执行,也可以由服务器120单独执行,还可以由终端110和服务器120共同执行,本申请实施例对此不作限定。
网络可以是在终端110和服务器120之间提供通信链路的介质,也可以是包含网络设备和传输介质的互联网,不限于此。传输介质可以是有线链路,例如但不限于,同轴电缆、光纤和数字用户线路(digital subscriber line,DSL)等,或无线链路,例如但不限于无线上网(wireless fidelity,WIFI)、超文本传输协议(Hypertext Transfer Protocol,HTTP)、蓝牙和移动设备网络等。
可以理解地,图1所示的代码生成系统中的终端110和服务器120的数目仅作为示例,在具体实现中,该代码生成系统中可以包含任意数目的终端110和服务器120。
接下来结合图1,以终端110执行代码生成为例,介绍本申请一示例性实施例提供的代码生成方法。具体请参考图2,其示例性示出了本申请实施例提供的一种代码生成方法的流程图。如图2所示,该代码生成方法包括以下几个步骤:
S201,获取编辑器中的光标信息,光标信息包括光标位置。
具体地,编辑器中设置有代码推荐(代码生成)功能。在用户利用编辑器编写代码的过程中,当编辑器的代码生成功能处于开启状态时,可以先获取编辑器中的光标信息,以便后续根据该光标信息实现代码生成。上述光标信息除了可以包括光标位置之外,还可以但不限于包括上述光标位置所在的行代码信息。上述光标位置可以为编辑器中光标所在的行信息,也可以包括编辑器中光标所在的行信息和列信息,本申请实施例对此不作限定。
S202,根据光标信息在索引数据库中进行检索,得到光标位置所在的当前文件中的目标相关代码信息和光标位置所在目标项目的其他文件中的目标关联信息,索引数据库包括目标项目中各目标文件对应的目标索引数据。
具体地,上述目标索引数据基于目标文件对应的目标节点的目标节点信息以及各目标节点之间的目标关系信息构建得到。上述目标节点可以是目标文件中的类代码、函数代码、变量代码、注释等任何有意义的元素。上述目标节点信息可以但不限于包括目标节点对应的目标节点类型、目标代码片段、目标节点位置以及目标节点标识。上述目标节点位置可以但不限于包括目标节点所在的文件路径以及代码行数范围等,上述目标节点标识用于区分不同的目标节点,可以但不限于是数字、字符串等,其可以但不限于在目标项目对应目标索引数据的构建过程中自动生成得到。上述目标节点的作用不同,目标节点对应的目标节点类型不同。上述目标关系信息可以但不限于包括目标节点之间的目标关系对应的目标关系类型(例如但不限于继承关系、调用关系、引用关系等)和目标关系描述信息。
示例性地,上述目标节点类型可以但不限于包括metaData、$event、Source、Capabilities、Project、Range、Location、Document、Moniker、packageInfomation、resultSet、documentSymbolResult、foldingRangeResult、documentLinkResult、diagnosticResult、declarationResult、definitionResult、typeDefinitionResult、hoverResult、referenceResult、implementationResult等。上述metaData类型的目标节点用于标记存储元数组,存储要生成lsif的版本等一些相关信息;上述$event类型的目标节点用于标识事件或者行为,事件种类有两种:begin、end,事件的活动范围有三种:project、document、monikerAttach;上述Source类型的目标节点用于标识数据来源;上述Capabilities类型的目标节点用于标识一些功能或能力;上述Project类型的目标节点用于标识工程或项目;上述Range类型的目标节点用于标识范围或区间;上述Location类型的目标节点用于标识位置信息;上述Document类型的目标节点用于标识bi文件或文档;上述Moniker类型的目标节点用于标识唯一元素或别名,别名种类有三种:import、exprot、local,唯一性元素有5种:project、workspace、scheme、global;上述packageInfomation类型的目标节点用于标识软件包的相关信息;上述resultSet类型的目标节点用于标识结果集;上述documentSymbolResult类型的目标节点用于标识文档符号的结果;上述foldingRangeResult类型的目标节点用于标识折叠范围的结果,折叠范围的类型包括comment、imports、region;上述documentLinkResult类型的目标节点用于标识文档链接的结果;上述diagnosticResult类型的目标节点用于标识诊断结果;上述declarationResult类型的目标节点用于标识申明结果;上述definitionResult类型的目标节点用于标识定义结果;上述typeDefinitionResult类型的目标节点用于标识类型定义结果;上述hoverResult类型的目标节点用于标识鼠标悬停信息结果;上述referenceResult类型的目标节点用于标识引用结果上述implementationResult类型的目标节点用于标识具体实现结果。
示例性地,上述目标关系类型可以但不限于包括Contains(包含关系)、Next(下一个步骤,序列元素中使用)、Item(一个对象)、Moniker(唯一名称或别名)、Attach(继承关系)、packageInformation(软件包信息,包括版本和依赖库)、documentSymbol(文档中获取符号信息,如变量,函数名)、foldingRange(可折叠区域范围)、documentLink(文档中的链接)、Diagnostic(文档诊断信息、编码时的错误检测、警告提示信息)、Definition(符号定义的位置,例如一个函数或变量的定义)、Declaration(声明位置、变量、函数的首次声明)、typeDefinition(类型定义的位置,如类、接口、类型别名)、Hover(鼠标悬停到代码上的显示信息,如类型信息、文档注释)、References(代码某个元素所有引用的位置,例如变量被使用的所有地方)、Implementation(接口或抽象方法的实现)等。
可选地,在获取到光标信息后,可以直接根据光标位置和/或光标位置所在的行代码信息在索引数据库中进行检索,得到索引数据库中与光标信息相关的目标索引数据,例如但不限于目标节点位置范围包括光标位置的目标节点(例如但不限于当前函数节点、当前文件节点)对应的目标索引数据,然后从目标索引数据中提取出光标位置所在的当前文件中的目标相关代码信息和光标位置所在目标项目的其他文件中的目标关联信息。
可选地,如图3所示,上述S202,根据光标信息在索引数据库中进行检索,得到光标位置所在的当前文件中的目标相关代码信息和光标位置所在目标项目的其他文件中的目标关联信息的实现流程可以但不限于包括:
S301,根据光标位置在索引数据库中进行检索,得到光标位置对应的当前文件节点信息和当前函数节点信息。
具体地,在获取到光标位置后,可以使用该光标位置在索引数据库中检索,找到对应的当前文件节点和当前函数节点。上述当前文件节点信息可以但不限于包括光标位置所在的当前文件对应的文件名、文件路径、文件类型、文件标识等。上述当前函数节点信息可以但不限于包括当前文件中光标位置所在的当前函数对应的函数名、参数列表、返回类型、函数代码片段、所在文件信息等。
S302,根据当前文件节点信息在索引数据库中进行检索,得到当前文件节点信息在目标项目的其他文件中对应的其他引入信息。
具体地,在得到当前文件节点信息后,还可以但不限于使用当前文件节点信息在索引数据库中进行检索,得到当前文件节点信息在目标项目的其他文件中对应的其他引入信息。上述其他引入信息可以但不限于包括目标项目中所有引用或包含当前文件的其他文件对应的引入信息以及当前文件所引用或包含的其他文件对应的引入信息等,这些引入信息可以但不限于包括引入方式(例如但不限于如import、require等)、引入位置、引入的文件路径、引入的代码片段等。
S303,根据当前函数节点信息在索引数据库中进行检索,得到当前函数节点信息在当前文件节点信息中对应的当前变量引用信息和在其他文件中对应的其他变量引用信息。
具体地,在得到光标位置对应的当前函数节点信息后,可以直接根据该当前函数节点信息在索引数据库中进行检索,得到当前函数节点对应的目标索引数据,并根据变量引用关系从该目标索引数据中提取当前函数节点信息在当前文件节点信息中对应的当前变量引用信息和在其他文件中对应的其他变量引用信息。上述变量引用信息(当前变量引用信息或其他变量引用信息)可以但不限于包括当前函数节点对应的变量引用位置、变量名、引用类型(例如读取、修改等)、变量代码片段。
S304,根据当前函数节点信息和当前变量引用信息确定光标位置所在的当前文件中的目标相关代码信息。
具体地,在得到当前函数节点信息和该当前函数节点信息在当前文件节点信息中对应的当前变量引用信息后,可以直接将当前函数节点信息和当前变量引用信息进行组合,得到光标信息在当前文件中对应的目标相关代码信息,以辅助目标大模型理解光标位置在当前文件的上下文,实现更加精准地代码生成。
S305,根据其他引入信息和其他变量引用信息确定光标位置所在其他文件中的目标关联信息。
具体地,在得到当前文件节点信息在目标项目的其他文件中对应的其他引入信息以及当前函数节点信息在其他文件中对应的其他变量引用信息后,可以直接将上述其他引入信息和其他变量引用信息进行拼接组合,得到光标位置所在其他文件中的目标关联信息,以辅助目标大模型理解光标位置所对应的代码在整个项目中的位置和影响,进而实现更加精准地代码生成。
可选地,如图4所示,上述S202,根据光标信息在索引数据库中进行检索,得到光标位置所在的当前文件中的目标相关代码信息和光标位置所在目标项目的其他文件中的目标关联信息的实现流程可以但不限于包括:
S401,在光标位置不位于当前文件的任意函数范围内或只位于当前文件的类函数范围内或不位于当前文件中的任意子元素内的情况下,根据当前文件对应的函数信息集以及光标位置确定光标信息对应的目标相关代码信息。
具体地,在光标位置不位于当前文件的任意函数范围内或只位于当前文件的类函数范围内或不位于当前文件中的任意子元素内的情况下,可以根据当前文件对应的函数信息集以及光标位置确定光标信息对应的目标相关代码信息。也即,当光标位置不位于当前文件的任意具备完整语义的代码片段内即不位于当前文件对应的任意一个目标节点的代码范围内时,可以直接提取当前文件的函数信息集,并根据光标位置对其进行过滤得到光标信息对应的目标相关代码信息。上述函数信息集可以但不限于包括当前文件中各函数代码段以及对应的函数代码位置信息。例如但不限于可以直接将当前文件的函数信息集中与光标位置距离最近的函数代码段对应的函数信息确定为目标相关代码信息。和/或
S402,在当前文件为指定语言类文件的情况下,将当前文件中光标位置对应预设上下文行数的代码信息确定为光标信息对应的目标相关代码信息。
具体地,由于一些指定语言例如sql等其语句本身具有完整性,每一条语句并不能和其他语句关联起来,因此,在当前文件为指定语言类文件的情况下,可以直接将当前文件中光标位置对应预设上下文行数(例如但不限于上下两行或五行等)的代码信息确定为光标信息对应的目标相关代码信息,就可以实现具备完整语义的目标相关代码信息的提取。
S403,根据目标相关代码信息在索引数据库中进行检索,得到光标位置所在目标项目的其他文件中的目标关联信息。
具体地,在得到光标信息对应当前文件中的目标相关代码信息后,可以但不限于根据目标相关代码信息中涉及的目标节点对应的目标节点信息在索引数据库中进行检索,得到对应的目标索引数据,然后从该目标索引数据中提取出光标位置对应其他文件中的目标关联信息,上述目标关联信息可以但不限于为其他文件中与目标相关代码信息之间存在关联关系(例如但不限于变量引用关系、函数调用关系等)的代码片段信息,例如但不限于代码片段在其他文件中对应的代码位置范围、与目标相关代码信息对应的关联关系类型等。
接下来请继续参考图2,如图2所示,上述S202,根据光标信息在索引数据库中进行检索,得到光标位置所在的当前文件中的目标相关代码信息和光标位置所在目标项目的其他文件中的目标关联信息之后,该代码生成方法还包括:
S203,将光标信息、目标相关代码信息以及目标关联信息输入目标大模型,生成光标位置信息对应的目标推荐代码信息。
具体地,在获取到光标信息、目标相关代码信息以及目标关联信息后,通过调用目标大模型(例如但不限于基于深度神经网络的大模型、大语言模型等)的API接口,将上述信息一起输入到目标大模型中进行处理。利用目标大模型分析输入的目标相关代码信息和目标关联信息中的结构、语法和语义,理解代码的功能和意图,从而可以针对光标位置、光标位置所对应的行代码等光标信息生成对应的目标推荐代码信息,以推荐该光标位置处可能需要编写的代码内容,辅助开发人员更加高效地完成代码编写。上述目标推荐代码信息可以包括目标推荐代码,也还可以包括该目标推荐代码对应的目标代码注释和/或目标推荐原因,以便开发人员能够更加直观地了解该目标推荐代码的含义以及推荐该目标推荐代码的原因。
可选地,上述S203,将光标信息、目标相关代码信息以及目标关联信息输入目标大模型,生成光标位置信息对应的目标推荐代码信息的实现过程可以但不限于包括:将光标信息、目标相关代码信息以及目标关联信息输入目标大模型,目标大模型可以先根据光标位置确定待推荐代码长度类型,例如但不限于根据光标位置与待推荐代码长度类型之间的映射关系,确定光标当前所在的位置对应的待推荐代码长度类型;然后根据待推荐代码长度类型、光标信息、目标相关代码信息以及目标关联信息生成光标位置信息对应的目标推荐代码信息,从而通过在生成目标推荐代码信息之前先确定需要生成的待推荐代码长度,然后根据待推荐代码长度进行相应的代码生成,尽可能避免生成很多无用且重复的代码。
进一步地,上述根据光标位置确定待推荐代码长度类型的实现过程可以但不限于包括:在光标位置处于对应当前函数体的第一行或最后一行或光标位置后对应的代码信息为空的情况下,说明光标位置对应的上文或下文是完整的,或者光标位置没有下文代码,则可以确定光标位置对应的待推荐代码长度类型为由多行代码组成的代码段,也即,目标大模型可以根据待推荐代码长度类型、光标信息、目标相关代码信息以及目标关联信息生成光标位置信息对应由多行代码组成的目标推荐代码段。例如图5所示,当光标位置510后对应的代码信息为空时,目标大模型可以生成由多行代码组成的目标推荐代码段520,并可以但不限于在编辑器的光标位置510后以幽灵字体进行显示。同时,还可以但不限于以弹窗的形式显示该目标推荐代码段520对应的接受控件530。当开发人员想要直接使用目标推荐代码段520时,可以但不限于直接点击接受控件530,以实现将目标推荐代码段520插入光标位置510处,无需用户通过复制粘贴的方式完成目标推荐代码段520的插入和使用,进一步辅助开发人员提高代码编写的效率。
在光标位置不处于当前函数体的第一行和最后一行且光标位置后对应的代码信息不为空的情况下,说明光标位置对应所要编写的代码可能属于一个完整代码片段的一小部分,则可以确定光标位置对应的待推荐代码长度类型为单行,也即,目标大模型可以根据待推荐代码长度类型、光标信息、目标相关代码信息以及目标关联信息生成光标位置信息对应单行的目标推荐代码段,从而尽可能避免生成很多无用且重复的代码问题。
本申请实施例中,一方面,根据光标信息在索引数据库中进行检索,得到光标位置所在的当前文件中的目标相关代码信息和光标位置所在目标项目的其他文件中的目标关联信息,从而通过对当前文件中目标相关代码信息的提取和其他文件中目标关联信息的提取,而不是输入整个目标项目文件或当前文件,既使得需要分析的代码相对于整个目标项目工程的代码较少,又能够减少目标项目中的当前文件和其他文件中大量与光标信息无关的信息对代码生成过程的干扰,在一定程度上确保目标相关代码信息和目标关联信息与光标信息的相关性的同时,还确保了与光标信息相关信息提取的完整性和精准性;同时,通过根据目标项目中各目标文件对应的目标节点的目标节点信息以及各目标节点之间的目标关系信息构建对应的目标索引数据并存储在索引数据库中,以供代码生成过程中针对整个目标项目进行与光标信息的相关信息检索,既提高了光标信息对应目标相关代码信息和目标关联信息的提取效率,又可以根据各目标文件对应的目标节点信息以及各目标节点之间的目标关系信息构建的目标索引数据实现光标位置对应完整代码信息的提取;
另一方面,将光标信息、目标相关代码信息以及目标关联信息输入目标大模型,通过整个目标项目中与光标信息相关的目标相关代码信息和目标关联信息辅助目标大模型生成光标信息对应的目标推荐代码信息,既减小目标大模型输入的代码长度,避免光标所在当前文件或目标项目文件过长且直接输入目标大模型可能造成处理器显存报错崩溃,或者代码直接被随意截断导致代码语义不全,可能会造成模型的幻觉问题,或者代码重复生成以及生成错误等问题,提高目标大模型生成推目标推荐代码信息的效率,又通过输入目标相关代码信息和目标关联信息来提高利用目标大模型进行代码生成过程与光标信息以及整个目标项目的关联性,确保目标大模型生成的目标推荐代码信息在目标项目中的可执行性和有效性,提高代码生成地准确性。
接下来请参考图6,其示例性示出了本申请实施例提供的另一种代码生成方法的流程图。如图6所示,该代码生成方法包括以下几个步骤:
S601,获取编辑器中的光标信息,光标信息包括光标位置。
具体地,上述S601与S201一致,此处不再赘述。
S602,根据光标信息在索引数据库中进行检索,得到光标位置所在的当前文件中的目标相关代码信息和光标位置所在目标项目的其他文件中的目标关联信息,索引数据库包括目标项目中各目标文件对应的目标索引数据。
具体地,上述S602与S202一致,此处不再赘述。
S603,在目标相关代码信息和目标关联信息对应的目标代码总量小于或等于目标阈值的情况下,根据当前函数节点信息在索引数据库中进行检索,得到当前函数节点信息对应的函数调用关系信息,目标阈值小于目标大模型的输入长度阈值。
具体地,在目标相关代码信息和目标关联信息对应的目标代码总量(例如代码总长度)小于或等于目标阈值的情况下,说明目标相关代码信息和目标关联信息对应的代码总长度不会超过目标大模型的输入长度阈值,且还可以输入一部分其他的相关信息,则可以根据当前函数节点信息在索引数据库中进行检索,得到当前函数节点信息对应的函数调用关系信息,以为目标大模型提供更加全面地与光标信息相关的信息知识支撑,进而在确保将具备完整语义的目标相关代码信息和目标关联信息输入目标大模型也不会因为输入数据过长导致输入数据被截断使得输入数据语义不够完整影响代码生成准确性的问题,还通过输入当前函数节点信息对应的函数调用关系信息提高目标大模型进行代码生成的精准性和有效性。为了给函数调用关系信息预留出来一定的模型输入位置,防止目标相关代码信息和目标关联信息过大导致无法输入处理函数调用关系信息或输入数据被截断的问题,上述目标阈值应小于目标大模型的输入长度阈值,例如但不限于可以为目标大模型的输入长度阈值-100或目标大模型的输入长度阈值-200等,具体可根据实际需求进行设定,本申请实施例对此不作具体限定。
S604,将光标信息、目标相关代码信息、目标关联信息以及函数调用关系信息输入目标大模型,生成光标位置信息对应的目标推荐代码信息。
具体地,在目标相关代码信息和目标关联信息对应的目标代码总量(例如代码总长度)小于或等于目标阈值的情况下,可以将光标信息、目标相关代码信息、目标关联信息以及函数调用关系信息输入目标大模型,生成光标位置信息对应的目标推荐代码信息,从而为目标大模型提供更加全面地与光标信息相关的信息知识支撑,确保将具备完整语义的目标相关代码信息和目标关联信息以及以及函数调用关系信息输入目标大模型也不会因为输入数据过长导致输入数据被截断使得输入数据语义不够完整影响代码生成准确性的问题,还通过输入当前函数节点信息对应的函数调用关系信息提高目标大模型进行代码生成的精准性和有效性。
S605,在目标相关代码信息和目标关联信息对应的目标代码总量大于目标阈值的情况下,将光标信息、目标相关代码信息以及目标关联信息输入目标大模型,生成光标位置信息对应的目标推荐代码信息。
具体地,在目标相关代码信息和目标关联信息对应的目标代码总量(例如代码总长度)大于目标阈值的情况下,说明目标相关代码信息和目标关联信息对应的代码总长度很可能会超过目标大模型的输入长度阈值,这是已经无法为其他的相关信息提供输入空间,则可以只将光标信息、目标相关代码信息以及目标关联信息输入目标大模型,生成光标位置信息对应的目标推荐代码信息。上述将光标信息、目标相关代码信息以及目标关联信息输入目标大模型,生成光标位置信息对应的目标推荐代码信息的实现过程与S203一致,此处不再赘述。
可选地,在目标相关代码信息和目标关联信息对应的目标代码总量大于目标阈值且大于目标大模型的输入长度阈值的情况下,说明目标相关代码信息和目标关联信息对应的代码总长度已经超过了目标大模型的输入长度阈值,为了避免输入目标大模型的数据过长导致输入数据被截断使得输入数据语义不够完整影响代码生成准确性的问题,可以先将上述目标相关代码信息和目标关联信息进行过滤,只保留与光标信息相关性较高的信息,然后将过滤后代码总长小于或等于目标大模型的输入长度阈值的目标相关代码信息和目标关联信息输入目标大模型,生成光标位置信息对应的目标推荐代码信息。
接下来请参考图7,其示例性示出了本申请实施例提供的一种索引数据的构建方法的流程图。如图7所示,该索引数据方法包括以下几个步骤:
S701,对目标项目中的多个目标文件进行解析,得到多个目标文件各自对应的目标代码结构信息。
具体地,上述代码结构信息可以包括目标文件对应的目标语法树信息。目标语法树是以树形结构展示了代码中的表达式、语句、声明等元素的层次关系,使得代码的结构更加直观易懂。目标语法树中的每个目标节点都代表了一种特定的语法结构,如标识符、声明、关键字、常量等。可以使用代码解析工具Tree-sitter对编辑器中各目标文件进行解析,为各目标文件建立一个具体的目标语法树,并可以在编辑目标文件时有效地更新语法树。
S702,从多个目标文件各自对应的目标代码结构信息中提取多个目标节点各自对应的目标节点信息以及各目标节点之间的目标关系信息。
具体地,在得到多个目标文件各自对应的目标代码结构信息后,可以在目标代码结构信息中,识别出需要关注的目标节点。这些目标节点可以但不限于是函数节点、变量节点、类节点、接口节点等。然后,提取每个目标节点的详细信息(目标节点信息),例如但不限于名称、目标节点类型、目标代码片段、目标节点位置、目标节点标识、作用域等,以及分析并记录各目标节点之间的目标关系信息,例如但不限于函数调用关系、变量依赖关系、继承关系等目标关系类型、以及目标关系方向(例如有向或无向)和目标关系强度(例如直接调用或间接调用)等目标关系描述信息。上述目标节点标识用于区分不同的目标节点,可以但不限于是数字、字符串等,其可以但不限于在目标项目对应目标索引数据的构建过程中自动生成得到。
可以理解地,一个目标文件可以对应一个或多个目标节点,本申请实施例对此不作限定。上述目标节点的作用不同,目标节点对应的目标节点类型不同。
S703,根据多个目标节点各自对应的目标节点信息以及各目标节点之间的目标关系信息构建多个目标节点各自对应的目标索引数据。
具体地,可以根据提取的多个目标节点信息和各目标节点之间的目标关系信息,按照预设索引数据结构构建多个目标节点各自对应的目标索引数据。上述预设索引结构可以但不限于为图结构,用于表示目标节点之间的目标关系。
S704,将多个目标节点各自对应的目标索引数据存储在索引数据库中。
具体地,在构建完多个目标节点各自对应的目标索引数据后,可以将多个目标节点各自对应的目标索引数据保存在本地的索引数据库中。由于在编码过程中,本地代码存在实时修改的情况,并且也不一定会提交到远程代码仓库中,这就导致了,如果在远程代码仓库创建索引,可能会导致当前创建的索引数据只能是最新提交的索引数据,和本地代码之间还存在一定的区别。而在联合开发的过程中,每个人本地的代码可能都不相同,所以,直接在本地进行索引数据的构建存储,不仅能够提高光标信息在目标项目中进行相关信息检索的效率和准确性,还比较节约资源。
可选地,上述S704,将多个目标节点各自对应的目标索引数据存储在索引数据库中的实现过程可以但不限于包括:将多个目标节点各自对应的目标索引数据转换为lsif格式,得到多个目标节点各自对应的lsif索引数据。lsif格式是一种标准化的格式,用于表示代码中的符号信息及其关系,以便支持高效的代码导航和智能感知功能。上述转换过程可以但不限于是将目标节点转换为lsif格式中的符号,将目标节点之间的关系转换为lsif格式中的边(edge),用于表示符号之间的特定关系(目标关系),例如但不限于调用关系、继承关系、定义/引用关系等。每个符号有一个唯一的标识、一个名称、一个类型,以及可能的其他属性(如作用域、访问修饰符等)。同时,还可以为每个符号添加定位信息,这些信息指定了符号在代码中的确切位置(例如但不限于文件名、行号、列号等)。得到多个目标节点各自对应的lsif索引数据后,可以但不限于将多个目标节点各自对应的lsif索引数据存储在索引数据库中。
本申请实施例中,将目标项目中各目标文件对应的目标索引数据转换为lsif格式索引数据进行存储,以便后续用户编写代码的过程中支持高效地全局代码信息检索,实现在代码生成推荐的过程中,高效全面地考虑到目标项目的整体结构和代码逻辑,提高代码生成的效率和精准性。
接下来请参考图8,其示例性示出了本申请实施例提供的一种代码生成方法的实现过程示意图。如图8所示,在开发人员使用编辑器编写代码文件的过程中,可以先为编辑器配置语言服务插件或框架,例如语言服务器协议(Language Server Protocol,LSP)客户端,确保它能够正确解析目标项目中的代码文件(目标文件),并提供准确地推荐和提示。编辑器需要实时监控目标项目中各目标文件的更改,并更新语言服务提供的推荐和提示。通过与语言服务插件或框架的通信,确保编辑器能够即时反映目标项目中代码的变化。在分析目标项目的各目标文件的过程中,编辑器可以根据各目标文件的类型或用户设置,自动切换到合适的语言服务插件。然后,可以将编辑器与宿主环境(如开发服务器、数据库等)之间进行同步,以确保代码生成推荐和调试的实时性和准确性。然后,利用代码解析工具对目标项目中各目标文件进行解析,得到各目标文件对应的目标代码结构信息。此过程中,通过集成语言服务插件或框架,编辑器可以解析多种编程语言的代码文件(目标文件)。然后,可以从多个目标文件各自对应的目标代码结构信息中提取多个目标节点各自对应的目标节点信息以及各目标节点之间的目标关系信息,并根据多个目标节点各自对应的目标节点信息以及各目标节点之间的目标关系信息构建多个目标节点各自对应的目标索引数据,以及将多个目标节点各自对应的目标索引数据存储在索引数据库中,从而实现代码编辑过程中目标项目对应的索引数据库构建,为后续的代码生成提供高效地相关信息检索基础和知识支撑。
在开发人员使用编辑器编写代码文件的过程中,还可以获取该编辑器中的光标信息(例如但不限于光标位置、光标位置所对应的行代码等)。然后,根据光标信息在上述索引数据库中进行检索,得到光标位置所在的当前文件中的目标相关代码信息和光标位置所在目标项目的其他文件中的目标关联信息。最后,将光标信息、目标相关代码信息以及目标关联信息输入目标大模型,生成光标位置信息对应的目标推荐代码信息,从而完成代码编辑过程中光标信息对应目标推荐代码信息的生成,以辅助开发人员实现更加高效地代码编写。
接下来请参考图9,其为本申请一示例性实施例提供的一种代码生成装置的结构示意图。如图9所示,该代码生成装置900包括:
获取模块910,用于获取编辑器中的光标信息;上述光标信息包括光标位置;
第一信息检索模块920,用于根据上述光标信息在索引数据库中进行检索,得到上述光标位置所在的当前文件中的目标相关代码信息和上述光标位置所在目标项目的其他文件中的目标关联信息;上述索引数据库包括上述目标项目中各目标文件对应的目标索引数据;上述目标索引数据基于上述目标文件对应的目标节点的目标节点信息以及各上述目标节点之间的目标关系信息构建得到;
第一代码生成模块930,用于将上述光标信息、上述目标相关代码信息以及上述目标关联信息输入目标大模型,生成上述光标位置信息对应的目标推荐代码信息。
在一种可能的实现方式中,上述第一信息检索模块920包括:
第一信息检索单元,用于根据上述光标位置在索引数据库中进行检索,得到上述光标位置对应的当前文件节点信息和当前函数节点信息;
第二信息检索单元,用于根据上述当前文件节点信息在上述索引数据库中进行检索,得到上述当前文件节点信息在上述目标项目的其他文件中对应的其他引入信息;
第三信息检索单元,用于根据上述当前函数节点信息在上述索引数据库中进行检索,得到上述当前函数节点信息在上述当前文件节点信息中对应的当前变量引用信息和在上述其他文件中对应的其他变量引用信息;
第一确定单元,用于根据上述当前函数节点信息和上述当前变量引用信息确定上述光标位置所在的当前文件中的目标相关代码信息;
第二确定单元,用于根据上述其他引入信息和上述其他变量引用信息确定上述光标位置所在上述其他文件中的目标关联信息。
在一种可能的实现方式中,上述代码生成装置900还包括:
第二信息检索模块,用于在上述目标相关代码信息和上述目标关联信息对应的目标代码总量小于或等于目标阈值的情况下,根据上述当前函数节点信息在上述索引数据库中进行检索,得到上述当前函数节点信息对应的函数调用关系信息;
第二代码生成模块,用于将上述光标信息、上述目标相关代码信息、上述目标关联信息以及上述函数调用关系信息输入目标大模型,生成上述光标位置信息对应的目标推荐代码信息;
上述第一代码生成模块930具体用于:在上述目标相关代码信息和上述目标关联信息对应的目标代码总量大于上述目标阈值的情况下,执行上述将上述光标信息、上述目标相关代码信息以及目标关联信息输入目标大模型,生成上述光标位置信息对应的目标推荐代码信息的步骤;上述目标阈值小于上述目标大模型的输入长度阈值。
在一种可能的实现方式中,上述第一代码生成模块930具体用于:
将上述光标信息、上述目标相关代码信息以及上述目标关联信息输入目标大模型,根据上述光标位置确定待推荐代码长度类型,并根据上述待推荐代码长度类型、上述光标信息、上述目标相关代码信息以及上述目标关联信息生成上述光标位置信息对应的目标推荐代码信息。
在一种可能的实现方式中,上述第一代码生成模块930执行上述根据上述光标位置确定待推荐代码长度类型时,具体用于:
在上述光标位置处于对应当前函数体的第一行或最后一行或上述光标位置后对应的代码信息为空的情况下,确定上述光标位置对应的待推荐代码长度类型为由多行代码组成的代码段;在上述光标位置不处于上述当前函数体的第一行和最后一行且上述光标位置后对应的代码信息不为空的情况下,确定上述光标位置对应的待推荐代码长度类型为单行。
在一种可能的实现方式中,上述第一信息检索模块920包括:
第三确定单元,用于在上述光标位置不位于当前文件的任意函数范围内或只位于上述当前文件的类函数范围内或不位于上述当前文件中的任意子元素内的情况下,根据上述当前文件对应的函数信息集以及上述光标位置确定上述光标信息对应的目标相关代码信息;和/或,在上述当前文件为指定语言类文件的情况下,将上述当前文件中光标位置对应预设上下文行数的代码信息确定为上述光标信息对应的目标相关代码信息;
第四信息检索单元,用于根据上述目标相关代码信息在索引数据库中进行检索,得到上述光标位置所在目标项目的其他文件中的目标关联信息。
在一种可能的实现方式中,上述代码生成装置900还包括:
代码解析模块,用于对上述目标项目中的多个目标文件进行解析,得到上述多个目标文件各自对应的目标代码结构信息;
信息提取模块,用于从上述多个目标文件各自对应的目标代码结构信息中提取多个目标节点各自对应的目标节点信息以及各上述目标节点之间的目标关系信息;
索引构建模块,用于根据上述多个目标节点各自对应的目标节点信息以及各上述目标节点之间的目标关系信息构建上述多个目标节点各自对应的目标索引数据;
数据存储模块,用于将上述多个目标节点各自对应的目标索引数据存储在上述索引数据库中。
在一种可能的实现方式中,上述代码生成装置900包括:
数据转换单元,用于将上述多个目标节点各自对应的目标索引数据转换为lsif格式,得到上述多个目标节点各自对应的lsif索引数据;
数据存储单元,用于将上述多个目标节点各自对应的lsif索引数据存储在上述索引数据库中。
在一种可能的实现方式中,上述目标节点信息包括上述目标节点对应的目标节点类型、目标代码片段、目标节点位置以及目标节点标识;上述目标节点的作用不同,上述目标节点对应的目标节点类型不同;上述目标关系信息包括上述目标节点之间的目标关系对应的目标关系类型和目标关系描述信息。
上述代码生成装置中各模块的划分仅用于举例说明,在其他实施例中,可将代码生成装置按照需要划分为不同的模块,以对应完成上述代码生成装置的全部或部分功能。本说明书实施例中提供的代码生成装置中的各个模块的实现可为计算机程序的形式。该计算机程序可在终端或服务器上运行。该计算机程序构成的程序模块可存储在终端或服务器的存储器上。该计算机程序被处理器执行时,实现本说明书实施例中所描述的代码生成方法的全部或部分步骤。
接下来请参阅图10,其为本说明书一示例性实施例提供的一种电子设备的结构示意图。如图10所示,该电子设备1000可以包括:至少一个处理器1010、至少一个通信总线1020、用户接口1030、至少一个网络接口1040、存储器1050。
其中,通信总线1020可用于实现上述各个组件的连接通信。
其中,用户接口1030可以包括显示屏(Display)和摄像头(Camera),可选用户接口1030还可以包括标准的有线接口、无线接口。
其中,网络接口1040可选的可以包括蓝牙模块、近场通信(Near FieldCommunication,NFC)模块、无线保真(Wireless Fidelity,Wi-Fi)模块等。
其中,处理器1010可以包括一个或者多个处理核心。处理器1010利用各种接口和线路连接整个电子设备1000内的各个部分,通过运行或执行存储在存储器1050内的指令、程序、代码集或指令集,以及调用存储在存储器1050内的数据,执行路由电子设备1000的各种功能和处理数据。可选的,处理器1010可以采用数字信号处理(Digital SignalProcessing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable Logic Array,PLA)中的至少一种硬件形式来实现。处理器1010可以是集成处理器(Central Processing Unit,CPU)、图像处理器(Graphics ProcessingUnit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示屏所需要显示的内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到处理器1010中,单独通过一块芯片进行实现。
其中,存储器1050可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory,ROM)。可选的,该存储器1050包括非瞬时性计算机可读介质。存储器1050可用于存储指令、程序、代码、代码集或指令集。存储器1050可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于至少一个功能的指令(比如获取功能、信息检索功能、代码生成功能等)、用于实现上述各个方法实施例的指令等;存储数据区可存储上面各个方法实施例中涉及到的数据等。存储器1050可选的还可以是至少一个位于远离前述处理器1010的存储装置。如图10所示,作为一种计算机存储介质的存储器1050中可以包括操作系统、网络通信模块、用户接口模块以及程序指令。
在一些可能的实施例中,电子设备1000可以是前述图9所示的代码生成装置900,处理器1010可以用于调用存储器1050中存储的程序指令,并具体执行以下操作:获取编辑器中的光标信息;上述光标信息包括光标位置;根据上述光标信息在索引数据库中进行检索,得到上述光标位置所在的当前文件中的目标相关代码信息和上述光标位置所在目标项目的其他文件中的目标关联信息;上述索引数据库包括上述目标项目中各目标文件对应的目标索引数据;上述目标索引数据基于上述目标文件对应的目标节点的目标节点信息以及各上述目标节点之间的目标关系信息构建得到;将上述光标信息、上述目标相关代码信息以及上述目标关联信息输入目标大模型,生成上述光标位置信息对应的目标推荐代码信息。
在一些可能的实施例中,上述处理器1010执行上述根据上述光标信息在索引数据库中进行检索,得到上述光标位置所在的当前文件中的目标相关代码信息和上述光标位置所在目标项目的其他文件中的目标关联信息时,具体用于执行:根据上述光标位置在索引数据库中进行检索,得到上述光标位置对应的当前文件节点信息和当前函数节点信息;根据上述当前文件节点信息在上述索引数据库中进行检索,得到上述当前文件节点信息在上述目标项目的其他文件中对应的其他引入信息;根据上述当前函数节点信息在上述索引数据库中进行检索,得到上述当前函数节点信息在上述当前文件节点信息中对应的当前变量引用信息和在上述其他文件中对应的其他变量引用信息;根据上述当前函数节点信息和上述当前变量引用信息确定上述光标位置所在的当前文件中的目标相关代码信息;根据上述其他引入信息和上述其他变量引用信息确定上述光标位置所在上述其他文件中的目标关联信息。
在一些可能的实施例中,上述处理器1010执行上述根据上述光标信息在索引数据库中进行检索,得到上述光标位置所在的当前文件中的目标相关代码信息和上述光标位置所在目标项目的其他文件中的目标关联信息之后,还用于执行:在上述目标相关代码信息和上述目标关联信息对应的目标代码总量小于或等于目标阈值的情况下,根据上述当前函数节点信息在上述索引数据库中进行检索,得到上述当前函数节点信息对应的函数调用关系信息;将上述光标信息、上述目标相关代码信息、上述目标关联信息以及上述函数调用关系信息输入目标大模型,生成上述光标位置信息对应的目标推荐代码信息;在上述目标相关代码信息和上述目标关联信息对应的目标代码总量大于上述目标阈值的情况下,执行上述将上述光标信息、上述目标相关代码信息以及目标关联信息输入目标大模型,生成上述光标位置信息对应的目标推荐代码信息的步骤;上述目标阈值小于上述目标大模型的输入长度阈值。
在一些可能的实施例中,上述处理器1010执行上述将上述光标信息、上述目标相关代码信息以及上述目标关联信息输入目标大模型,生成上述光标位置信息对应的目标推荐代码信息时,具体用于执行:将上述光标信息、上述目标相关代码信息以及上述目标关联信息输入目标大模型,根据上述光标位置确定待推荐代码长度类型,并根据上述待推荐代码长度类型、上述光标信息、目标相关代码信息以及目标关联信息生成光标位置信息对应的目标推荐代码信息。
在一些可能的实施例中,上述处理器1010执行上述根据上述光标位置确定待推荐代码长度类型时,具体用于执行:在上述光标位置处于对应当前函数体的第一行或最后一行或上述光标位置后对应的代码信息为空的情况下,确定上述光标位置对应的待推荐代码长度类型为由多行代码组成的代码段;在上述光标位置不处于上述当前函数体的第一行和最后一行且上述光标位置后对应的代码信息不为空的情况下,确定上述光标位置对应的待推荐代码长度类型为单行。
在一些可能的实施例中,上述处理器1010执行上述根据上述光标信息在索引数据库中进行检索,得到上述光标位置所在的当前文件中的目标相关代码信息和上述光标位置所在目标项目的其他文件中的目标关联信息时,具体用于执行:在上述光标位置不位于当前文件的任意函数范围内或只位于上述当前文件的类函数范围内或不位于上述当前文件中的任意子元素内的情况下,根据上述当前文件对应的函数信息集以及上述光标位置确定上述光标信息对应的目标相关代码信息;和/或,在上述当前文件为指定语言类文件的情况下,将上述当前文件中光标位置对应预设上下文行数的代码信息确定为上述光标信息对应的目标相关代码信息;根据上述目标相关代码信息在索引数据库中进行检索,得到上述光标位置所在目标项目的其他文件中的目标关联信息。
在一些可能的实施例中,上述处理器1010还用于执行:对上述目标项目中的多个目标文件进行解析,得到上述多个目标文件各自对应的目标代码结构信息;从上述多个目标文件各自对应的目标代码结构信息中提取多个目标节点各自对应的目标节点信息以及各上述目标节点之间的目标关系信息;根据上述多个目标节点各自对应的目标节点信息以及各上述目标节点之间的目标关系信息构建上述多个目标节点各自对应的目标索引数据;将上述多个目标节点各自对应的目标索引数据存储在上述索引数据库中。
在一些可能的实施例中,上述处理器1010执行上述将上述多个目标节点各自对应的目标索引数据存储在索引数据库中时,具体用于执行:将多个目标节点各自对应的目标索引数据转换为lsif格式,得到多个目标节点各自对应的lsif索引数据;将多个目标节点各自对应的lsif索引数据存储在索引数据库中。
在一些可能的实施例中,上述目标节点信息包括上述目标节点对应的目标节点类型、目标代码片段、目标节点位置以及目标节点标识;上述目标节点的作用不同,上述目标节点对应的目标节点类型不同;上述目标关系信息包括上述目标节点之间的目标关系对应的目标关系类型和目标关系描述信息。
本申请实施例还提供了一种计算机存储介质,该计算机存储介质中存储有指令,当其在计算机或处理器上运行时,使得计算机或处理器执行上述任一个方法中的一个或多个步骤。上述代码生成装置的各组成模块如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述存储介质中。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。上述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行上述计算机程序指令时,全部或部分地产生按照本申请实施例上述的流程或功能。上述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。上述计算机指令可以存储在计算机可读存储介质中,或者通过上述计算机可读存储介质进行传输。上述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。上述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。上述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如,固态硬盘(solid state disk,SSD))等。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,该程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可存储程序代码的介质。在不冲突的情况下,本实施例和实施方案中的技术特征可以任意组合。
以上上述的实施例仅仅是本申请的优选实施例方式进行描述,并非对本申请的范围进行限定,在不脱离本申请的设计精神的前提下,本领域普通技术人员对本申请的技术方案作出的各种变形及改进,均应落入本申请的权利要求书确定的保护范围内。

Claims (10)

1.一种代码生成方法,其特征在于,包括:
获取编辑器中的光标信息;所述光标信息包括光标位置;
根据所述光标信息在索引数据库中进行检索,得到所述光标位置所在的当前文件中的目标相关代码信息和所述光标位置所在目标项目的其他文件中的目标关联信息;所述索引数据库包括所述目标项目中各目标文件对应的目标索引数据;所述目标索引数据基于所述目标文件对应的目标节点的目标节点信息以及各所述目标节点之间的目标关系信息构建得到;
将所述光标信息、所述目标相关代码信息以及所述目标关联信息输入目标大模型,生成所述光标位置信息对应的目标推荐代码信息。
2.根据权利要求1所述的方法,其特征在于,所述根据所述光标信息在索引数据库中进行检索,得到所述光标位置所在的当前文件中的目标相关代码信息和所述光标位置所在目标项目的其他文件中的目标关联信息,包括:
根据所述光标位置在索引数据库中进行检索,得到所述光标位置对应的当前文件节点信息和当前函数节点信息;
根据所述当前文件节点信息在所述索引数据库中进行检索,得到所述当前文件节点信息在所述目标项目的其他文件中对应的其他引入信息;
根据所述当前函数节点信息在所述索引数据库中进行检索,得到所述当前函数节点信息在所述当前文件节点信息中对应的当前变量引用信息和在所述其他文件中对应的其他变量引用信息;
根据所述当前函数节点信息和所述当前变量引用信息确定所述光标位置所在的当前文件中的目标相关代码信息;
根据所述其他引入信息和所述其他变量引用信息确定所述光标位置所在所述其他文件中的目标关联信息。
3.根据权利要求2所述的方法,其特征在于,所述根据所述光标信息在索引数据库中进行检索,得到所述光标位置所在的当前文件中的目标相关代码信息和所述光标位置所在目标项目的其他文件中的目标关联信息之后,所述方法还包括:
在所述目标相关代码信息和所述目标关联信息对应的目标代码总量小于或等于目标阈值的情况下,根据所述当前函数节点信息在所述索引数据库中进行检索,得到所述当前函数节点信息对应的函数调用关系信息;
将所述光标信息、所述目标相关代码信息、所述目标关联信息以及所述函数调用关系信息输入目标大模型,生成所述光标位置信息对应的目标推荐代码信息;
在所述目标相关代码信息和所述目标关联信息对应的目标代码总量大于所述目标阈值的情况下,执行所述将所述光标信息、所述目标相关代码信息以及所述目标关联信息输入目标大模型,生成所述光标位置信息对应的目标推荐代码信息的步骤;所述目标阈值小于所述目标大模型的输入长度阈值。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述将所述光标信息、所述目标相关代码信息以及所述目标关联信息输入目标大模型,生成所述光标位置信息对应的目标推荐代码信息,包括:
将所述光标信息、所述目标相关代码信息以及所述目标关联信息输入目标大模型,根据所述光标位置确定待推荐代码长度类型,并根据所述待推荐代码长度类型、所述光标信息、所述目标相关代码信息以及所述目标关联信息生成所述光标位置信息对应的目标推荐代码信息。
5.根据权利要求4所述的方法,其特征在于,所述根据所述光标位置确定待推荐代码长度类型,包括:
在所述光标位置处于对应当前函数体的第一行或最后一行或所述光标位置后对应的代码信息为空的情况下,确定所述光标位置对应的待推荐代码长度类型为由多行代码组成的代码段;
在所述光标位置不处于所述当前函数体的第一行和最后一行且所述光标位置后对应的代码信息不为空的情况下,确定所述光标位置对应的待推荐代码长度类型为单行。
6.根据权利要求1所述的方法,其特征在于,所述根据所述光标信息在索引数据库中进行检索,得到所述光标位置所在的当前文件中的目标相关代码信息和所述光标位置所在目标项目的其他文件中的目标关联信息,包括:
在所述光标位置不位于当前文件的任意函数范围内或只位于所述当前文件的类函数范围内或不位于所述当前文件中的任意子元素内的情况下,根据所述当前文件对应的函数信息集以及所述光标位置确定所述光标信息对应的目标相关代码信息;和/或,在所述当前文件为指定语言类文件的情况下,将所述当前文件中光标位置对应预设上下文行数的代码信息确定为所述光标信息对应的目标相关代码信息;
根据所述目标相关代码信息在索引数据库中进行检索,得到所述光标位置所在目标项目的其他文件中的目标关联信息。
7.如根据权利要求1所述的方法,其特征在于,所述方法还包括:
对所述目标项目中的多个目标文件进行解析,得到所述多个目标文件各自对应的目标代码结构信息;
从所述多个目标文件各自对应的目标代码结构信息中提取多个目标节点各自对应的目标节点信息以及各所述目标节点之间的目标关系信息;
根据所述多个目标节点各自对应的目标节点信息以及各所述目标节点之间的目标关系信息构建所述多个目标节点各自对应的目标索引数据;
将所述多个目标节点各自对应的目标索引数据存储在所述索引数据库中。
8.一种代码生成装置,其特征在于,所述代码生成装置包括:
获取模块,用于获取编辑器中的光标信息;所述光标信息包括光标位置;
第一信息检索模块,用于根据所述光标信息在索引数据库中进行检索,得到所述光标位置所在的当前文件中的目标相关代码信息和所述光标位置所在目标项目的其他文件中的目标关联信息;所述索引数据库包括所述目标项目中各目标文件对应的目标索引数据;所述目标索引数据基于所述目标文件对应的目标节点的目标节点信息以及各所述目标节点之间的目标关系信息构建得到;
第一代码生成模块,用于将所述光标信息、所述目标相关代码信息以及所述目标关联信息输入目标大模型,生成所述光标位置信息对应的目标推荐代码信息。
9.一种电子设备,其特征在于,包括:处理器和存储器;其中,
所述处理器与所述存储器相连;所述存储器,用于存储可执行程序代码;
所述处理器通过读取所述存储器中存储的可执行程序代码来运行与所述可执行程序代码对应的程序,以用于执行如权利要求1-7任一项所述的方法步骤。
10.一种计算机存储介质,其特征在于,所述计算机存储介质存储有多条指令,所述指令适于由处理器加载并执行如权利要求1-7任一项所述的方法步骤。
CN202411775470.5A 2024-12-04 2024-12-04 代码生成方法、装置、设备及介质 Active CN119248239B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202411775470.5A CN119248239B (zh) 2024-12-04 2024-12-04 代码生成方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202411775470.5A CN119248239B (zh) 2024-12-04 2024-12-04 代码生成方法、装置、设备及介质

Publications (2)

Publication Number Publication Date
CN119248239A true CN119248239A (zh) 2025-01-03
CN119248239B CN119248239B (zh) 2025-05-16

Family

ID=94022754

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202411775470.5A Active CN119248239B (zh) 2024-12-04 2024-12-04 代码生成方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN119248239B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230418565A1 (en) * 2022-06-22 2023-12-28 Amazon Technologies, Inc. Validating and providing proactively generated code suggestions
CN118092923A (zh) * 2022-11-15 2024-05-28 华为云计算技术有限公司 基于云服务的代码生成方法及装置
CN118444895A (zh) * 2024-04-24 2024-08-06 阿里巴巴(中国)有限公司 代码提示方法
CN118673212A (zh) * 2024-06-19 2024-09-20 北京百度网讯科技有限公司 代码推荐方法、装置、电子设备及存储介质

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230418565A1 (en) * 2022-06-22 2023-12-28 Amazon Technologies, Inc. Validating and providing proactively generated code suggestions
CN118092923A (zh) * 2022-11-15 2024-05-28 华为云计算技术有限公司 基于云服务的代码生成方法及装置
CN118444895A (zh) * 2024-04-24 2024-08-06 阿里巴巴(中国)有限公司 代码提示方法
CN118673212A (zh) * 2024-06-19 2024-09-20 北京百度网讯科技有限公司 代码推荐方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
CN119248239B (zh) 2025-05-16

Similar Documents

Publication Publication Date Title
US10725836B2 (en) Intent-based organisation of APIs
CN113900958B (zh) 测试用例脚本的生成方法、系统、介质及电子设备
US8667456B1 (en) Cloud-based indexing for integrated development environments
US10191946B2 (en) Answering natural language table queries through semantic table representation
CN111736840A (zh) 小程序应用的编译方法、运行方法、存储介质及电子设备
CN110688307B (zh) JavaScript代码检测方法、装置、设备和存储介质
US20220414463A1 (en) Automated troubleshooter
CN112732254B (zh) 网页开发方法、装置、计算机设备和存储介质
CN111507086A (zh) 本地化应用程序中翻译文本位置的自动发现
CN111539200B (zh) 一种生成富文本的方法、装置、介质和电子设备
KR20230148561A (ko) 문서 요약 방법 및 시스템
CN118245050B (zh) 前端框架组件自动转换方法、系统、电子设备及存储介质
CN117389538A (zh) 页面组件内容开发方法、装置、设备以及存储介质
CN119149757B (zh) 代码图谱构建方法、装置、电子设备及计算机存储介质
CN111898762B (zh) 深度学习模型目录创建
CN119646016A (zh) 数据查询方法、装置、电子设备、介质及程序产品
CN119248239B (zh) 代码生成方法、装置、设备及介质
CN117806601A (zh) 代码文本处理方法、代码补充方法以及计算设备
CN119248243B (zh) 代码推荐方法、装置、设备及介质
EP3255558A1 (en) Syntax analyzing device, learning device, machine translation device and recording medium
US20250224973A1 (en) Solution Composition And Decomposition
CN120030083B (zh) 基于图数据库gql语法的文档可视化方法及装置
CN119621587A (zh) 生成方法、测试方法、电子设备、存储介质及程序产品
Zeng et al. NKIMathE–a multi-purpose knowledge management environment for mathematical concepts
CN119576339A (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