过去让编程 Agent 修改代码时,最棘手的问题往往不在于模型不会写,而是它常常无法精准定位到需要修改的具体代码。
在真实的软件项目中,入口函数、调用链路、配置文件、测试用例以及历史遗留逻辑,常常分散在数十个文件之中。如果 Agent 每次都需要依赖 grep、read 及全局搜索来摸索路径,不仅会频繁调用工具,导致 Token 消耗急剧上升,最终结果也未必可靠。
近期备受关注的两个开源项目,恰好都在致力于破解这一难题:CodeGraph 和 Understand-Anything。
它们都与“代码知识图谱”紧密相关,但在定位上有着显著的差异。
一句话概括两者的核心区别:
核心区别对比
| 对比项目 | CodeGraph | Understand-Anything |
|---|---|---|
| 核心目标 | 帮助 AI Agent 快速定位相关代码上下文 | 帮助开发人员快速理解整个项目结构 |
| 主要入口 | 命令行界面 (CLI)、MCP 服务器、TypeScript 应用程序接口 | Claude Code 插件、可视化控制台、知识图谱文件 |
| 典型能力 | 查询、上下文生成、调用方分析、被调用方分析、影响范围评估、受影响模块识别 | 项目全景图谱、搜索与追问、智能导览、业务域划分、差异影响分析 |
| 输出形态 | 本地索引、结构化查询结果、Markdown 格式上下文 | knowledge-graph.json 文件、可视化分析面板 |
| 主要使用者 | Claude Code、Cursor、Codex、OpenCode 等编程 Agent | 软件开发工程师、项目新人、架构师、AI Agent |
| 更适用的场景 | 在修改代码前,快速定位并评估影响范围 | 接手新项目、理解系统架构、进行项目导览、梳理业务流程 |
简而言之,CodeGraph 更偏向于“工具层”,而 Understand-Anything 则更侧重于“认知层”。
CodeGraph 关注的核心问题是:Agent 在执行某项任务前,应该优先获取哪些代码上下文信息。
Understand-Anything 关注的核心问题是:个人或团队在理解一个项目时,应该首先看到什么样的系统全景视图。
CodeGraph:通过预先索引,减少 Agent 的现场探索
CodeGraph 的设计理念非常直接:避免 Agent 在每次任务中都从零开始搜索代码。它会预先对项目进行静态分析,将函数、类、调用关系、导入依赖、文件结构等信息建立为本地索引。
在这之后,Agent 可以直接提出精准查询:
谁调用了 createOrder 函数?UserService.login 内部调用了哪些函数?修改 paymentCallback 模块会影响哪些功能?请围绕“修复登录状态刷新”这个问题生成完整的代码上下文。
具体操作命令示例如下:
codegraph callers createOrder
codegraph callees createOrder
codegraph impact paymentCallback
codegraph context "修复登录状态刷新问题"
它最适合作为 Claude Code、Cursor、Codex CLI、OpenCode 等编程 Agent 的后端服务,充当本地代码知识引擎。
这种能力带来的实际价值非常显著:显著减少无效的代码搜索,大幅度降低 Token 消耗,同时也能有效降低 Agent 仅凭局部文件就贸然动手修改的几率。
Understand-Anything:将项目转化为可视化的系统地图
Understand-Anything 的入口更侧重于交互式理解。它会扫描整个代码库,提取文件、函数、类、依赖关系及调用关系,随后借助多智能体协同,补充架构层面的分析、业务域划分、导览路线图及变更影响评估,最终生成一个交互式的可视化知识图谱。
典型的操作流程如下:
/understand/understand-dashboard
生成的核心产物是:
.understand-anything/knowledge-graph.json
你可以在可视化控制台中搜索任意模块、点击节点查看详情、分析依赖路径,也可以像对话一样进行追问:
支付流程是如何运作的?这个模块具体负责什么功能?新加入的团队成员应该优先阅读哪些文件?当前的代码差异会影响哪些业务领域?
它的核心优势不在于减少 Agent 的工具调用次数,而在于帮助开发者先掌握全局结构。对于新员工入职、老项目交接、系统架构梳理、以及大规模重构前的评估场景,这种可视化的知识图谱远比单纯的命令行查询更加直观高效。
一个真实场景:修复支付回调问题
假设线上出现了一个问题:支付成功后,订单状态有时未能正确更新。
如果完全依赖 Agent 自行探索,它可能会先搜索 payment 关键字,然后再多次跳跃阅读 controller、service、repository、queue handler 以及测试文件,来回切换,效率低下。
一个更可靠的解决流程应该如下:

