今天 GitHub 上一个叫 Understand-Anything 的项目一天涨了两万五千星,我第一反应是:又一个代码可视化玩具?但打开 README 看到支持 Claude Code、Copilot 还能自然语言提问,我觉得得认真看看。

这篇文章不吹不黑,把它能做什么、怎么用、坑在哪里说清楚。读完你就能判断:你的项目需不需要它。

它解决什么问题?

看懂别人的代码仓库一直是个体力活。传统办法:

  • 翻目录结构,满屏文件不知道入口在哪
  • 用 dependency-cruiser 生成静态依赖图,看 SVG 图像在迷宫找路
  • 或者直接 grep 搜函数名,拼碎片信息

Understand-Anything 换了个思路:把代码解析成知识图谱(节点是文件、函数、类,边是依赖、调用),然后结合 LLM 实现问答——“这个项目的认证流程是什么?” 它会从图里定位相关节点并回答。

关键区别:它不是生成一张图片给你看,而是生成一个可交互的网页,你可以在里面搜索、点击、提问。

核心功能一览

从 README 和实际体验看,主要功能有:

  1. 自动扫描并构建知识图谱:支持 JavaScript/TypeScript、Python、Java 等主流语言(具体列表在 README 中注明)
  2. 交互式可视化:基于 D3.js 或类似库,节点可拖拽、缩放、点击查看详情
  3. 自然语言问答:集成 Claude Code、Copilot、Gemini CLI 等 AI 助手,在图上直接问
  4. 本地运行,不上传代码:扫描和 LLM 调用都在本机(需要 LLM API key),对隐私敏感项目友好
  5. 支持多种 AI 模型后端:可以切换使用 Claude、GPT、开源模型(如 Ollama)

上手体验:最小可运行示例

先安装(需要 Node.js 18+):

bash
1 2 3 4 5
# 方法1: 全局安装
npm install -g @lum1104/understand-anything

# 方法2: 直接用 npx(推荐,不污染全局)
npx @lum1104/understand-anything /path/to/your/project

执行后命令行会输出一个本地地址,比如 http://localhost:3000。打开浏览器就能看到图:

Web 浏览器中展示的知识图谱界面,节点按模块颜色分组,边表示依赖关系

然后你可以在底部搜索框输入:

bash
1
ask "What is the entry point of this project?"

它会返回类似于“入口文件是 src/index.ts,它导入了 router、config”这样的答案。

如果你不想用 CLI,也可以当成库集成到你的 Node.js 项目:

typescript
1 2 3 4 5
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)替代

快速上手指南

如果你决定一试,下面是最快的两步:

bash
1 2 3 4 5 6 7 8 9
# 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 也不少,别在生产环境的重要环节依赖它。当个辅助工具用,多爽。