AI 编程工具普及后,「搜索代码」这件事变得更快了,但一个更深的问题没有被解决:AI 在写代码时,看不到它的改动会影响哪里。
这不是智能的问题,是信息的问题。即使是 Claude 3.7 Sonnet,如果你没有告诉它 process_payment() 被 23 个地方调用,它也不会知道。而「告诉它」这件事,靠人工贴代码效率极低,而且容易漏。
图谱工具解决的就是这个问题:在写代码的每一步,给 AI 精确的结构上下文。
三个工具,三类场景
manon_search:不知道关键词时
传统代码搜索(Grep)的前提是你知道关键词。如果你只是知道「我想找处理用户权限的代码」,但不知道函数名,Grep 帮不上忙。
manon_search 把自然语言转为向量嵌入,检索最语义相关的实体,然后沿图谱边展开关联。一次查询返回的不只是匹配的文件,而是与你的问题结构相关的整个代码区域。
典型使用:
- 「找一下处理 API 限流的逻辑」
- 「这个项目里哪里做了缓存?」
- 「找到负责数据库连接池管理的代码」
manon_graph:知道函数名,想看影响范围
知道具体函数名时,manon_graph 做有向图遍历:
- callers(上游):谁调用了这个函数?改了它会影响哪里?
- callees(下游):这个函数调用了什么?它的行为依赖哪些模块?
- both(双向):完整的上下游视图
深度可配置。depth=1 只看直接调用者,depth=2 看调用者的调用者,以此类推。大多数场景 depth=2 已经足够。
典型使用场景:改一个函数之前,先跑 manon_graph(function_name, direction="callers", depth=2),立刻知道这次改动的影响范围。
manon_deep_query:跨模块的架构理解
有时候你需要的不是「找一个函数」,而是理解一个跨越多个模块的系统行为。比如「这个项目的请求从入口到数据库经过了哪些层?」
manon_deep_query 在服务端运行一个多轮查询循环:它会自动识别信息缺口,补充查询,直到能给出一个完整的跨模块答案。一次调用可以覆盖普通搜索需要 10+ 次才能拼出来的架构图。
commit 后的影响分析:manon_impact
manon_impact 是开发阶段最重要的安全网。每次 git commit 后自动触发(通过 git hook),分析这次提交改动了哪些符号,以及这些改动会沿着调用边传播到哪里。
工作流程:
- 解析 diff,提取变更的函数/类/变量
- 对每个变更符号,沿调用边向上追踪 2 跳(直接调用者 + 调用者的调用者)
- 计算影响的实体数量、模块数量、关键路径
- 输出 0-100 风险评分,以及受影响的具体位置
风险评分的含义:
| 评分范围 | 含义 | 建议 |
|---|---|---|
| 0-30 | 低风险,影响局限在少数模块 | 正常 push |
| 31-60 | 中等风险,影响多个模块 | 确认受影响的测试都在跑 |
| 61-100 | 高风险,影响核心路径或大量模块 | 先做 code review,再 push |
Hooks:强制图谱优先
图谱工具有两个 Claude Code hooks:
PreToolUse(Grep/Glob 前触发):在你用 Grep 搜索代码之前,提醒先查图谱。不是阻止,是提示。大多数情况下,图谱搜索比 Grep 更快、信息更完整。
PostToolUse(git commit 后触发):自动调用 manon_impact,输出这次提交的影响分析。你不需要记得手动跑,每次提交都自动完成。
这两个 hooks 的设计意图是:把「查图谱」从一个需要主动记忆的步骤,变成开发流程的默认行为。
工具选择决策树
| 你的情况 | 用哪个工具 |
|---|---|
| 不知道关键词,描述功能找代码 | manon_search |
| 知道函数名,要看谁在用它 | manon_graph(callers) |
| 知道函数名,要看它依赖什么 | manon_graph(callees) |
| 理解一个跨模块的系统行为 | manon_deep_query |
| 刚 commit,想知道影响了哪里 | manon_impact(自动触发) |
| 知道确切关键词,找字符串 | Grep(图谱不适合这种场景) |
为什么这三个工具能减少 91% 的工具调用
在 20 个真实查询任务的测试中,使用图谱工具平均每任务调用 1 次,原生工具平均 13.7 次。
差距来自两点:
- 一次调用覆盖关联范围:Grep 找到一个函数后,还需要再搜这个函数的调用者,再搜调用者的调用者。图谱一次返回所有层级。
- 结构信息不需要二次推断:Grep 返回文本匹配,你需要自己理解「这些结果之间是什么关系」。图谱直接返回关系图,不需要二次推断。
减少工具调用的直接好处:Token 节省 94%,AI 的上下文窗口更干净,推理质量更高。