在这个流程中,两个工具的分工非常明确。
Understand-Anything 首先帮助你理解“系统是如何运作的”。它会清晰地展示支付回调、订单状态更新、消息队列、库存管理和通知模块之间的关联关系。
CodeGraph 随后帮助 AI Agent 精确查询“具体是谁调用了谁”。它将关键函数、调用方、被调用方及影响半径进行结构化整理,确保 Agent 在修改代码时不会遗漏任何相关文件。
一个侧重宏观视角,一个侧重精确分析。
何时使用 CodeGraph
如果你已经明确了要修改的大致方向,只是需要更快速地定位到具体的代码,那么 CodeGraph 是更合适的选择。
例如:
- 修复一个已确认的 Bug;
- 查询某个函数的所有调用方;
- 评估修改一个 Service 层代码的潜在影响面;
- 为 AI Agent 生成精准的任务上下文;
- 找出某些文件改动会影响到哪些测试用例;
- 希望减少 Claude Code 或 Codex 等工具在代码搜索上的开销。
它非常适合嵌入日常的开发流程,作为 AI Agent 的“代码检索基础设施”。
尤其是在中大型项目中,当 Agent 每次执行任务都需要重新扫描海量文件时,CodeGraph 的预索引优势会变得尤为突出。
何时使用 Understand-Anything
如果你对系统整体结构还不够清晰,或者希望为团队共享一份清晰的项目全景图,那么 Understand-Anything 是更合适的选择。
例如:
- 新入职的成员第一天接手项目;
- 老项目文档已经过时,需要重新梳理;
- 技术负责人希望梳理并优化系统架构;
- 在进行大规模重构前,需要明确模块边界;
- 多语言仓库中依赖关系混乱,需要理清头绪;
- 希望生成一份清晰的团队 onboarding 指南;
- 希望通过可视化面板向团队清晰地讲解某个业务流程。
它更像一个“项目理解入口”。先通过它把系统架构看明白,再决定让 Agent 去具体修改哪里。
两者并非替代关系,而是互补
很多人会问:既然 Understand-Anything 也提供了知识图谱和影响分析功能,那 CodeGraph 是否还有存在的必要?
这取决于你具体的使用方式。
如果你更看重给人看、给团队讲解、或给新人做导览,Understand-Anything 使用起来更顺手。
如果你更希望 AI Agent 在执行任务时能够快速、精确地获取上下文信息,那么 CodeGraph 更像是底层的核心工具。
在一个完善的 AI 编程工作流中,完全可以同时使用它们:

这才更接近真实的开发场景:开发者先通过知识图谱理解系统,Agent 再借助预构建索引高效执行任务。
实践中的注意事项
第一,切勿将知识图谱视为绝对真理。
无论是 CodeGraph 还是 Understand-Anything,都依赖于静态分析以及一定程度的语义推断。动态调用、反射机制、运行时注册、以及框架的“黑魔法”都可能导致图谱信息不完整。在进行关键性改动之前,仍然需要亲自阅读源码和运行测试。
第二,务必先排除噪声目录。
node_modules、dist、build、coverage、自动生成的代码以及大型快照文件,都不应纳入分析范围。知识图谱越干净、越聚焦于业务逻辑,其分析结果就越有价值。
第三,知识图谱和代码索引应与代码版本保持同步。
当代码发生重大修改后,旧的知识图谱会迅速过时。团队最好约定:在主线分支发生大规模重构、重要功能发布前,统一重新生成知识图谱或同步代码索引。
第四,不要一开始就追求全量自动化。
更稳健的做法是先选择一个真实的业务场景,例如“修复支付回调问题”或“理解用户登录流程”,验证这两个工具是否能有效减少代码搜索时间、缩小影响范围、并帮助补充测试用例。
总结
CodeGraph 和 Understand-Anything 都在解决 AI 编程领域中的一个核心痛点:代码上下文过于分散,AI Agent 和开发人员都容易在其中迷失方向。
但它们解决问题的切入点各不相同。
CodeGraph 更像是一张为 AI Agent 准备的本地代码导航图:
快速查询符号定义、分析调用链、评估影响范围,并生成任务所需的上下文信息。
Understand-Anything 则更像是一张为团队准备的交互式项目全景图:
洞察系统架构、梳理业务域、提供智能导览、展示模块间的依赖关系。
如果你希望 AI Agent 在修改代码时更加稳定可靠,可以先从 CodeGraph 入手。
如果你希望开发人员能够更快地理解项目全貌,可以先从 Understand-Anything 开始。
如果你的团队已经在认真使用 Claude Code、Codex、Cursor 等 AI 编程工具,那么最好的选择并非二选一,而是将它们组合使用:
