当 AI 模型不再挤在一间房里:一个项目的"分家"革命
当 AI 模型不再挤在一间房里:一个项目的"分家"革命
> 来源 commit: e6c189a — easy-learn-ai 每日更新
---
一、一个 5000 行的"巨无霸"
想象你走进一座图书馆,发现所有书——小说、教科书、杂志、地图——全部被钉在一本巨大的册子上。这本册子有五千页,没有目录,没有分类,只有密密麻麻的文字从前到后铺满每一页。你想找一本关于DeepSeek的书?翻到三千页左右,凭感觉摸索。想知道阿里最新的Qwen模型?也许在第两千四百页,也许不在,因为你也不确定上次更新是什么时候塞进去的。
这听起来荒谬,对吧?但在软件开发的世界里,这种"把所有东西塞进一个文件"的做法,比大多数人愿意承认的要常见得多。
easy-learn-ai 项目就是这样一个例子。在它的早期版本中,所有 AI 模型的信息——从 OpenAI 的 GPT-4 到 DeepSeek 的 R1,从阿里巴巴的 Qwen 到 Anthropic 的 Claude,从文本模型到图像生成器到视频工具——全部塞进了一个叫做 model.json 的单一文件里。这个文件有 5000 多行。
5000 行是什么概念?如果你把它打印出来,按标准 A4 纸排版,大概能有七八十页。想象一下,一个前端开发者想要更新某个模型的上下文窗口参数,他得在这八十页纸里翻找。更糟的是,这个文件旁边还有两个"兄弟":img.json 和 video.json,按模态拆分,但依然是各自独立的大块头。
二、为什么"一个大文件"会杀死项目
在程序员的世界里,有一个半开玩笑的说法:"如果文件超过 500 行,你就该考虑拆分了。"5000 行?那是灾难的前奏。
但为什么大文件是坏的?让我们用一个生活的比喻来理解。
想象你和一个室友合租一间公寓。刚开始,你们共享所有东西——冰箱、衣柜、书架。便宜、省事、不用想太多。但随着时间推移,问题出现了:你想在书架上放你的编程书,室友想放他的漫画。冰箱里的牛奶过期了,但谁买的?不知道。衣柜越来越满,找一件衬衫要翻十分钟。
软件项目的大文件就像这间过度共享的公寓。所有人都在往同一个地方塞东西,没有人清楚东西在哪里,改动一个角落可能意外碰倒了另一个角落。在 easy-learn-ai 的情况下,每当有人想添加一个新模型——比如说,Google 刚发布了 Gemini 的新版本——开发者必须打开这个 5000 行的庞然大物,在茫茫数据中找到合适的插入位置,小心翼翼地添加几十行 JSON,然后祈祷自己没有破坏别的模型数据的格式。
更大的问题是:协作。
当多个开发者同时在同一个文件上工作时,Git(版本控制工具)的合并冲突会变得极其痛苦。Alice 在文件末尾加了 DeepSeek 的新模型,Bob 在同一段落修改了 OpenAI 的描述,两个人同时提交——Boom,冲突。解决这种冲突就像两个人试图同时从相反方向解开一团毛线,越急越乱。
三、拆分的艺术:从一本百科全书到一座图书馆
2026 年 7 月 12 日,easy-learn-ai 项目做了一个重大的架构决策:拆分。
不是小修小补,而是彻底的重组。那个 5000 行的 model.json 被删除了。img.json 和 video.json 也被删除了。取而代之的,是一个名为 src/data/models/ 的新目录,里面住着 19 个独立的 JSON 文件——每个文件对应一家 AI 厂商。
让我们看看这个新"图书馆"的书架:
| 厂商 | 文件 | 代表模型 |
|---|---|---|
| 阿里巴巴 | alibaba.json | Qwen3.7-Max、Qwen3.5-Plus |
| Anthropic | anthropic.json | Claude Opus 4.8、Sonnet 4.6 |
| 百度 | baidu.json | ERNIE 系列 |
| Black Forest Labs | black-forest-labs.json | FLUX 图像生成 |
| 字节跳动 | bytedance.json | Seed 系列 |
| DeepSeek | deepseek.json | DeepSeek-R1 及蒸馏模型 |
google.json | Gemini 2.0/3.0/3.5 系列 | |
| 快手 | kuaishou.json | Kling 视频 |
| Meta | meta.json | Llama 系列 |
| Midjourney | midjourney.json | V6/V7 图像 |
| MiniMax | minimax.json | abab 系列 |
| 月之暗面 | moonshot.json | Kimi 系列 |
| OpenAI | openai.json | GPT-4/GPT-4o/o 系列 |
| Pika | pika.json | Pika 视频生成 |
| Runway | runway.json | Gen-3 视频 |
| Stability AI | stability-ai.json | Stable Diffusion 系列 |
| 腾讯 | tencent.json | 混元系列 |
| xAI | xai.json | Grok 系列 |
| 智谱 AI | zhipu-ai.json | ChatGLM/GLM 系列 |
四、为什么这个拆分如此精妙
1. 单一职责原则
在软件工程中,有一条黄金法则叫做"单一职责原则":一个模块应该只做一件事,而且把它做好。
在拆分之前,model.json 承担着所有厂商、所有模态、所有模型的数据存储职责。它既是中国厂商的档案柜,也是美国厂商的档案柜;既是文本模型的数据库,也是图像和视频模型的数据库。一个人不可能同时是医生、律师、厨师和飞行员——文件也一样。
拆分之后,每个文件只做一件事:存储一家厂商的模型信息。deepseek.json 只管 DeepSeek。anthropic.json 只管 Anthropic。如果一个开发者需要更新 Claude 的新版本,他只需要打开一个文件,而这个文件只有 373 行——不到原来的十分之一。找到目标、修改、保存、提交。干净利落。
2. 自动发现:让代码自己找路
拆分的另一个精妙之处,在于 API 层的重构。
原来的 modelApi.ts 大概是这么工作的:
import modelData from '../utils/model.json';
import imgData from '../utils/model/img.json';
import videoData from '../utils/model/video.json';
// 然后手动合并这三份数据
const allModels = [...modelData, ...imgData, ...videoData];
问题在于:每当你新增一个数据源,你都得回到这个 API 文件,加一行 import,加一句合并逻辑。这叫做"紧耦合"——数据和加载逻辑死死绑在一起。
重构后的 modelApi.ts 做了一件非常聪明的事。它使用了 webpack 的一个特性,叫做 import.meta.webpackContext:
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;
}
这段代码说的是:"我不关心目录里有多少个文件,也不关心它们叫什么名字。我只要所有以 .json 结尾的文件,把它们全部加载进来,合并成一个数组。"
这是什么意思?这意味着,如果有一天 Mistral AI(法国的开源明星)发布了新模型,开发者只需要做一件事:在 src/data/models/ 目录下创建一个 mistral.json 文件,填入数据。API 层不需要改一行代码。下次构建时,webpack 会自动发现这个新文件,把它加载进去。
这就像图书馆的自动索引系统:新增一个书架,不需要重新编写整个图书馆的目录系统,系统自己会扫描到新书架的存在。
3. 统一的" DNA"
拆分不是简单的"一刀切"。所有这些文件都遵循同一套数据结构:
{
"modelName": "DeepSeek-R1",
"company": "DeepSeek",
"country": "中国",
"openSourceStatus": "开源",
"releaseDate": "2025-01-20",
"description": "...",
"modelTags": ["文本生成", "深度思考"],
"contextWindow": 64,
"maxGenerationTokenLength": 16,
"relatedLinks": [...]
}
每一个模型都有名字、所属公司、国籍、开源状态、发布日期、描述、能力标签、上下文窗口大小、最大生成长度,以及相关链接。这套统一的"DNA"意味着:无论模型来自中国的 DeepSeek 还是美国的 OpenAI,前端代码都可以用同一套逻辑来展示它们。
这非常像生物分类学。狮子和蓝鲸看起来天差地别,但它们共享同一套分类框架:界、门、纲、目、科、属、种。AI 模型也一样——Qwen 和 GPT-4 在架构和训练数据上可能完全不同,但在 easy-learn-ai 的"分类学"里,它们有统一的"元数据外衣"。
4. 父子关系的建立
数据结构中还有一个巧妙的字段:parent(父模型)。
以 DeepSeek 为例:
- DeepSeek-R1 是"父亲"
- DeepSeek-R1-Distill-Qwen-1.5B、7B、14B、32B 是"孩子"
- DeepSeek-R1-Distill-Llama-8B、70B 也是"孩子"
parent 字段显式标注。它的意义不只是数据组织上的美观——它反映了 AI 模型世界中一个重要的现实:蒸馏(Distillation)。什么是蒸馏?简单来说,就是一个大模型(老师)把自己的"知识"传授给小模型(学生)。老师可能有几千亿参数,学生只有几十亿。通过蒸馏,学生模型在保留老师大部分能力的同时,运行速度更快、成本更低、更适合在普通设备上部署。
easy-learn-ai 用 parent 字段记录这种关系,让用户一眼就能看出:这些 Qwen 和 Llama 的变体,本质上都是 DeepSeek-R1 的"学生"。这是一种知识图谱的雏形。
五、19 家厂商背后的全球 AI 版图
这次重构不仅仅是一次代码整理。它无意间绘制了一幅 2026 年 AI 产业的全球地图。
中国力量:7 家厂商
- 阿里巴巴(Qwen):开源策略激进,Qwen3.5-Plus 号称性价比是 Gemini 3 Pro 的 18 倍
- 百度(ERNIE):国内最早布局大模型的巨头之一
- 字节跳动(Seed):TikTok 母公司,从推荐算法走向通用 AI
- DeepSeek:凭借 R1 推理模型在 2025 年初震动全球,开源路线
- 月之暗面(Kimi):以超长上下文窗口著称
- 智谱 AI(ChatGLM):清华系,GLM 架构独树一帜
- 腾讯(混元):社交与游戏巨头的 AI 布局
- MiniMax、快手:新兴力量,MiniMax 专注多模态,快手押注视频生成
美国力量:8 家厂商
- OpenAI:GPT 系列的开创者,闭源商业化的标杆
- Anthropic:由 OpenAI 前员工创立,Claude 系列以安全和对齐著称
- Google(DeepMind):Gemini 系列,科研实力深厚,上下文窗口激进
- Meta(Llama):开源大模型的最大推手,Llama 系列被全球广泛采用
- xAI:马斯克的 Grok,带着"叛逆"和"实时"的标签
- Midjourney、Runway、Pika、Stability AI:图像和视频生成的"创意四天王"
欧洲力量:1 家
- Black Forest Labs(FLUX):德国团队,FLUX 系列在开源图像生成领域异军突起
六、开源 vs 闭源:一场无声的战争
数据结构中还有一个有趣的字段:openSourceStatus。
看看这些厂商的选择:
开源派:DeepSeek(中国)、阿里巴巴(Qwen)、Meta(Llama)、智谱 AI(GLM)、Stability AI、Black Forest Labs
闭源派:OpenAI、Anthropic、Google(Gemini)、百度(ERNIE)、字节跳动(Seed)、月之暗面(Kimi)、腾讯(混元)、xAI
开源和闭源的选择不仅仅是技术决策,它是一场关于"权力"的战争。开源意味着:任何人都可以下载模型、在自己的电脑上运行、修改它、甚至商业化。闭源意味着:厂商控制一切,你只能通过 API 调用,按 token 付费,永远无法知道模型内部如何运作。
DeepSeek 在 2025 年初以开源的 R1 模型震惊世界,证明开源模型在推理能力上可以与 OpenAI 的闭源 o1 系列一较高下。Meta 的 Llama 系列已经成为全球开发者构建应用的事实标准。而 OpenAI 和 Anthropic 则押注闭源路线,用 API 服务构建商业护城河。
easy-learn-ai 用同一个数据结构同时收录开源和闭源模型,不做评判,只呈现事实。这种中立本身就是一种态度:在 AI 的世界里,用户应该有知情权——知道这个模型是开放的还是封闭的,知道它的能力边界在哪里,知道它的"国籍"和"出身"。
七、上下文窗口:AI 的"记忆力"
数据结构中的另一个关键数字:contextWindow(上下文窗口)。
上下文窗口是什么?它是 AI 模型一次能"记住"多少内容的能力。想象一下,你正在读一本长篇小说,上下文窗口就是你一次能回头参考多少页。如果窗口太小,读到后面,模型就忘了前面说了什么。
这个字段的单位是"K"——千个 token(大致可以理解为千个字)。看看各家厂商在这个维度上的军备竞赛:
- Claude Opus 4.8:1000K(100 万字)
- Gemini 2.0 Flash / 3.5 Flash:1000K+(约 100 万字)
- Qwen3.7-Max / 3.6-Plus:1000K(约 100 万字)
- Kimi(月之暗面):以超长上下文著称
而在另一端,早期的 GPT-4 只有 8K(约 8000 字),相当于一篇中等长度的论文。GPT-4 Turbo 提升到 128K(约 12 万字),已经可以处理一本短篇小说的内容。
上下文窗口的扩展,是 AI 从"聊天工具"进化到"知识助手"的关键一跃。它让 AI 可以处理整本书、整个代码库、整份法律合同、整个病历档案。easy-learn-ai 把这个数字放在每个模型的卡片里,让用户一目了然:这个模型的"记忆力"有多强。
八、技术细节背后的产品哲学
这次重构的代码改动虽然只有几十行(modelApi.ts 从 55 行变到更简洁的实现),但它的影响是深远的。它体现了一个优秀软件产品的核心哲学:
1. 可维护性 > 方便性
把所有东西塞在一个文件里,短期来看是"方便"的——不用想目录结构,不用管文件命名。但长期来看,它是维护的噩梦。拆分需要前期投入,但换来的是可持续的增长。
2. 可扩展性 > 完美性
API 层使用 webpackContext 自动扫描,意味着项目已经为未来的增长预留了空间。新增厂商?加一个文件就行。不需要改代码,不需要发版,不需要担心破坏现有功能。这种"面向未来"的设计,是区分业余项目和专业项目的关键。
3. 数据即产品
easy-learn-ai 的核心价值不是前端 UI 有多华丽,而是它的数据有多全面、多准确、多及时。这次重构让数据的维护和更新变得更容易,直接提升了产品的核心竞争力。
九、结语:一次小小的重构,一个大大的世界
easy-learn-ai 的这次"分家",表面上只是把一个 JSON 文件拆成了 19 个。但如果我们拉远镜头看,它实际上是在做一件更重要的事:建立一个结构化、可持续、可扩展的 AI 知识基础设施。
在这个基础设施里:
- 每个 AI 模型都有自己的"身份证"(统一的数据结构)
- 每家厂商都有自己的"档案柜"(独立的文件)
- 整个系统可以自动"发现"新成员(webpackContext 扫描)
- 用户可以清晰地看到模型之间的关系(parent 字段)
- 开源与闭源、中国与美国、文本与图像,所有维度的信息都被平等地呈现
在 AI 技术以月为单位迭代的世界里,信息和知识的组织方式,往往比信息本身更重要。因为再快的新闻也会过时,但一个良好的知识结构可以持续生长、演化、容纳新的内容。
easy-learn-ai 的这次进化,就像从一本 handwritten 的笔记本,升级成了一座有索引系统的图书馆。而这座图书馆的门,向所有好奇的人敞开。
---
*Commit: e6c189a | easy-learn-ai 项目 | 2026年7月12日*
#easy-learn-ai #每日更新 #AI #开源 #记忆 #小凯