Code-Graph-RAG 快速上手:5 分钟完成多语言代码库的知识图谱构建、查询与导出
Code-Graph-RAG 快速上手5 分钟完成多语言代码库的知识图谱构建、查询与导出【免费下载链接】code-graph-ragThe ultimate RAG for your monorepo. Query, understand, and edit multi-language codebases with the power of AI and knowledge graphs项目地址: https://gitcode.com/GitHub_Trending/co/code-graph-rag本文是 Code-Graph-RAG 的 Quick Start 实战指南。你将学会用cgr start将多语言代码库解析为共享知识图谱、用自然语言与图谱交互式对话以及将图谱导出为 JSON 并用 Python SDK 做离线分析。读完即可复现从零到可查询的完整工作流并理解每个关键参数--update-graph、--clean、--batch-size、模型指定等背后的实现逻辑。概览一图读懂三步流程Code-Graph-RAG 的快速入门分为三个步骤解析入库Parse→ 图谱查询Query→ 数据导出Export。三者既可以是连续流水线也可以独立使用解析阶段将仓库源代码解析并写入共享的 Memgraph 知识图谱查询阶段基于该图谱回答自然语言问题导出阶段将图谱序列化为 JSON 文件供 Python SDK 离线分析。整个过程的目标是Get from zero to querying your codebase in 5 minutes。Step 1解析代码库并写入知识图谱基本命令将任意多语言仓库解析并摄入知识图谱使用一条命令即可完成cgr start --repo-path /path/to/repo1 --update-graph其中--repo-path指定要解析的仓库根目录--update-graph指示 CLI 在启动交互界面之前先执行图谱更新解析 摄入。从 CLI 入口实现codebase_rag/cli.py可以看到start命令会先校验仓库路径存在且为目录再自动推导项目名derive_project_name随后在--update-graph分支中调用_run_graph_sync完成图谱同步。解析时系统会自动加载全部语言解析器load_parsers()按文件扩展名自动检测并处理所有受支持语言的源文件无需手动指定语言。仓库根目录下如果有.cgrignore文件其排除规则会在同步时自动生效load_ignore_patterns(repo)。多仓库共享一个图谱Code-Graph-RAG 的关键设计是图谱在所有项目之间共享添加新项目不会影响已有项目cgr start --repo-path /path/to/repo2 --update-graph cgr start --repo-path /path/to/repo3 --update-graph每个仓库以独立项目的身份写入同一个 Memgraph 实例同步其中一个项目时其余项目的数据保持原样。这也为跨项目查询如查找多个服务间的调用关系提供了基础。从空图谱重新开始--cleancgr start --repo-path /path/to/repo1 --update-graph --clean--clean会删除共享图谱中的每一个项目而不仅仅是--repo-path指定的那一个。当图谱中还包含其他项目时CLI 会请求确认_confirm_destructive_clean在脚本或 CI 中可通过--yes-y跳过确认提示。清理动作在源码中做了三件事codebase_rag/cli.pyingestor.clean_database()清空图谱数据库_delete_hash_cache(repo)删除仓库内的哈希缓存与解析器指纹缓存.cgr_hash_cache、目录 mtime 记录等确保重新解析时不会误判已同步clear_all_embeddings()清空所有向量索引避免被回收的节点 ID 残留向量干扰重建后的图谱。⚠️ 注意--clean是破坏性操作且作用于整个共享图谱执行前请确认没有需要保留的项目数据。控制写入批量大小--batch-sizecgr start --repo-path /path/to/repo --update-graph --batch-size 5000--batch-size控制 Memgraph 批量写入flushing的条数。该参数在 CLI 中声明为min1的正整数codebase_rag/cli.py实际生效值由settings.resolve_batch_size(batch_size)解析若未显式传入则回退到配置项MEMGRAPH_BATCH_SIZE默认值1000见 codebase_rag/config.py且会拒绝小于 1 的值。对超大型仓库适当调大批量可减少网络往返、显著加快写入对小仓库或内存受限环境减小批量则更稳妥。其他实用的同步相关参数start命令还提供若干与图谱同步相关的参数可在cgr start --help中查看完整列表参数作用--exclude PATTERN排除匹配的文件/目录模式可与.cgrignore合并--interactive-setup交互式选择需要反排除unignore的目录--project-name NAME手动指定项目名默认由仓库路径推导--no-embeddings跳过向量嵌入计算只构建结构图谱--capture SPEC指定额外的捕获模式如动态调用等Step 2交互式查询代码库RAG CLI启动交互式 CLI解析完成后不带--update-graph启动即可直接进入交互式查询会话cgr start --repo-path /path/to/your/repoCLI 会先展示当前配置摘要仓库路径、模型、图谱状态等随后进入问答界面。启动时若检测到图谱有增量变化还会在进入会话前自动触发一次同步pre_chat_sync保证查询结果与磁盘代码一致。指定自定义模型Code-Graph-RAG 使用两个角色分工的模型--orchestrator负责整体规划与自然语言理解--cypher负责将问题转换为图查询语言Cypher。二者可分别指定不同提供商与模型模型字符串格式为provider:modelcgr start --repo-path /path/to/your/repo \ --orchestrator ollama:qwen2.5-coder \ --cypher ollama:qwen2.5-codercgr start --repo-path /path/to/your/repo \ --orchestrator google:gemini-3.6-flash \ --cypher google:gemini-3.5-flash-lite模型字符串的解析逻辑位于 codebase_rag/config.py带:时按provider:model拆分provider 会统一转小写不带:时默认按 ollama 处理。启动前 CLI 会先做模型早期校验validate_models_early检查 API Key 是否已配置避免进入会话后才报错。典型查询示例交互会话中可以直接用自然语言提问例如Show me all classes that contain user in their nameFind functions related to database operationsWhat methods does the User class have?Show me functions that handle authenticationList all TypeScript componentsFind Rust structs and their methodsAdd logging to all database connection functionsRefactor the User class to use dependency injection前六条属于检索类问题查类、查函数、查方法、查组件、查结构体后两条是编辑类问题——Code-Graph-RAG 不仅能读代码还能基于图谱上下文执行代码修改。编辑类操作默认需要确认--no-confirm可关闭确认提示修改通过受控的事务/补丁机制落地相关实现见 codebase_rag/editing 目录下的transaction.py、patcher.py。单次查询脚本/CI 场景如果不想进入交互会话可以用-a/--ask-agent执行一次性查询cgr start --repo-path /path/to/your/repo -a Find functions related to database operations配合--output-format json可将结果以 JSON 输出便于脚本化处理注意JSON 输出格式仅在与--ask-agent组合时可用。Step 3导出图谱数据更新图谱时导出将-o/--output与--update-graph组合可在解析入库完成后立即导出cgr start --repo-path /path/to/repo --update-graph -o my_graph.json导出由 codebase_rag/main.py 的export_graph_to_file实现将图谱序列化为 JSON 文件并在终端打印节点数、关系数等统计信息。该导出是纯 JSON 格式与cgr export的--json默认输出一致。导出已有图谱不更新cgr export -o my_graph.jsoncgr export独立于start直接连接 Memgraph 将当前共享图谱整体导出codebase_rag/cli.py同样支持--batch-size控制读取批量。导出的 JSON 包含节点、关系与元数据三部分与codebase_rag/codec/schema.proto中定义的图谱数据模型相对应。用 Python SDK 分析导出数据导出的 JSON 可以通过GraphLoader离线加载无需连接 Memgraph 即可做本地分析from codebase_rag.graph_loader import load_graph graph load_graph(my_graph.json) summary graph.summary() print(fTotal nodes: {summary[total_nodes]}) print(fTotal relationships: {summary[total_relationships]}) functions graph.find_nodes_by_label(Function) for func in functions[:5]: relationships graph.get_relationships_for_node(func.node_id) print(fFunction {func.properties[name]} has {len(relationships)} relationships)这段代码背后对应 codebase_rag/graph_loader.py 的GraphLoader类load_graph(file_path)读取 JSON 并构建内存索引包括按节点 ID、标签、出边、入边的多级索引graph_loader.pysummary()返回GraphSummary包含total_nodes、total_relationships、按标签统计的node_labels和按类型统计的relationship_typesgraph_loader.pyfind_nodes_by_label(Function)基于预构建的标签索引直接返回该标签的全部节点graph_loader.pyget_relationships_for_node(node_id)合并返回节点的出边与入边graph_loader.py与get_outgoing_relationships、get_incoming_relationships配套使用GraphNode是包含node_id、labels、properties三个字段的数据类codebase_rag/models.py因此示例中可通过func.properties[name]访问函数名。此外GraphLoader还提供find_node_by_property(property_name, value)按属性值反查节点、get_node_by_id(node_id)按 ID 取节点适合做更精细的离线分析。下一步学习路径CLI Reference查看全部可用命令与参数Interactive Querying更多自然语言查询示例Code OptimisationAI 驱动的代码改进能力MCP Server与 Claude Code 等 Agent 集成服务端实现见 codebase_rag/mcp/server.pyPython SDK编程式访问图谱与相关 API【免费下载链接】code-graph-ragThe ultimate RAG for your monorepo. Query, understand, and edit multi-language codebases with the power of AI and knowledge graphs项目地址: https://gitcode.com/GitHub_Trending/co/code-graph-rag创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考