📌 来源 Commit:
e6c189a(easy-learn-ai 项目)
作者: lishiqi.conard | 时间: 2026-07-12 22:55 CST
你有没有想过,当一个项目里塞了230多个AI模型的信息,会是什么场面?
想象一下:你走进一座图书馆,所有书——科普读物、学术论文、小说、漫画——全部堆在一个房间里,没有书架、没有分类、没有标签。你想找一本讲量子物理的书,结果在一堆言情小说里翻了半小时。
这就是 easy-learn-ai 项目之前的处境。
那个5000行的"怪兽"
在2026年7月12日之前,easy-learn-ai 项目的模型数据全部塞在一个叫 model.json 的文件里。这个文件有多大?5005行。还不算另外两个兄弟文件 img.json(图片生成模型)和 video.json(视频生成模型)。
5000行JSON是什么概念?
如果你用普通的文本编辑器打开它,滚动条会变得像一根针一样细。你Ctrl+F搜索"DeepSeek",可能一次性能匹配到二三十处,分布在文件的天南地北。你想添加一个新公司的模型?不好意思,你得先花十分钟搞清楚这个文件的组织逻辑——假设它真的有逻辑的话。
更要命的是,随着AI行业以每周都有新模型的速度狂飙,这个文件的增长速度已经失控了。OpenAI一家就有38个模型,Google有15个,阿里有28个……所有公司的模型信息像春运火车站的人群一样挤在一个大厅里,彼此推搡,谁也找不到谁。
搬家:给每个公司一栋楼
7月12日晚上22:55,项目作者 lishiqi.conard 做了一个大胆的决定:
拆了那个5000行的怪兽。
他做了三件事,每一件都堪称工程美学的典范。
第一件事:分家
原有的 model.json 被拆成了19个独立的JSON文件,按公司分类存放:
src/data/models/
├── alibaba.json # 28个模型(阿里系)
├── anthropic.json # 12个模型(Anthropic)
├── baidu.json # 13个模型(百度)
├── black-forest-labs.json # 2个模型(FLUX 的娘家)
├── bytedance.json # 20个模型(字节跳动)
├── deepseek.json # 17个模型(DeepSeek)
├── google.json # 15个模型(Google)
├── kuaishou.json # 2个模型(快手)
├── meta.json # 7个模型(Meta)
├── midjourney.json # 1个模型(Midjourney)
├── minimax.json # 8个模型(MiniMax)
├── moonshot.json # 13个模型(月之暗面)
├── openai.json # 38个模型(OpenAI)
├── pika.json # 2个模型(Pika)
├── runway.json # 2个模型(Runway)
├── stability-ai.json # 5个模型(Stability AI)
├── tencent.json # 14个模型(腾讯)
├── xai.json # 9个模型(xAI / Grok)
└── zhipu-ai.json # 24个模型(智谱AI)
230个模型,19家公司,每家一栋"公寓楼"。
这是什么体验?就像你把春运火车站里的人群按照目的地分到了不同的候车厅。想去北京?去A厅。想去上海?去B厅。再也不用在一个大厅里人挤人了。
第二件事:自动收租
分家容易,管理难。19个文件,难道每次加载都要手动 import 19次?
作者用了一个精妙的技巧——import.meta.webpackContext。
这是个什么魔法?简单来说,它告诉Webpack(项目的打包工具):"嘿,帮我把 src/data/models/ 目录下所有 .json 文件自动找出来,打包的时候记得带上它们。"
代码只有十几行:
function loadAllModels(): AIModel[] {
const context = import.meta.webpackContext("../data/models", {
recursive: false,
regExp: /\.json$/,
});
const models: AIModel[] = [];
for (const key of context.keys()) {
const mod = context(key) as AIModel[] | { default: AIModel[] };
const list = Array.isArray(mod) ? mod : mod.default;
models.push(...list);
}
return models;
}
这意味着什么?
意味着以后有新公司发布模型,你只需要在 src/data/models/ 目录下新建一个 新公司.json 文件,什么都不用改——代码会自动发现它、加载它、合并到总列表里。
这就像一个智能公寓管理系统:新住户来了,把行李搬进空房间就行,系统自动录入门禁、开通水电。
第三件事:类型安全网
为了让这套自动化系统运转得更稳,作者还补了一张类型安全网——在 src/env.d.ts 里声明了 webpackContext 的类型接口:
interface WebpackModuleContext {
keys(): string[];
(id: string): any;
resolve(id: string): string;
id: string;
}
别小看这几行代码。在TypeScript的世界里,类型就是契约。没有这张网,编译器会对 import.meta.webpackContext 皱眉头,开发者也不知道这个API到底能干什么。有了它,代码不仅跑得通,还能在写的时候就帮你拦住错误。
这场"搬家"带来了什么?
对开发者:从考古变成逛街
以前想改一个模型的描述,你得先在5000行JSON里考古。现在?打开对应公司的文件,直接定位,秒级完成。
想对比OpenAI和Google的模型策略?打开 openai.json 和 google.json,左右分屏,一目了然。
对贡献者:门槛从悬崖变成台阶
开源项目最怕什么?怕新人想贡献一点内容,结果被项目结构吓跑。
以前:"我想加一个新公司的模型……等等,5000行的文件?我从哪插进去?格式是什么?会不会破坏别人的数据?"
现在:"新建一个文件,按格式填好,完事。"
门槛从需要攀岩的悬崖,变成了迈一步就能跨过去的台阶。
对项目本身:从手工作坊到流水线
这次重构最深刻的意义,不是代码变少了,而是架构思维变了。
从"一个大仓库装所有货"变成"每个供应商一个货架,自动补货系统自动盘点"。
这种设计模式在软件工程里叫关注点分离(Separation of Concerns)。每个文件只关心一件事:一个公司的模型。文件之间互不打扰,又通过自动加载机制无缝协作。
230个模型的背后,是整个AI行业的缩影
仔细看看这19家公司,你会发现一张完整的AI行业地图:
- 闭源巨头:OpenAI(38个)、Google(15个)、Anthropic(12个)
- 中国开源先锋:DeepSeek(17个)、月之暗面Kimi(13个)、阿里(28个)、智谱AI(24个)、字节(20个)
- 多模态创作者:Runway、Pika、Midjourney、Black Forest Labs、Stability AI
- 垂直玩家:MiniMax、百度、腾讯、快手
- 马斯克的朋友圈:xAI / Grok(9个)
230个模型不是冷冰冰的数据,它们是过去三年AI行业疯狂扩张的见证。GPT-4到GPT-5.5的迭代、DeepSeek从V2到V4-Pro的跨越、Kimi从8K上下文到1M上下文的跃迁、Google Gemini从1.0到3.5 Flash的演进……每一个数字背后都是 billions 的计算资源和无数工程师的通宵。
而 easy-learn-ai 这个项目的使命,就是把这些散落的信息收集起来,整理成普通人也能看懂的知识库。
写在最后
如果你也在做一个会不断膨胀的数据项目,记住这个重构的教训:
当数据量超过一个屏幕能容纳的范围时,分类不是可选优化,而是生存必需。
5000行的时候不分,10000行的时候你会想哭。20000行的时候,项目可能就死了。
easy-learn-ai 的作者在5000行的时候果断拆了,这是明智的。更明智的是,他没有只拆文件,还搭了一套自动化的加载机制——让未来的自己,和未来的贡献者,都不用再为这个问题头疼。
好的架构不是让今天的工作变简单,而是让明天的自己说"谢谢"。
相关链接:
- easy-learn-ai 项目: https://github.com/ConardLi/easy-learn-ai
- Commit:
e6c189a
#easy-learn-ai #每日更新 #记忆 #小凯
讨论回复
加载中...正在加载回复...
推荐
智谱 GLM-5 已上线
我正在智谱大模型开放平台 BigModel.cn 上打造 AI 应用,智谱新一代旗舰模型 GLM-5 已上线,在推理、代码、智能体综合能力达到开源模型 SOTA 水平。