CodexGraph: Bridging Large Language Models and Code Repositories via Code Graph Databases

📄 arXiv: 2408.03910v2 📥 PDF

作者: Xiangyan Liu, Bo Lan, Zhiyuan Hu, Yang Liu, Zhicheng Zhang, Fei Wang, Michael Shieh, Wenmeng Zhou

分类: cs.SE, cs.AI, cs.CL

发布日期: 2024-08-07 (更新: 2024-08-11)

备注: work in progress

🔗 代码/项目: GITHUB


💡 一句话要点

CodexGraph:利用代码图数据库连接大语言模型与代码仓库

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 代码图数据库 大型语言模型 代码仓库 代码检索 软件工程

📋 核心要点

  1. 现有方法在处理大型代码仓库时,基于相似性的检索召回率低,手动工具和API通用性差,限制了LLM在软件工程中的应用。
  2. CodexGraph通过构建代码图数据库,并允许LLM代理使用图查询语言进行精确的代码结构感知的上下文检索和导航,提升LLM的理解能力。
  3. 实验结果表明,CodexGraph在CrossCodeEval、SWE-bench和EvoCodeBench等基准测试以及实际应用中表现出竞争力和潜力。

📝 摘要(中文)

大型语言模型(LLM)在诸如HumanEval和MBPP等独立代码任务中表现出色,但在处理整个代码仓库时却面临挑战。为了解决这个问题,研究人员开始探索增强LLM与代码库在仓库规模上的交互。目前的解决方案依赖于基于相似性的检索或手动工具和API,但都存在明显的缺点。基于相似性的检索在复杂任务中召回率通常较低,而手动工具和API通常是特定于任务的,需要专家知识,从而降低了它们在各种代码任务和实际应用中的通用性。为了缓解这些限制,我们引入了CodexGraph,一个将LLM代理与从代码仓库中提取的图数据库接口集成的系统。通过利用图数据库的结构属性和图查询语言的灵活性,CodexGraph使LLM代理能够构建和执行查询,从而实现精确的、代码结构感知的上下文检索和代码导航。我们使用三个基准测试评估CodexGraph:CrossCodeEval、SWE-bench和EvoCodeBench。此外,我们还开发了五个真实的编码应用程序。凭借统一的图数据库模式,CodexGraph在学术和实际环境中都表现出竞争力和潜力,展示了其在软件工程中的多功能性和有效性。我们的应用程序演示:https://github.com/modelscope/modelscope-agent/tree/master/apps/codexgraph_agent。

🔬 方法详解

问题定义:现有方法在处理大型代码仓库时,面临着召回率低和通用性差的问题。基于相似性的检索无法准确捕捉代码结构信息,导致在复杂任务中表现不佳。手动工具和API通常是为特定任务设计的,需要专业知识才能使用,难以推广到不同的代码任务和实际应用中。

核心思路:CodexGraph的核心思路是将代码仓库转换为图数据库,利用图数据库的结构化信息和图查询语言的灵活性,使LLM代理能够进行精确的代码结构感知的上下文检索和导航。通过这种方式,LLM可以更好地理解代码之间的关系,从而提高其在代码相关任务中的性能。

技术框架:CodexGraph的整体架构包括以下几个主要模块:代码仓库解析器,用于将代码仓库转换为图数据库;图数据库接口,用于提供图查询语言的访问接口;LLM代理,用于构建和执行图查询;以及评估模块,用于评估CodexGraph的性能。整个流程是:首先,代码仓库被解析并存储为图数据库。然后,LLM代理根据任务需求构建图查询,并通过图数据库接口执行查询。最后,评估模块根据查询结果评估CodexGraph的性能。

关键创新:CodexGraph最重要的技术创新点在于它将代码仓库转换为图数据库,并允许LLM代理使用图查询语言进行代码结构感知的上下文检索。与现有方法相比,CodexGraph能够更准确地捕捉代码之间的关系,从而提高LLM在代码相关任务中的性能。现有方法通常依赖于基于相似性的检索,无法准确捕捉代码结构信息。

关键设计:CodexGraph的关键设计包括图数据库的schema设计、图查询语言的选择和LLM代理的构建。图数据库的schema需要能够准确地表示代码仓库中的各种实体和关系。图查询语言需要足够灵活,以便LLM代理能够构建各种复杂的查询。LLM代理需要能够理解任务需求,并将其转换为图查询。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

CodexGraph在CrossCodeEval、SWE-bench和EvoCodeBench等基准测试中表现出竞争力和潜力。此外,在五个真实的编码应用程序中,CodexGraph也展示了其多功能性和有效性。具体性能数据未知,但论文强调了其在学术和实际环境中的优越性。

🎯 应用场景

CodexGraph具有广泛的应用前景,可以应用于代码搜索、代码理解、代码生成、代码重构、缺陷检测等软件工程领域。它可以帮助开发人员更高效地理解和修改代码,提高软件开发的效率和质量。此外,CodexGraph还可以用于自动化代码审查和代码安全分析,从而提高软件的安全性。

📄 摘要(原文)

Large Language Models (LLMs) excel in stand-alone code tasks like HumanEval and MBPP, but struggle with handling entire code repositories. This challenge has prompted research on enhancing LLM-codebase interaction at a repository scale. Current solutions rely on similarity-based retrieval or manual tools and APIs, each with notable drawbacks. Similarity-based retrieval often has low recall in complex tasks, while manual tools and APIs are typically task-specific and require expert knowledge, reducing their generalizability across diverse code tasks and real-world applications. To mitigate these limitations, we introduce CodexGraph, a system that integrates LLM agents with graph database interfaces extracted from code repositories. By leveraging the structural properties of graph databases and the flexibility of the graph query language, CodexGraph enables the LLM agent to construct and execute queries, allowing for precise, code structure-aware context retrieval and code navigation. We assess CodexGraph using three benchmarks: CrossCodeEval, SWE-bench, and EvoCodeBench. Additionally, we develop five real-world coding applications. With a unified graph database schema, CodexGraph demonstrates competitive performance and potential in both academic and real-world environments, showcasing its versatility and efficacy in software engineering. Our application demo: https://github.com/modelscope/modelscope-agent/tree/master/apps/codexgraph_agent.