Understand-Anything 中文实践指南:将代码库转化为可探索的知识图谱
Understand-Anything 是一个多智能体(multi-agent)代码分析插件:它把任意代码库解析为包含文件、函数、类与依赖关系的知识图谱,并提供可平移、可缩放、可搜索的交互式仪表盘,帮助你从全局视角理解系统结构,而不是"盲读代码"。本文基于仓库的简体中文文档 READMEs/README.zh-CN.md 展开,覆盖安装、/understand 全流程、多平台适配、团队共享与底层 Tree-sitter + LLM 混合分析原理。读完后,你可以独立完成:安装插件并生成图谱、用 --language zh 产出中文内容、配置增量更新与 post-commit 钩子、将图谱提交给团队、以及不依赖 LLM 地离线查看仪表盘。
核心功能一览
项目定位一句话概括:把任意代码库、知识库或文档转化为可探索、可搜索、可对话的交互式知识图谱,支持 Claude Code、Codex、Cursor、Copilot、Gemini CLI 等多平台。具体能力包括:
| 能力 | 说明 |
|---|---|
| 探索代码结构图 | 每个文件、函数、类都是可点击、可搜索、可探索的节点;选择任意节点即可查看摘要、依赖关系和引导式学习路径 |
| 理解业务逻辑 | 领域视图以水平图展示领域、流程和步骤,看代码如何映射到真实业务流程 |
| 分析知识库 | /understand-knowledge 指向一个 Karpathy 模式的 LLM Wiki,获得带社区聚类的力导向知识图谱;确定性解析器从 index.md 提取 wikilinks 和分类,LLM 代理再发现隐式关系、提取实体与论断 |
| 引导式学习 | 自动生成架构学习路径,按依赖顺序学习 |
| 语义搜索 | 模糊搜索 + 语义搜索,例如"哪些部分处理身份验证?" |
| 变更影响分析 | 提交前查看更改会影响系统的哪些部分,理解连锁反应 |
| 用户角色自适应 UI | 按用户类型(初级开发 / 项目经理 / 高级用户)调整详细程度 |
| 层级可视化 | 按架构层级自动分组——API、服务、数据、UI、系统工具——并附颜色编码图例 |
| 语言概念 | 12 种编程模式(泛型、闭包、装饰器等)在上下文中逐一解释 |
对应的仪表盘技术栈可在 understand-anything-plugin/packages/dashboard/package.json 中确认:React 19 + TypeScript、React Flow(@xyflow/react)、Zustand、TailwindCSS v4,布局引擎包含 dagre、ELK(elkjs)、d3-force,并引入 graphology-communities-louvain 实现社区聚类。
快速开始(以 Claude Code 为例)
1. 安装插件
/plugin marketplace add Egonex-AI/Understand-Anything
/plugin install understand-anything
使用本地模型? 出于隐私或企业需求,可以将平台指向本地模型提供方(例如 Ollama)——按对应平台的集成指南更改模型提供方即可。
2. 分析你的代码库
/understand
多智能体架构会扫描项目、提取函数 / 类 / 依赖、构建知识图谱并保存至 .ua/knowledge-graph.json。已经有 .understand-anything/ 目录的项目会继续使用该目录——存在时它仍是数据目录,因此无需迁移(这一规则在 CLAUDE.md 的 Conventions 一节也有同样表述)。
关于 Token 消耗的提醒: 首次运行
/understand会分析整个代码库,在大型项目上可能消耗大量 token。建议在有 token 套餐 / 订阅的情况下运行,或初始化时使用本地模型。后续运行默认是增量式的——只重新分析变更过的文件——因此 token 消耗大幅减少。
本地化输出: 使用 --language 参数生成中文内容:
# 生成中文内容(知识图节点描述和 Dashboard UI)
/understand --language zh
# 支持的语言:en(默认)、zh、zh-TW、ja、ko、ru
--language 参数会影响三处内容:知识图谱中的节点摘要和描述、Dashboard UI 的标签 / 按钮 / 提示、导览路线的解释说明。
技能定义 understand-anything-plugin/skills/understand/SKILL.md 对 --language 给出了更完整的说明:它接受 ISO 639-1 代码(zh、ja、ko、en、es、fr、de 等)或友好名称(chinese、japanese 等),并支持 zh-TW、zh-HK、pt-BR 等地区变体;解析后的语言偏好会写入 $UA_DIR/config.json,保证后续增量更新时语言一致。此外,若未显式指定 --language,首次运行会检测会话的主导语言——若为英文则静默使用 en,若非英文则一次性向你确认后再写入配置。
3. 打开数据看板
/understand-dashboard
打开交互式网页数据看板:代码库以图表形式呈现,按架构层级颜色编码,支持搜索和点击。选择任意节点即可查看其代码、关系以及简明解释。根据 SKILL.md 的流程,/understand 在最终图谱通过校验后会自动触发 /understand-dashboard,无需手动执行第 3 步。
4. 深度使用
# 询问任意代码库的问题
/understand-chat How does the payment flow work?
# 分析当前修改的影响
/understand-diff
# 深入理解某个文件
/understand-explain src/auth/login.ts
# 为新团队成员生成指南
/understand-onboard
# 提取业务领域知识(领域、流程、步骤)
/understand-domain
# 分析 Karpathy 模式的 LLM Wiki 知识库
/understand-knowledge ~/path/to/wiki
# 直接重跑即可 —— 默认增量更新,只分析变更的文件
/understand
# 安装 post-commit 钩子,每次提交自动增量更新
/understand --auto-update
# 大型 monorepo?把分析范围限定到某个子目录
/understand src/frontend
/understand 命令的完整参数集(来自 SKILL.md 的 Options 一节):
| 参数 | 作用 |
|---|---|
--full |
强制全量重建,忽略已有图谱 |
--auto-update |
开启提交时自动更新(向 $UA_DIR/config.json 写入 autoUpdate: true) |
--no-auto-update |
关闭自动更新(写入 autoUpdate: false) |
--review |
运行完整的 LLM graph-reviewer,替代内联确定性校验 |
--language <lang> |
指定所有文本内容的生成语言,默认 en |
--exclude <patterns> |
逗号分隔的 glob 排除模式(支持 gitignore 语法与 ! 否定),优先级最高;新增排除模式需配合 --full 生效 |
| 目录路径 | 分析指定目录(如 ../other-project)而非当前目录 |
/understand 的七阶段流水线(源码视角)
README 只说"扫描 → 提取 → 构建图谱",而 SKILL.md 定义了完整的七阶段流程,每个阶段都有明确的中间产物与决策逻辑,这也是理解"增量更新为什么便宜"的关键:
- Phase 0(Pre-flight):解析目标目录、检测 git worktree 并自动重定向到主仓库(避免 Claude Code 的临时 worktree 销毁数据目录)、确保插件已构建(
pnpm --filter @understand-anything/core build)、解析数据目录$UA_DIR(.understand-anything/存在则优先,否则用.ua/)、读取meta.json中的gitCommitHash决定走全量还是增量路径; - Phase 0.5:生成 / 确认
.understandignore排除规则; - Phase 1(SCAN):派发
project-scanner子代理,输出scan-result.json——文件清单(含行数与fileCategory分类:code、config、docs、infra、data、script、markup)、语言与框架检测、以及预先解析好的项目内importMap;超过 100 个文件时会提示改用子目录参数缩小范围; - Phase 1.5(BATCH):运行 compute-batches.mjs 将文件划分为语义批次,并附跨批次邻居符号表,提升跨批次边的置信度;
- Phase 2(ANALYZE):每批派发一个
file-analyzer子代理,最多 5 个并发,产出batch-<i>.json;随后 merge-batch-graphs.py 一次性合并、归一化节点 ID、去重、丢弃悬空边,并运行tested_by链接器规范化测试覆盖边; - Phase 3–5:
assemble-reviewer复审组装图 →architecture-analyzer识别架构层(输出layers.json)→tour-builder生成引导式学习路径(输出tour.json),两者都经过确定性归一化(解包 envelope、重命名遗留字段、补前缀、丢弃悬空引用); - Phase 6–7(REVIEW + SAVE):默认走内联确定性校验脚本(校验必填字段、悬空边、节点重复、孤立节点并输出统计),仅在
--review时才派发 LLMgraph-reviewer;通过后将图谱写入$UA_DIR/knowledge-graph.json,并在写meta.json之前先生成结构指纹基线——这是自动增量更新的比较基础,缺了它每次提交都会被误判为需要全量更新。
增量更新路径(Phase 2 的 Incremental update path)用 git diff <lastCommitHash>..HEAD --name-only 得到变更文件列表,只对变更文件重算批次,再从旧图中删除对应节点与边后与新批次合并。scan-result.json 会被刻意保留到 Phase 7 清理之后,因为后续增量运行可以跳过 Phase 1 SCAN,显著省掉重复扫描的开销。
图谱的数据模型也在 SKILL.md 的 Reference 一节有完整定义:13 种节点类型(file、function、class、module、concept、config、document、service、table、endpoint、pipeline、schema、resource,各有 type:<path> 形式的 ID 约定)和 26 种边类型(按 Structural / Behavioral / Data flow / Dependencies / Semantic / Infrastructure / Schema-Data 七个类别组织),并规定了边权重约定(如 contains = 1.0、calls = 0.8、tested_by = 0.5)。图谱输出格式遵循 docs/benchmarks/large-repo-report-1.0.0.schema.json 所示的 1.0.0 版本契约,包含 version、project(名称、语言、框架、描述、分析时间、gitCommitHash)、nodes、edges、layers、tour。
技术原理:Tree-sitter + LLM 混合分析
README 对分工的表述是:把确定性的事情交给静态分析,把需要语义理解的事情交给 LLM。
- Tree-sitter(确定性)——将源码解析为具体语法树,提取结构性事实:导入、导出、函数 / 类定义、调用点、继承关系。在 scan 阶段预先解析为
importMap并传给 file-analyzer,避免它们再从源码推导一次 import。同样的输入永远得到同样的输出,并作为增量更新的指纹基础。 - LLM(语义)——读取解析后的结构以及原始源码,生成解析器做不了的事:plain-English 摘要、标签、架构层归属、业务领域映射、引导路径、语言概念标注。
正因为这个分工,图谱在结构层面是可复现的(同样的代码总是产生同样的边),同时在语义层面又能捕捉意图——一个文件是"为了什么"存在,而不仅仅是它 import 了什么。
从源码结构看,这一分工落在 packages/core 的插件体系上:understand-anything-plugin/packages/core/src/plugins/tree-sitter-plugin.ts 基于 web-tree-sitter(WASM) 而非原生绑定(CLAUDE.md 的 Gotchas 一节说明原因是原生绑定在 darwin/arm64 + Node 24 上失败)。languages/configs/index.ts 注册了约 45 种语言的配置(每种配置定义扩展名、概念词表、文件模式与入口点识别规则),plugins/extractors/ 提供 12 种语言的专用结构提取器(C++、C#、Dart、Go、Java、Kotlin、PHP、Python、Ruby、Rust、Scala、Swift、TypeScript),plugins/parsers/ 则解析 Dockerfile、env、GraphQL、JSON、Makefile、Markdown、Protobuf、Shell、SQL、Terraform、TOML、YAML 等非代码文件——这正是"节点类型不只是 file/function/class,还有 config、service、pipeline、table、endpoint"的原因。
多智能体架构
/understand 命令调用 5 个 agent,/understand-domain 额外增加第 6 个:
| Agent | 职责 |
|---|---|
project-scanner |
扫描项目文件,检测语言和框架 |
file-analyzer |
提取代码结构(函数、类和导入),生成图节点和边 |
architecture-analyzer |
识别架构层 |
tour-builder |
生成引导式学习路径 |
graph-reviewer |
验证图的完整性和引用完整性 |
domain-analyzer |
提取业务领域、流程和处理步骤(由 /understand-domain 使用) |
article-analyzer |
从 wiki 文章中提取实体、论断和隐式关系(由 /understand-knowledge 使用) |
这些 agent 定义位于 understand-anything-plugin/agents/ 目录(project-scanner.md、file-analyzer.md、graph-reviewer.md、tour-builder.md、domain-analyzer.md、article-analyzer.md 等)。文件分析器并行运行,支持增量更新——仅重新分析自上次运行以来发生更改的文件。
多平台支持
Understand-Anything 可在多个 AI 编码平台上运行,各平台的安装方式不同。
Claude Code(原生)
/plugin marketplace add Egonex-AI/Understand-Anything
/plugin install understand-anything
一行命令安装(Codex / OpenCode / OpenClaw / Antigravity / Gemini CLI / Pi Agent / Vibe CLI / VS Code Copilot / Hermes / Cline / KIMI CLI / Nanobot / Kiro)
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/Egonex-AI/Understand-Anything/main/install.sh | bash
# 也可以直接传入平台名跳过交互提示:
curl -fsSL https://raw.githubusercontent.com/Egonex-AI/Understand-Anything/main/install.sh | bash -s codex
Windows(PowerShell):
iwr -useb https://raw.githubusercontent.com/Egonex-AI/Understand-Anything/main/install.ps1 | iex
安装脚本会把仓库克隆到 ~/.understand-anything/repo,并为所选平台创建相应符号链接,完成后需重启 CLI 或 IDE。查看 install.sh 源码可以看到其内部的平台表:每个平台条目是 id|skills目标目录|链接风格 三元组(如 codex|$HOME/.agents/skills|per-skill、cline|$HOME/.cline/skills|folder),支持 --update(git pull --ff-only 更新现有 checkout)与 --uninstall <platform>,并允许用环境变量 UA_REPO_URL / UA_DIR 覆盖克隆地址与目标目录。
关于技能调用方式: 不同平台的调用前缀不同。大多数平台使用斜杠命令(
/understand),但 Codex 使用$——请输入$understand,而不是/understand。如果两种前缀都不被识别,直接用自然语言请求即可:"使用 understand 技能分析这个项目"。
- 支持的
<platform>取值:gemini、codex、opencode、pi、openclaw、antigravity、vibe、vscode、hermes、cline、kimi、nanobot、kiro - 后续更新:
./install.sh --update - 卸载:
./install.sh --uninstall <platform>
Cursor
克隆此仓库后,Cursor 会通过 .cursor-plugin/plugin.json 文件自动发现插件。无需手动安装——只需克隆并在 Cursor 中打开即可。若自动发现未生效,可手动安装:打开 Cursor Settings → Plugins,在搜索框中粘贴仓库地址并添加。
VS Code + GitHub Copilot
安装 GitHub Copilot 扩展(v1.108+)后,VS Code 会通过 .copilot-plugin/plugin.json 自动发现插件,克隆后直接在 VS Code 中打开即可。若需要在所有项目中使用(个人技能),运行上面的 install.sh 并选择 vscode 平台即可。
Copilot CLI
copilot plugin install Egonex-AI/Understand-Anything:understand-anything-plugin
Kiro CLI / IDE
curl -fsSL https://raw.githubusercontent.com/Egonex-AI/Understand-Anything/main/install.sh | bash -s kiro
安装完成后:
- Kiro CLI:
kiro-cli chat --agent understand "分析这个项目" - Kiro IDE:技能会被符号链接到
~/.kiro/skills/,understandagent 会被写入~/.kiro/agents/understand.json,重启 IDE 后两者均可使用。
多平台兼容总表
| 平台 | 状态 | 安装方式 |
|---|---|---|
| Claude Code | ✅ 原生 | 插件市场 |
| Cursor | ✅ 支持 | 自动发现 |
| VS Code + GitHub Copilot | ✅ 支持 | 自动发现 |
| Copilot CLI | ✅ 支持 | 插件安装 |
| Codex | ✅ 支持 | install.sh codex |
| OpenCode | ✅ 支持 | install.sh opencode |
| OpenClaw | ✅ 支持 | install.sh openclaw |
| Antigravity | ✅ 支持 | install.sh antigravity |
| Gemini CLI | ✅ 支持 | install.sh gemini |
| Pi Agent | ✅ 支持 | install.sh pi |
| Vibe CLI | ✅ 支持 | install.sh vibe |
| Hermes | ✅ 支持 | install.sh hermes |
| Cline | ✅ 支持 | install.sh cline |
| KIMI CLI | ✅ 支持 | install.sh kimi |
| Nanobot | ✅ 支持 | install.sh nanobot |
| Kiro CLI / IDE | ✅ 支持 | install.sh kiro |
与团队共享知识图谱
图谱就是一份 JSON 文件——提交一次,团队成员就可以跳过整条分析流水线。适合新人上手、PR 评审和 docs-as-code 工作流。
需要提交的内容: .ua/ 下的全部文件,除了 intermediate/ 和 diff-overlay.json(这些是本地临时文件)。(旧项目使用 .understand-anything/——如果存在的是该目录,请将下方目录名替换为它。)
.ua/intermediate/
.ua/diff-overlay.json
保持最新: 启用 /understand --auto-update——一个 post-commit 钩子会增量更新图谱,每次提交都能得到匹配的图谱版本。也可以在发布前手动重跑 /understand。
大型图谱(10 MB 以上): 使用 git-lfs 跟踪。
git lfs install
git lfs track ".ua/*.json"
git add .gitattributes .ua/
无需 Claude Code 也能查看仪表盘
图谱生成并提交后,团队中的任何人只需一条命令即可打开它——无需 Claude Code、无需 LLM、无需 API 密钥,只需要 Node.js(>= 18):
npx https://github.com/Egonex-AI/Understand-Anything/releases/latest/download/understand-anything-viewer.tgz /path/to/analyzed/project
终端会打印一个带令牌的 URL(http://127.0.0.1:5173/?token=…),并在浏览器中打开完整的交互式仪表盘。项目目录(默认:当前目录)必须包含已提交的数据目录(.ua/,或旧版 .understand-anything/)。所有内容都从本地磁盘以只读方式提供——没有 LLM 调用,也不会有任何数据离开你的机器。
understand-anything-plugin/packages/viewer/README.md 补充了 viewer 的实现细节:它支持 --port <n>(默认 5173,端口占用时自动递增)和 --no-open 选项,服务绑定在 127.0.0.1 并受一次性访问令牌保护;tarball 由 pack:release 脚本构建,内嵌编译后的 dashboard dist/,是一个零依赖的自包含包。
如果你是从克隆的仓库工作:先执行 pnpm install && pnpm --filter @understand-anything/core build,再运行 GRAPH_DIR=/path/to/analyzed/project pnpm dev:dashboard,即可通过 Vite 开发服务器实现同样的效果。
环境要求与本地开发
- 运行 viewer:Node.js >= 18(见 understand-anything-plugin/packages/viewer/package.json 的
engines字段); - 开发插件本体:Node.js >= 22、pnpm >= 10(由根 package.json 的
packageManager字段固定为 pnpm 10.6.2); - 仓库是 pnpm workspaces monorepo:
understand-anything-plugin/packages/core是共享分析引擎(类型、持久化、tree-sitter、搜索、schema、tour、插件注册),packages/dashboard是 React 仪表盘,skills/与agents/是技能与代理定义(见 CLAUDE.md 的 Architecture 一节)。
常用命令(与 READMEs/README.zh-CN.md 贡献一节一致):
pnpm install
pnpm --filter @understand-anything/core build # 构建 core 包
pnpm --filter @understand-anything/core test # 运行 core 测试
pnpm test # 运行全部测试(skill 测试位于仓库根 tests/skill/)
pnpm dev:dashboard # 启动仪表盘开发服务器
贡献流程:Fork 项目 → 新建分支(git checkout -b feature/my-feature)→ 运行测试(pnpm --filter @understand-anything/core test)→ 提交更改并创建 PR;重大变更请先提交 issue 讨论。
小结
Understand-Anything 的设计可以归纳为三条主线:结构上可复现(Tree-sitter 静态解析 + 结构指纹,同样的代码永远产生同样的边,增量更新只重算变更文件)、语义上靠 LLM(多智能体分工产出摘要、架构层、引导路径、领域映射与图谱校验)、产物上纯 JSON(.ua/knowledge-graph.json 可提交、可共享、可用零依赖 viewer 离线查看)。对刚接手一个大型代码库的开发者,最短路径是:安装插件 → /understand --language zh → /understand-dashboard 浏览结构图与领域视图 → 用 /understand-chat 提问、/understand-diff 评估改动影响,并配合 /understand --auto-update 让图谱随提交自动保持最新。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0623
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00