1. 为什么 AI 代码审查总在“读全仓库”先说一个我踩过的坑给一个 1800 文件的 Go 单体仓库做 PR 审查AI 助手把整个仓库的 import 链全读了一遍一次审查烧掉 90 多万 Token最后给出的结论还是“建议检查调用方是否兼容”——它压根没找到真正的调用方在哪。这不是模型不行是上下文给错了。传统做法是把代码切块、embedding、塞进向量库检索时按语义相似度召回。问题是代码不是散文func (s *OrderService) Cancel()和func (s *UserService) Cancel()语义几乎一样向量检索分不清谁调用了谁。结果就是该读的没读到不该读的召回一堆Token 全烧在无关文件上。Code Review Graph 这个思路解决的就是这件事。它用 Tree-sitter 把代码解析成 AST抽出函数、类、导入这些节点再抽出调用、继承、测试覆盖这些边存成本地 SQLite 知识图谱最后通过 MCP 协议暴露给 AI 助手。审查时不再“读全仓库”而是查图这次改动影响了哪些函数、哪些模块、哪些测试只把这些文件喂给模型。一句话概括把“全量读代码”变成“按图索骥”。适合谁适合已经在用 Claude Code、Cursor、Copilot 做审查、且仓库规模超过几百文件的团队小项目用不上overhead 比收益大。下面我按可复制的路径走一遍装工具、建图、接 MCP、验证请求、排错。技术部分占大头拿 Key 的部分放在前面快速带过。2. 前置准备TaoToken 与本地环境Code Review Graph 本身是本地工具不依赖任何在线服务。但你要让 AI 助手真正调用图谱查询接口需要一个能跑 MCP 的模型通道。我这边用的是 TaoToken 的 API 通道原因是它兼容 Anthropic 和 OpenAI 两种协议格式Claude Code 和 Cursor 都能直接接不用为每个平台改一遍配置。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后在控制台生成 API Key。API 基址是 https://taotoken.net/api 注意这个地址不带任何查询参数配置时直接填。本地环境要求不高Python 3.10 以上我用的是 3.11推荐装 uv包管理比 pip 快很多Git 仓库增量更新依赖 commit hook一个支持 MCP 的 AI 助手我用 Claude Code 做验证先把 Python 环境确认一下python3 --version # Python 3.11.6 # 装 uv如果还没有 curl -LsSf https://astral.sh/uv/install.sh | sh uv --version # uv 0.4.18TaoToken 的 Key 拿到后先存到环境变量后面 MCP 配置会引用它export TAOTOKEN_API_KEYsk-你的key echo $TAOTOKEN_API_KEY | head -c 8 # sk-xxxxx注意Key 不要写进仓库里的任何配置文件用环境变量或本地 shell profile 引用。MCP 配置里用${TAOTOKEN_API_KEY}占位。3. 可复制配置Tree-sitter 建图 MCP 接入这一节是核心分三步装 code-review-graph、建知识图谱、写 MCP 配置。3.1 安装 code-review-graph三种装法我推荐 pipx隔离环境不污染项目# 方式一pipx推荐 pipx install code-review-graph # 方式二uv tool uv tool install code-review-graph # 方式三pip pip install code-review-graph # 验证 code-review-graph --version # code-review-graph 2.3.6装完先别急着 install 平台先进项目目录建图。3.2 用 Tree-sitter 构建知识图谱cd your-project code-review-graph build首次构建会遍历所有文件用 Tree-sitter 解析成 AST。我拿一个 520 文件的 TypeScript 项目实测首次构建约 11 秒。输出大致是这样[build] scanning 520 files... [build] parsing with tree-sitter (typescript, tsx, javascript) [build] extracted 3841 nodes, 9207 edges [build] writing graph to .code-review-graph/graph.db [build] done in 11.2s图谱落在项目根目录的.code-review-graph/下SQLite 格式。节点类型和边类型可以自己查# 看节点统计 sqlite3 .code-review-graph/graph.db \ SELECT type, COUNT(*) FROM nodes GROUP BY type ORDER BY 2 DESC;输出类似function|2104 class|318 import|892 variable|527边就是调用、继承、测试覆盖这些关系。这一步做完代码结构已经从“文本”变成了“可查询的图”。3.3 配置 MCP 接入先让工具自动检测平台code-review-graph install它会扫描你装了哪些 AI 工具写入对应的 MCP 配置。如果只想配 Claude Codecode-review-graph install --platform claude-code自动写入的配置大概长这样我把它贴出来方便你手动核对{ mcpServers: { code-review-graph: { command: code-review-graph, args: [mcp, serve], env: { CRG_GRAPH_PATH: .code-review-graph/graph.db } } } }如果你用的是 TaoToken 通道跑 Claude Code模型侧的配置单独放在 Claude Code 的设置里指向https://taotoken.net/apiKey 用环境变量注入。两边配置互不干扰MCP 管图谱查询模型通道管推理。3.4 增量更新配置增量更新靠 Git hook 触发。装 hookcode-review-graph install --hooks之后每次 commit工具会对比文件 SHA-256只重新解析变更文件及其受影响节点。我实测一个 2900 文件的项目增量更新 1.7 秒左右。手动触发也行code-review-graph build --incremental4. 验证请求让 AI 只读“爆炸半径”内的文件配置完得验证它真的在工作不然你以为接上了实际 AI 还在读全仓库。4.1 在 AI 助手里触发图谱查询打开 Claude Code进项目目录直接说Build the code review graph for this project, then review the changes in the last commit.助手会通过 MCP 调用图谱接口。你可以在 Claude Code 的 MCP 日志里看到实际调用[mcp] code-review-graph.blast_radius({ file: src/order/service.ts }) [mcp] - 14 related files, 3 test files, 2 downstream modules关键就在这 14 个文件。传统做法会把 520 个文件全塞进去现在只读 14 个。4.2 手动验证爆炸半径不想开 AI 助手也能验证。直接查图code-review-graph query blast-radius \ --file src/order/service.ts \ --depth 2输出Direct callers (depth 1): src/api/order-controller.ts:handleCancel src/job/order-timeout.ts:run Downstream (depth 2): src/order/repository.ts src/notify/order-notify.ts Related tests: tests/order/service.test.ts tests/api/order-controller.test.ts这就是这次改动的“爆炸半径”。AI 审查时只需要这些文件其余 500 多个文件跟这次改动没关系。4.3 对比 Token 消耗验证效果最直接的办法是对比。我在同一个 PR 上跑了两次方式输入 Token相关文件数审查结论质量全量读仓库412,000520泛泛而谈漏掉调用方图谱查询5,80014精准指出 3 处调用方不兼容降低约 71 倍。官方 benchmark 中位数是 82 倍我这个项目结构比较扁平71 倍已经符合预期。注意 528 倍那种是极端单案例别拿它当基准。4.4 语义搜索补充结构化调用关系之外还能做语义搜索。比如找“认证逻辑”code-review-graph query semantic \ --query authentication token validation \ --top-k 10即使函数名里没有 auth 关键词embedding 相似度也能召回相关代码。这块和爆炸半径互补一个管结构一个管语义。5. 本篇常见错排查5.1 图谱构建报 Tree-sitter 解析失败现象build时某些文件报parse error节点数为 0。原因通常是语言不在支持列表或 Tree-sitter 语法包版本不匹配。先确认语言code-review-graph languages --list | grep -i your-lang不在列表就自定义。项目根目录建languages.toml[custom.myLang] extensions [.mylang] tree_sitter_package tree-sitter-mylang function_node_types [function_definition] class_node_types [class_definition] call_node_types [call_expression]改完重新 build。如果还是失败检查tree_sitter_language_pack版本pip show tree_sitter_language_pack5.2 MCP 连不上AI 助手报 tool not found先确认 MCP 服务能独立启动code-review-graph mcp serve # 应该阻塞等待不报错如果这里就报错多半是CRG_GRAPH_PATH指错了。确认.code-review-graph/graph.db存在ls -la .code-review-graph/如果服务能起但助手连不上检查助手的 MCP 配置文件路径对不对。Claude Code 的配置在~/.claude/下Cursor 在项目.cursor/下。改完配置要重启助手进程热加载不一定生效。5.3 增量更新不触发commit 后图谱没更新通常是 hook 没装上。检查ls -la .git/hooks/pre-commit没有就重装code-review-graph install --hooks --force还有一种情况文件在.gitignore里工具默认跳过。如果确实需要索引被忽略的文件加参数code-review-graph build --include-ignored5.4 爆炸半径返回空查某个文件返回 0 个相关文件两种可能一是这个文件确实是叶子节点没人调用二是图谱没建全。先确认文件在不在图里sqlite3 .code-review-graph/graph.db \ SELECT COUNT(*) FROM nodes WHERE file_path LIKE %your-file%;返回 0 说明没索引到重新 build。返回大于 0 但爆炸半径为空那就是真的没调用方属于正常结果。5.5 Token 没降下来接了图谱但 Token 还是很高检查 AI 助手是不是真的走了 MCP。看日志里有没有code-review-graph.blast_radius调用。如果没有说明助手还在直接读文件MCP 没生效。回到 5.2 排查连接。6. 把图谱接进你的审查流程到这一步图谱建好了MCP 通了爆炸半径验证过了。接下来是把它固化进日常流程。本地开发时commit hook 自动增量更新AI 助手审查时自动查图你什么都不用管。CI 里可以加一个步骤在 PR 阶段跑风险评分code-review-graph query risk-score --base main --head HEAD输出高风险、中风险、低风险三档高风险 PR 可以配fail-on-risk阻止合并。如果你还没定模型通道Claude Code 接 TaoToken 的配置在 https://taotoken.net/api-keys 生成 Key接入文档在 https://taotoken.net/doc 。长期跑编码 Agent 的话Coding Plan 比按量计费划算入口在 https://taotoken.net/coding-plan 。想先试试模型对话效果直接开 https://taotoken.net/chat 就能用。最后说个实用技巧图谱不是建一次就完事。项目结构大改比如拆模块、换框架之后建议全量重建一次别只靠增量否则残留的旧边会污染爆炸半径结果。重建命令就是code-review-graph build --force几分钟的事比排查错误上下文省心得多。