Graph-Code:用于任意代码库的图谱 RAG 系统
(原文标题:Graph-Code: A Graph-Based RAG System for Any Codebases)(GitHub)
该系统是一个 精确的检索增强生成(RAG)系统,用于分析多语言代码库,基于 Tree-sitter 构建全面的知识图谱,并支持使用自然语言查询代码库结构与关系,还能执行编辑操作。(GitHub)
最新动态(Latest News) (GitHub)
- [NEW] MCP 服务集成:Graph-Code 现在作为 MCP 服务器可与 Claude Code 一起使用!可以直接从 Claude Code 使用自然语言查询和编辑您的代码库。(附链接:Setup Guide)
- 2025/10/21 语义代码搜索:通过 UniXcoder 嵌入新增了基于意图的代码搜索。现在可以通过描述功能(例如 “错误处理函数”、“身份验证代码”)来查找函数,而不是仅仅基于名称精确匹配。(GitHub)
功能(Features) (GitHub)
多语言支持
支持多种主流语言及其结构特性:
| 语言 | 支持状态 | 文件扩展 | 函数 | 类/结构体 | 模块 | 包检测 | 附加功能 | |
|---|---|---|---|---|---|---|---|---|
| C++ | 完全支持 | .cpp/.h/.hpp/.cc/.cxx/.hxx/.hh/.ixx/.cppm/.ccm | ✓ | ✓ | ✓ | ✓ | 构造函数、析构函数、运算符重载、模板、lambda、C++20 模块、命名空间 | |
| Java | 完全支持 | .java | ✓ | ✓ | ✓ | – | 泛型、注解、并发、反射 | |
| JavaScript | 完全支持 | .js/.jsx | ✓ | ✓ | ✓ | – | ES6 模块、CommonJS、原型方法、箭头函数 | |
| Lua | 完全支持 | .lua | – | ✓ | – | – | 全局/局部函数、闭包、协程 | |
| Python | 完全支持 | .py | ✓ | ✓ | ✓ | ✓ | 类型推断、装饰器、嵌套函数 | |
| Rust | 完全支持 | .rs | ✓ | ✓ | ✓ | ✓ | impl 块、关联函数 | |
| TypeScript | 完全支持 | .ts/.tsx | ✓ | ✓ | ✓ | ✓ | 接口、类型别名、枚举 | |
| C# | 开发中 | .cs | ✓ | ✓ | ✓ | – | 类、接口、泛型 | |
| Go | 开发中 | .go | ✓ | ✓ | ✓ | – | 方法、类型声明 | |
| PHP | 开发中 | .php | ✓ | ✓ | ✓ | – | 类、函数、命名空间 | |
| Scala | 开发中 | .scala/.sc | ✓ | ✓ | ✓ | – | case 类、对象、特质 | (GitHub) |
其他关键特性:
- 使用 Tree-sitter 进行健壮且与语言无关的 AST 解析
- 使用 Memgraph 存储代码结构为互联图谱
- 支持 自然语言查询
- 支持各种 AI 模型进行 自然语言 → Cypher 生成(包括 Google Gemini、本地 Ollama、OpenAI)
- 获取实际代码片段
- 高级文件编辑(基于 AST 的精确替换 + 可视化 diff)
- 终端命令执行、交互式代码优化、依赖分析等功能(GitHub)
架构(Architecture) (GitHub)
系统主要由两部分组成:
- 多语言解析器:基于 Tree-sitter 的系统,用于分析代码库并将结果导入 Memgraph
- RAG 系统(
codebase_rag/):用于交互式查询存储的知识图谱(GitHub)
先决条件(Prerequisites) (GitHub)
要构建和运行本项目,您需要:
- Python 3.12+
- Docker + Docker Compose(用于 Memgraph)
- cmake(构建 pymgclient 依赖项)
- ripgrep (
rg)(用于终端文本搜索) - 对于云模型:Google Gemini API key
- 对于本地模型:运行中的 Ollama
uv包管理器(GitHub)
安装(Installation) (GitHub)
git clone https://github.com/vitali87/code-graph-rag.git
cd code-graph-rag
# 安装依赖(基本 Python 支持)
uv sync
# 安装完整多语言支持
uv sync --extra treesitter-full
# 开发环境(含测试与 pre-commit 钩子)
make dev
随后按 .env.example 复制并设置环境变量。支持多种提供者和模型配置(OpenAI/Gemini/Ollama 混合)。(GitHub)
启动 Memgraph 数据库:
docker-compose up -d
(GitHub)
使用方法(Usage) (GitHub)
Graph-Code 系统有五种主要运行模式:
- 解析并导入:构建知识图谱
- 交互式查询:用自然语言问问题
- 导出与分析:将图导出用于程序化分析
- AI 优化:获取 AI 驱动的优化建议
- 编辑:精确代码替换与修改(GitHub)
示例工作流:
# 第一步:解析代码库
cgr start --repo-path /path/to/repo --update-graph --clean
# 第二步:交互式查询
cgr start --repo-path /path/to/repo
支持实时更新、导出 JSON、优化建议等高级功能。示例语句包括列出类、查找函数引用、优化代码等。(GitHub)
MCP 服务(Claude Code 集成) (GitHub)
Graph-Code 可以作为 MCP 服务器提供服务,与 Claude Code 和其他 MCP 客户端无缝集成。例如:
claude mcp add --transport stdio graph-code \
--env TARGET_REPO_PATH=/absolute/path/to/your/project \
--env CYPHER_PROVIDER=openai \
--env CYPHER_MODEL=gpt-4o \
--env CYPHER_API_KEY=your-api-key \
-- uv run --directory /path/to/code-graph-rag graph-code mcp-server
提供诸如索引仓库、查询、获取代码片段、外科式代码替换等工具。(GitHub)
图谱模式(Graph Schema) (GitHub)
节点类型(Node Types)
常见节点类型包括:
- Project
{name: string} - Package
{qualified_name, name, path} - Folder
{path, name} - File、Module
- Class、Function、Method
- Interface、Enum、Type、Union 等(GitHub)
语言特定映射(Language Mappings)
定义了不同语言的 AST 节点映射规则,如 C++、Java、Python、TypeScript 等。(GitHub)
关系类型(Relationships)
例如:
- Project/Package/Folder CONTAINS Package/Folder/File/Module
- Module DEFINES Class/Function
- Function/Method CALLS Function/Method
- Class INHERITS Class 或 IMPLEMENTS Interface
- Project DEPENDS_ON_EXTERNAL ExternalPackage 等(GitHub)
配置(Configuration) (GitHub)
通过 .env 配置指定:
ORCHESTRATOR_PROVIDER,ORCHESTRATOR_MODEL,ORCHESTRATOR_API_KEYCYPHER_PROVIDER,CYPHER_MODEL,CYPHER_API_KEY- Memgraph 相关(主机、端口、批处理大小等)
TARGET_REPO_PATH默认仓库路径- 本地模型回退端点等(GitHub)
关键依赖项(Key Dependencies) (GitHub)
系统使用 Python 库:
loguru,mcp,pydantic-ai,pydantic-settings,pymgclient,python-dotenvtree-sitter及其语言绑定- 终端 UI 库
rich,prompt-toolkit等(GitHub)
贡献(Contributing) (GitHub)
详细贡献指南参见 CONTRIBUTING.md。欢迎优先 PR 和 TODO 议题。(GitHub)
参考资料
- Graph-Code:用于任意代码库的图谱 RAG 系统
- 参考资料
