跳过正文
  1. 帖子/

Extracting Conceptual Knowledge to Locate Software Issues

·1778 字·4 分钟
露琪亚
作者
露琪亚

论文链接:https://arxiv.org/abs/2509.21427

论文主旨
#

主要研究如何增强LLM的根据bug/issue定位相关文件或代码的能力,提出了一种类似GraphRAG思想的issue localization增强方案。

该论文认为,目前的LLM在代码仓库中定位bug/issue相关代码或函数的能力不足,经常失效。这是因为LLM主要关注具体的文件、代码、函数,缺少了宏观的整体视角。一个业务的具体逻辑经常混杂在复杂的函数内部,又分割在多个不同代码文件之间,LLM只关注具体代码容易忽视业务逻辑之间的联系。

因此,该论文提出了RepoLens框架,先离线构建代码仓库的概念知识库,用于增强LLM定位issue的能力,在LLM需要定位时在线检索知识库,将结果注入定位的prompt中,增强LLM根据bug/issue定位相关代码的能力。

出发点
#

Issue localization: 根据bug/issue描述,自动找出最可能出问题的相关文件或函数。

论文中提到,在真实的大项目中,问题定位很难,主要可以归结为两个现象:

  • concern tangling:业务逻辑相互混杂在同一函数中,单个业务相关的逻辑只占其中一小部分
  • concern scattering:一个业务对应的逻辑分散在多个函数或者文件中 即同一业务相关的逻辑常常碎片化分散在不同的函数或文件中,而同一函数又常常混杂了不同的职责和逻辑,LLM看到的是具体的代码和文件,却不容易看到这些分散的代码实则属于同一业务。

因此,该论文提出一种方法,通过离线构建概念知识库,将代码库中的相关业务逻辑重组为宏观的高层conceptual knowledge,便于LLM进行代码定位。

创新点
#

  • 基于类似GraphRAG的From local to global思想,提出了更加高内聚、低耦合的concern概念,作为代码仓库与具体bug/issue描述的自然语言之间的中间表示层。不同于常规的函数或代码摘要,concern主要是业务逻辑级别的,不局限与任一函数、任一文件,只关注具体语义名词在仓库中的逻辑脉络。通过构建高层语义关注点”concern“,便于检索与bug/issue中描述相关的业务概念,并溯源定位相关的代码和文件
  • 提出了两阶段框架RepoLens,类似GraphRAG的”离线构建知识图谱和社区摘要->检索图谱召回知识进行检索增强生成“。先离线构建代码仓库的conceptual knowledge库,再通过检索召回相关业务逻辑片段,嵌入定位prompt中增强LLM的bug/issue定位能力

方法流程
#

主要分为离线构建与在线检索定位两个阶段,总体流程类似GraphRAG,都存在离线构建知识库,在线检索召回提供可靠依据两阶段,最终也是将召回信息注入prompt实现检索增强。

离线构建

  • Term Extraction:从整个代码仓库中抽取term,即函数或变量名中的group、user、message等名词,这类名词通常是issue描述中常见的业务概念,可以作为连接具体代码实现和Issue中自然语言描述的中间层。
  • Term Explanation:利用LLM对每个term进行语义增强,主要包括拓展并规范term的名称、解释term的含义、总结代码中与term相关的功能语义、抽取相关的代码片段作为依据。
  • Knowledge Base Construction:将上述处理后的term信息组织成结构化的数据,构建一个仓库级的概念知识库。

在线检索定位

  • Bug/Issue Keyword extraction:从issue的标题中提取关键词,重点提取其中的名词。
  • Term Retrieval:通过提取的关键词,在离线构建的知识库中检索相关的term。通过使用n-gram分解,尽可能地召回与issue相关的概念。
  • Concern Clustering:使用层次聚类方法先做预聚类,结合term中属性的向量相似度和函数之间的调用关系,将候选term划分为较小子集;再使用LLM分析其中的功能关联,聚合成高层的concern,并生成concern summary。
  • Concern Ranking:先基于语义向量相似度对concern进行粗筛,选出top-50 concerns,在使用LLM结合issue的标题和内容对concern做精排,最终召回top-10 concerns。
  • Prompt Building:将召回的concerns组织成结构化上下文,注入LLM/Agent的issue localization prompt中。