Understand-Anything 框架注册表深度解析:Django、Next.js、Spring 等 10 大框架检测规则
【免费下载链接】Understand-AnythingGraphs that teach > graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.项目地址: https://gitcode.com/GitHub_Trending/un/Understand-Anything
Understand-Anything 是一款开源项目,能把任意代码库转换为可探索、可搜索、可提问的交互式知识图谱。它的"框架注册表"(FrameworkRegistry)负责在扫描阶段自动识别项目使用的框架(如 Django、Next.js、Spring Boot),并据此注入对应的分析规则。本文将完整拆解这套框架检测规则的设计与实现,帮助新手理解"自动框架识别"是如何落地的。
为什么需要框架注册表?
不同框架的项目结构差异巨大:Django 的入口是manage.py,Spring Boot 是**/Application.java,Next.js 则是pages/_app.tsx。如果没有针对性的规则,AI 分析器只能"猜"文件角色,图谱质量会大打折扣。
框架注册表解决的正是这个问题:
- 识别框架:读取
package.json、requirements.txt、pom.xml等清单文件,通过关键词匹配判断项目用了什么框架 - 注入知识:检测成功后,把该框架的"附加知识文档"(如 Django 的文件角色表、分层规则)注入到 AI 分析器的提示词中
- 划分层级:通过
layerHints把views/、models/、routes/等目录自动归入 API 层、数据层、UI 层
检测机制:三步读懂 FrameworkRegistry
核心实现位于 framework-registry.ts,整个注册表只做三件事:
注册(register):每个框架配置都会通过 Zod 模式 FrameworkConfigSchema 校验,并按
id和languages建立双索引,重复注册会被静默去重查询(getById / getForLanguage):支持按框架 ID 精确查询,也支持按编程语言反向查询(例如查
python会返回 Django、Flask、FastAPI 三个框架)检测(detectFrameworks):这是关键方法,算法分两步(见 detectFrameworks 实现):
- 第一步:文件名匹配。遍历每个框架声明的
manifestFiles(如requirements.txt、go.mod),在项目清单文件中按"文件名或路径后缀"查找 - 第二步:关键词匹配。将清单文件内容转小写后,与框架的
detectionKeywords逐一比对,命中任意一个即判定成功
- 第一步:文件名匹配。遍历每个框架声明的
两个工程细节值得一提:检测全程大小写不敏感(Django==4.2和django==4.2都能识别);同一框架命中多个清单文件时自动去重,保证结果唯一。
10 大内置框架检测规则一览表
内置框架清单定义在 frameworks/index.ts,共 10 个框架,覆盖前后端主要技术栈:
| 框架 | 语言 | 清单文件 | 检测关键词(示例) | 规则文件 |
|---|---|---|---|---|
| Django | Python | requirements.txt、pyproject.toml 等 | django、djangorestframework | django.ts |
| FastAPI | Python | 同上 | fastapi、uvicorn、starlette | fastapi.ts |
| Flask | Python | 同上 | flask、flask-sqlalchemy | flask.ts |
| React | TS / JS | package.json | react、react-dom | react.ts |
| Next.js | TS / JS | package.json | "next":、@next/font | nextjs.ts |
| Express | JS / TS | package.json | "express":、express-session | express.ts |
| Vue | TS / JS | package.json | vue、nuxt、vite-plugin-vue | vue.ts |
| Spring Boot | Java / Kotlin | pom.xml、build.gradle(.kts) | spring-boot、org.springframework | spring.ts |
| Ruby on Rails | Ruby | Gemfile | rails、activerecord | rails.ts |
| Gin | Go | go.mod | github.com/gin-gonic/gin | gin.ts |
规则设计中的三个亮点 🎯
- 关键词足够"具体":以 Django 的检测关键词 为例,除了
django本身,还加入了djangorestframework、django-cors-headers等生态包,即使主包名被工具链改写也能命中 - 区分"依赖声明"与"文本提及":JS 生态的关键词写成
"next":、"express":这种带引号的 JSON 键名形式(见 nextjs.ts),避免把代码注释里提到 "express" 字样误判为使用 Express 框架 - 跨语言支持:Spring Boot 的
languages同时声明了java和kotlin(见 spring.ts),入口点也用了**/Application.java这样的 glob 模式,天然适配 Kotlin 项目
检测结果如何驱动知识图谱生成?
每个框架配置都带三个"执行器字段",检测成功后的价值就体现在这里:
promptSnippetPath:指向 skills/understand/frameworks/ 目录下的知识文档。SKILL.md 规定:检测到框架后,读取对应的frameworks/<框架id>.md并全文追加到分析器的提示词末尾。以 django.md 为例,它定义了 Django 的 20 余种标准文件角色(urls.py是路由、signals.py是事件处理器)、URL 到视图的calls边、ORM 外键的depends_on边等专属图规则entryPoints:告诉分析器优先关注哪些入口文件,例如 FastAPI 的main.py/app.py、Rails 的config.ru/bin/railslayerHints:把目录名映射到架构层级,如 Spring 的controller → api、repository → data、security → middleware(见 spring.ts layerHints),这让分层视图无需 AI 猜目录含义
下图是框架检测生效后生成的知识图谱面板,右侧信息栏直接展示了识别出的语言与框架标签(Flask、React Flow 等),以及节点、边的统计数据:
如何用测试用例验证检测规则?
框架注册表的行为由 framework-registry.test.ts 中的 7 组用例兜底,覆盖新手最容易踩的边界场景:
- ✅ 从
requirements.txt内容检测出 Django - ✅ 从
package.json内容检测出 React - ✅ 大小写不敏感(
Django==4.2) - ✅ 无命中时返回空数组
- ✅ 多个清单文件同时命中时不重复
- ✅
createDefault()恰好注册10 个内置框架,且 Python 系 ≥3 个、Java/Ruby/Go 各 ≥1 个 - ✅ 重复注册同一配置不产生脏数据
在结构视图中,layerHints的效果可以直接看到——前端、后端微服务、基础设施被自动归入不同层级卡片:
相关模块导航 📍
| 模块 | 路径 |
|---|---|
| 注册表实现 | framework-registry.ts |
| 框架配置模式定义 | languages/types.ts |
| 10 个内置框架规则 | languages/frameworks/ |
| 框架知识文档(注入提示词) | skills/understand/frameworks/ |
| 单元测试 | framework-registry.test.ts |
| 核心包导出入口 | packages/core/src/index.ts |
总结
Understand-Anything 的框架注册表用一个"清单文件名 + 检测关键词"的轻量算法,实现了对 Django、Next.js、Spring Boot 等 10 大框架的可靠识别;再通过promptSnippetPath与layerHints两个字段,把"检测到什么框架"直接转化为"按什么规则建图"。这套设计思路——用声明式配置驱动检测,用可插拔文档注入领域知识——对任何想给 AI 分析器加框架感知能力的开发者都值得借鉴。
【免费下载链接】Understand-AnythingGraphs that teach > graphs that impress. Turn any code into an interactive knowledge graph you can explore, search, and ask questions about. Works with Claude Code, Codex, Cursor, Copilot, Gemini CLI, and more.项目地址: https://gitcode.com/GitHub_Trending/un/Understand-Anything
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考