Understand-Anything:一周涨星15000的开源代码图谱,让AI真正读懂你的项目




昨天我打开了一个有 200,000 行代码的新项目,3 分钟后我开始感到头疼。

我已经滚动了三个屏幕的文件列表,但还没有到达末尾。入口关系像蜘蛛网一样盘根错节。我不知道谁在调用特定函数。这种感觉,做过几年开发的人都熟悉。

然后我上周在 GitHub 上发现了一个名为 Understanding-Anything 的东西,有近 15,000 个 star。

这个东西的slogan很有趣,叫做“将任意代码库、知识库或文档转化为可探索、可搜索、可对话的交互式知识图谱”。我见过太多所谓的代码可视化工具,把你的项目画成一坨五颜六色的节点,看着很炫,然并卵,你该不懂的还是不懂。Understand-Anything 走的路线不太一样,它要的是你读完这张图,真的理解了整个项目。

安装非常简单,只需运行一行命令:

/plugin install understand-anything

并在项目目录中运行 /understand 即可开始工作。后面的事你基本不用管,它会派出一堆Agent,把你的代码库拆成零件,然后将它们重新组合在一起。

具体来说,五个代理各有自己的分工。首先,项目扫描代理识别项目中使用的语言和框架。然后,文件分析代理大规模并行运行,以提取每个函数、类和导入关系,而不会丢失任何内容。然后架构分析代理对API层、服务层、数据层和UI层模块进行分层和自动分类。然后,导游代理会生成一条学习路径,告诉您首先查看哪些模块,稍后查看哪些模块,就像老员工引导您完成代码库一样。最后,图审查代理执行一系列质量检查,以确保没有节点和边丢失,并且所有参考关系都是正确的。

如果要分析业务逻辑,还有第六个代理,即领域分析代理,它专门提取业务域、流程和步骤。例如,在一个电商项目中,你可以知道有哪些业务域,“下单”、“支付”、“发货”涉及到哪些模块和数据流。

整个过程将需要几分钟。然后,您将在浏览器中看到交互式知识图。每个节点都是一个文件、函数或类,架构层通过颜色来区分。单击任何节点即可查看它的作用、与谁相关以及属于哪一层。双击直接跳转到依赖的函数。例如,您还可以搜索“哪个部分处理身份验证”。支持模糊搜索和语义搜索,搜索结果直接在图像上突出显示。

我正在尝试的项目有一个我根本不理解的身份验证模块。当我点击它时,我看到它依赖于三个服务,由两个控制器调用,并通过中间件耦合到会话管理。我花了很长时间翻文档,看不懂这些关系,但是当我看图谱时,3秒就明白了。

老实说,这次经历让我有点兴奋。

我之前的痛点太真实了。用Cursor写代码的时候,它经常理解不了跨模块的调用链,改一个地方莫名其妙就炸了。上周我们改变了项目中工具函数的返回值的格式。运行测试后,我发现三个模块正在使用此功能,并且每个模块都崩溃了。Cursor不知道这个函数依赖于谁,所以根本没有提醒我。Copilot也是如此。它只查看当前文件和它附近的几个文件,并不了解整体架构。如果你问他们“这个项目的付款流程是怎样的?”他们很可能会告诉你。归根结底,只有一个问题。问题在于上下文窗口不适合整个代码库。

GPT-4 的 128,000 个 token 听起来似乎很多,但大型项目往往包含数百万行代码,塞不进去就塞不进去。就现有解决方案而言,RAG 搜索粒度太粗,召回往往不准确,结构信息混乱丢失。文件切片就更废话了,函数调用链直接中断,LLM看到的都是碎片。

“理解任何事情”采取了不同的方法。您可以先将代码转换为图像,然后从图像中准确查看 LLM 所需的信息,而不是强制 LLM 包含更多代码。如果你想改支付逻辑,它不会把整个项目扔给你,而是会告诉你哪些文件和支付模块相关,依赖哪些服务,调用了哪些函数。精确而结构化,不多不少。

我仔细研究了它的技术架构。 Tree-sitter 执行确定性分析并提取结构事实,例如导入、导出、函数定义和调用关系。相同的代码每次都会产生相同的结果,并且是完全可重现的。 LLM 很有意义,可以生成树管理员无法导出的节点摘要、标签和架构层属性。确定性部分确保结构一致性,语义部分捕获意图。这种分工非常复杂,具有快速而准确的确定性分析和缓慢但强大的语义解释。

另一个有趣的事情是它支持超过 12 个 AI 编程平台。自动检测 Claude Code 原生插件 Cursor,VS Code 和 Copilot 也是如此,Codex、OpenCode 和 Gemini CLI 都有相应的支持。它不仅仅是一个 Claude 代码的花瓶,每个 IDE 都想覆盖它。

还有一个非常实用的功能,叫做差异影响分析。修改代码后运行/understand-diff。在图表上标记哪些节点受到影响以及哪些依赖链受到影响。这对于代码审查非常有用。在考虑公关之前,首先检查一下你的影响范围以获得一个好主意。

还有一些更重要的细节。地图将逐步更新。默认情况下,仅重新分析更改的文件,因此无需从头开始运行它。大型项目的首次运行可能需要 10 分钟或更长时间,但后续更新只需几秒钟。支持提交后挂钩并在每次提交时自动更新映射。团队共享也很容易。地图是 JSON 文件。发送到你的Git仓库,拉下来供你的队友直接使用。一旦新员工有了这张地图,他们就可以开始了解项目的结构,这样老员工就不用花半天时间在上面了。

为什么一周内星星数增加了15000个?主要原因是问题太精确了。 Cursor 和 Copilot 用户都抱怨人工智能无法理解大型项目。 Understanding-Anything 直接针对这个问题,并且在 MIT 许可下开源且免费。类似的产品还有需要付费的Sourcegraph、刚刚获得融资、属于商业产品的Greptile、专注于研究的Microsoft CodeGraph以及已经停止更新的Bloop。这几乎是唯一的开源轨道。

创始人提供的信息太少会影响社区信任。对 TypeScript 的支持正在引入,Go 和 Python 仍处于社区请求阶段,Java 或 Rust 项目的经验会打折扣。语义分析依赖于LLM API,代码片段发送给模型服务提供商。这可能是企业隐私的红线。如果以后支持本地模型汇总就完美了。

运行 /understand-dashboard 打开Dashboard,缩放,搜索,点击。三分钟之前让我头疼的那个代码库,现在清晰可见:每个模块的作用、谁依赖于谁以及功能的更改在哪些方面对您产生影响。

这就像走进一个陌生的城市,突然得到一张地图,上面标出了所有的街道和建筑物。这座城市没有改变,但也没有迷失方向。

代码知识图谱会成为AI编程的基础设施吗?我不知道。但至少有人认真地致力于让一些东西变得易于使用,并将其开源以供每个人使用。 15,000 颗星并不是很多。

阅读全文