OpenCockpitOpenCockpit
← 返回博客

Code Graph:给 AI 一张项目图谱

发布于 2026年5月22日 · 6 min read

代码图谱(code graph)是你项目里所有符号和它们之间关系的结构化地图——谁调用谁、谁依赖谁、哪些文件总是一起被改。这正是 AI Agent 和你代码库之间缺失的那一层,也是 grep 在最重要的问题上成为 Agent 天花板的原因。

**代码图谱(code graph)**是你项目里所有符号和它们之间关系的结构化地图——谁调用谁、谁依赖谁、哪些文件总是一起被改。这本就是人在重构前画在白板上的那张图。但对一个还在 grep -r 找东西的 AI Agent 来说,这一层是缺失的。

下面讲为什么这件事在实际工作里很要命。

一个小翻车

上周我给 Cockpit 加了一个新的斜杠命令。代码改了四行。本地测了。能跑。提交。推送。

第二天同事消息:"补全菜单里看不到啊?"

原来这个新命令需要在两个文件登记——一个负责 prompt 展开,一个负责出现在菜单。它们不互相 import,不共用函数,只是约定要同名同步。没人文档化这件事,代码里也没编译时检查。

我改之前问过 Agent:"如果改这个函数,还要动哪些地方?" 它 grep 一通,找出 5 个调用方,自信满满总结了一遍。菜单文件不是调用方。grep 看不见这种关系,Agent 也看不见。

为什么 grep 是 Agent 的天花板

当 AI 只能驱动 grep,它就继承了 grep 的所有盲区:

  • 关系是看不见的。 grep 知道字符串 createOrder 出现 12 次,但不知道哪些是真调用、哪些是注释、测试或巧合同名。
  • 约定是看不见的。 两个文件用了同一个常量——一个定义、一个镜像——在 grep 眼里就是两个无关的出现。它没法表达"这俩必须同步改"。

大多数 AI 探索靠 grep 也能跑——因为大多数问题确实只是简单查找。但剩下 10% 不能跑的,恰恰是你最需要帮手的时候。

Code Graph 给 Agent 什么

/cg 是斜杠模式。Cockpit 任意聊天里输入:

/cg 如果重命名 createOrder 会牵连什么?

你没学新工具,没装东西,就敲了三个字符。Agent 现在回答问题的方式,就像它刚花了一小时把代码库读完。

六种问题答得更准:

你问Agent 现在真的知道
"X 在哪定义?"文件 + 行号,一次拿到
"谁用了 X?"真实调用方,不混杂字符串巧合
"X 依赖什么?"下游链
"改 X 会影响什么?"不止直接调用方——连两跳传递性影响也展开
"这个文件里有啥?"符号大纲,不用读全文
"哪些文件总和这个一起被改?"grep 永远看不到的约定耦合

最后一行就是当初能救我的那条。

故事重演

我用 /cg 重做一次:

"我要在这个文件加一个新的斜杠命令,还需要动哪些地方?"

Agent 跑了常规的调用图查询,又多跑了一个——"这个文件在最近的提交里通常和哪些文件一起改"——回我:

"直接调用方是 5 个 chat 路由;签名稳定。额外注意:同模块的 commands.ts 最近几次相关提交都和这个文件一起改。如果你加了新 verb,多半也得在 commands.ts 里登记——看起来是个并行的菜单列表。"

三行话。一个本来会发版后才发现的 bug,提前抓住了。

Code Map 给眼睛,CodeGraph 给 Agent

用过 Cockpit Code Map 的人,已经见过这件事的人类版——把同一份项目结构渲染成可点击的代码 chip,左边是调用者,右边是被调用,你五次点击就能走完一条调用链。

CodeGraph 是同一个想法,换成可查询接口。同一份 tree-sitter 索引、同一张调用图、同一段 git history——Code Map 端给你眼睛,CodeGraph 端给你的 Agent。

同一个事实,两种消费方式。

它不做什么

/cg 不修代码,不读 JSON / yaml / 文档——那些场景普通 grep 还是对的工具。如果你已经知道要改哪个文件,直接 Edit 就好,不需要进探索模式。

但当你的问题里出现"还会影响什么""谁依赖"这种字眼——这就是 grep 和 code graph 差距显形的时候。

试一下

任意 Cockpit chat 里:

/cg

这就是全部上手成本。挑一个你不完全确定影响范围的函数试试——Agent 会告诉你一些你自己找不到的东西。


npm i -g @surething/cockpit · GitHub · 在线体验