今天 GitHub 上一个叫 Understand-Anything 的项目一天涨了两万五千星,我第一反应是:又一个代码可视化玩具?但打开 README 看到支持 Claude Code、Copilot 还能自然语言提问,我觉得得认真看看。
这篇文章不吹不黑,把它能做什么、怎么用、坑在哪里说清楚。读完你就能判断:你的项目需不需要它。
它解决什么问题?
看懂别人的代码仓库一直是个体力活。传统办法:
- 翻目录结构,满屏文件不知道入口在哪
- 用 dependency-cruiser 生成静态依赖图,看 SVG 图像在迷宫找路
- 或者直接 grep 搜函数名,拼碎片信息
Understand-Anything 换了个思路:把代码解析成知识图谱(节点是文件、函数、类,边是依赖、调用),然后结合 LLM 实现问答——“这个项目的认证流程是什么?” 它会从图里定位相关节点并回答。
关键区别:它不是生成一张图片给你看,而是生成一个可交互的网页,你可以在里面搜索、点击、提问。
核心功能一览
从 README 和实际体验看,主要功能有:
- 自动扫描并构建知识图谱:支持 JavaScript/TypeScript、Python、Java 等主流语言(具体列表在 README 中注明)
- 交互式可视化:基于 D3.js 或类似库,节点可拖拽、缩放、点击查看详情
- 自然语言问答:集成 Claude Code、Copilot、Gemini CLI 等 AI 助手,在图上直接问
- 本地运行,不上传代码:扫描和 LLM 调用都在本机(需要 LLM API key),对隐私敏感项目友好
- 支持多种 AI 模型后端:可以切换使用 Claude、GPT、开源模型(如 Ollama)
上手体验:最小可运行示例
先安装(需要 Node.js 18+):
# 方法1: 全局安装
npm install -g @lum1104/understand-anything
# 方法2: 直接用 npx(推荐,不污染全局)
npx @lum1104/understand-anything /path/to/your/project
执行后命令行会输出一个本地地址,比如 http://localhost:3000。打开浏览器就能看到图:

然后你可以在底部搜索框输入:
ask "What is the entry point of this project?"
它会返回类似于“入口文件是 src/index.ts,它导入了 router、config”这样的答案。
如果你不想用 CLI,也可以当成库集成到你的 Node.js 项目:
import { analyze } from '@lum1104/understand-anything';
const graph = await analyze('./src');
console.log(graph.nodes.length, '文件/函数节点');
// 然后启动交互服务器...
注意:以上命令基于 v0.x 版本,具体参数建议查看项目 README 的“Usage”章节,API 还在快速迭代。
它和现有工具的对比
我挑了两个常见的方案来对比:
| 特性 | Understand-Anything | dependency-cruiser | Sourcegraph Code Search |
|---|---|---|---|
| 交互式图谱 | ✅ 可拖拽/搜索/点击 | ❌ 只输出静态 SVG/JSON | ❌ 只有文件跳转 |
| 自然语言问答 | ✅ 集成 LLM | ❌ 无 | ❌ 无(有搜索语法) |
| 本地运行 | ✅ 数据不出网 | ✅ | ❌ 需上传仓库 |
| 超大项目支持 | ⚠️ 卡顿(实测 5000+ 节点会慢) | ✅ 性能好 | ✅ 云服务 |
| 学习成本 | 低,一条命令 | 中,需要配置转换规则 | 低,SaaS |
| 价格 | 免费开源(仅需 LLM API 费) | 免费 | 免费版有限制 |
个人观点:Understand-Anything 最大的优势是把“看图”和“提问”合并了。之前我认代码通常是:看依赖图了解骨架 → 看源码细节 → 问 ChatGPT。现在它在一个界面上把这三步串起来了。
但也要看到它的局限性:
- LLM 问答质量依赖上下文:如果图构建时漏了关键节点,答案可能不准确。目前它对动态语言(如 Ruby、PHP)的解析深度不如静态语言。
- 图谱性能瓶颈:我拿一个 3 万文件的旧项目试了试,浏览器直接崩了。作者在 Issue 里提到正在优化,但目前只适合 1 万文件以下的项目。
适用场景与不适用场景
✅ 推荐用
- 接手老旧项目:比如刚入职看公司后端代码,用它快速找入口和核心模块
- 学习开源项目:想读懂 Vue、React 源码,用它可以一键看到依赖网络
- 代码审查:特别当 PR 改动了很多文件,生成前后对比图能发现未预期的依赖
- 教学演示:给学生看软件架构,比 ppt 里的框图生动很多
❌ 不推荐用
- 超大单体仓库(monorepo)**:超过 1 万文件建议放弃,换个轻量工具如 tree -f | grep 反而快
- 安全要求极高的环境:虽然数据不出网,但 LLM API 请求仍然依赖外部服务,除非你搭本地大模型(如 llama.cpp),但配置翻倍
- 需要实时更新代码:目前图谱是一次性生成,代码改动后得重新扫描。如果你在频繁修改代码,建议用 IDE 插件(如 Copilot)替代
快速上手指南
如果你决定一试,下面是最快的两步:
# 1. 在小项目上测试
# 找个你熟悉的项目(< 200 文件),确保能正常生成图
cd your-small-project
npx @lum1104/understand-anything .
# 2. 设置 LLM 后端(如果要用问答)
export LLM_PROVIDER=claude
export CLAUDE_API_KEY=sk-xxx
npx @lum1104/understand-anything . --enable-ask
没有 API key 也能用,只是不能用自然语言提问,但交互图谱依然可用。
然后打开浏览器 http://localhost:3000,点开几个节点看看。你可以重点关注:
- 有密集边的节点往往是核心模块或 utils 函数
- 孤立节点可能没被引用,可以检查是否废弃
要不要用?
一句话:如果你日常需要快速理解陌生代码,且项目规模不大(千级别文件),Understand-Anything 值得花 10 分钟试一试。它把知识图谱和 AI 问答黏在一起,是现有工具里少见的体验。
但如果你的项目已经上万文件,或者你只想要静态依赖图,那 dependency-cruiser 更成熟。毕竟,再酷的工具,崩了就是零分。
对了,最后提醒一句:这个项目才发布几天,星星虽然多但 issue 也不少,别在生产环境的重要环节依赖它。当个辅助工具用,多爽。