最近我在理解模型内部结构时,经常看到几个词:Dense、MoE、推理模型、编程模型、多模态模型、开放权重模型。
刚开始很容易把它们当成同一层的分类,例如认为一个模型要么是 MoE,要么是推理模型,要么是多模态模型。
其实不是。
这些词分别在回答不同的问题。一个模型通常同时属于很多类别:
1. 按内部架构分类
1.1 Dense:稠密模型
Dense 模型处理每个 Token 时,大部分模型层和参数都会参与计算。
它可以理解成一个整体大脑。Java、Python、产品知识和数学能力都分布在整个模型的参数中,没有清晰分开的“Java 小模型”和“Python 小模型”。
Dense 的特点大概是:
- 结构相对直接。
- 每个 Token 会使用较多参数参与计算。
- 行为通常比较稳定。
- 模型规模增大后,推理成本也会明显增加。
1.2 MoE:混合专家模型
MoE 全称 Mixture of Experts。它会在部分网络层中放置多个 Expert,再由内部 Router 为当前 Token 选择少数几个参与计算。
MoE 的核心价值是:模型可以拥有很大的总容量,但处理单个 Token 时只激活其中一部分参数。
例如 Qwen3 同时发布了 Dense 和 MoE 型号。其中 Qwen3-30B-A3B 有 30B 总参数、约 3B 激活参数;Qwen3-235B-A22B 有 235B 总参数、约 22B 激活参数。Qwen3 官方说明
DeepSeek-V3 也是 MoE,官方仓库给出的信息是 671B 主模型参数、每个 Token 激活约 37B 参数。DeepSeek-V3 官方仓库
这里要注意:
Expert 是模型内部的计算子网络,不是一个能够独立聊天、独立保存上下文的小模型。
MoE 也不等于多 Agent。MoE Router 选择的是模型内部参数,多 Agent 调度选择的是外部 Agent 实例和完整模型调用。
1.3 混合架构
还有一些模型会把 Transformer Attention 与状态空间、递归记忆、局部窗口、稀疏 Attention 等结构组合。
主要目标通常是:
- 降低长上下文计算量。
- 提高推理速度。
- 减少显存和 KV Cache 压力。
- 改善流式和超长序列处理。
因此,“是不是 Transformer”与“是不是 MoE”也不一定完全互斥。一个模型可以以 Transformer 为主体,同时使用 MoE 和其他长上下文优化。
2. 按基础模型结构分类
从输入输出方式看,Transformer 模型还常分成三种。
Encoder-only
主要擅长理解和表示输入,例如:
- 文本分类。
- 实体识别。
- 语义检索。
- Embedding。
输入文本 → 编码成语义表示
Decoder-only
根据已有 Token 持续预测后续 Token,目前多数聊天和生成式大模型属于这一类。
输入 + 已生成内容 → 下一个 Token → 继续生成
Encoder-Decoder
先编码输入,再由 Decoder 生成目标内容,常见于翻译、摘要和序列转换任务。
输入文本 → Encoder → 中间表示 → Decoder → 输出文本
这一分类描述的是基础网络组织方式;Dense/MoE 描述的是参数如何参与计算,两者仍然不是同一维度。
3. 按训练阶段分类
3.1 基础模型 Base Model
基础模型主要完成大规模预训练,核心任务通常是预测后续 Token。
它已经学到了语言、代码和知识模式,但不一定擅长:
- 按用户指令做事。
- 稳定输出固定格式。
- 多轮对话。
- 拒绝危险请求。
- 正确使用工具。
基础模型更像一个拥有大量知识、但还没有接受岗位培训的人。
3.2 指令/聊天模型
在基础模型之上继续进行指令微调和偏好训练,使模型学会:
- 识别系统、开发者和用户指令。
- 根据要求回答问题。
- 保持对话风格。
- 输出代码、表格或 JSON。
- 遵循安全和行为约束。
我们日常通过聊天客户端使用的模型,大部分已经经过这一阶段。
3.3 推理模型
推理模型针对数学、代码、规划、科学问题和复杂决策进行了进一步训练,使它能够在最终回答前使用更多中间计算。
用户问题
↓
理解目标和约束
↓
进行更多推理与检查
↓
生成最终回答
推理模型可能是 Dense,也可能是 MoE;可能只支持文本,也可能同时支持图片。推理描述的是训练和运行能力,不是唯一的底层架构。
3.4 领域模型
领域模型会针对某类数据和任务继续训练,例如:
- 编程。
- 数学。
- 医疗。
- 法律。
- 金融。
- 安全分析。
领域模型不一定从头训练,也可能由通用模型通过继续预训练、微调、蒸馏或强化学习得到。
4. 按主要能力分类
4.1 通用语言模型
面向写作、问答、知识解释、总结、翻译和一般推理。
它的覆盖面广,但不一定在每个垂直任务上都最好。
4.2 编程模型
针对代码进行更多训练、后训练或评测,常见能力包括:
- 生成和修改代码。
- 理解调用链。
- 修复 Bug。
- 执行终端和测试。
- 完成仓库级任务。
“编程模型”不等于内部存在 Java、Python、Go 等多个完整小模型。不同语言通常表现为模型内部不同特征的激活组合。
4.3 Agent/工具调用模型
这类模型更擅长输出结构化工具调用,并根据工具结果决定下一步。
模型判断需要证据
↓
输出工具名和参数
↓
Harness 校验并执行
↓
结果返回模型
↓
模型继续判断或给出结论
但它仍然只是模型:
支持工具调用的模型不等于完整 Agent,完整闭环还需要 Harness 管理上下文、权限、工具执行、重试和停止条件。
4.4 多模态模型
多模态模型可以理解或生成多种数据:
文本
图片
音频
视频
代码
↓
模型内部的统一或关联表示
例如 Google 将 Gemini 3.5 Flash 描述为原生多模态推理模型,可接收文本、图片、音频和视频。Google DeepMind 模型卡
“多模态”回答的是模型能处理什么数据,不表示它一定是 Dense 或 MoE。
4.5 专用模型
有些模型不负责聊天,而是完成一项明确任务:
| 类型 | 主要作用 |
|---|---|
| Embedding | 把文本、图片等内容转换成向量 |
| Reranker | 对检索结果重新排序 |
| ASR | 把语音转换成文字 |
| TTS | 把文字转换成语音 |
| 图片生成 | 根据文本或图片生成图片 |
| 视频生成 | 根据文本、图片或视频生成视频 |
| Moderation | 对内容进行安全分类 |
当前模型平台通常会把通用模型、图片、实时语音、转录和专业模型分开提供。OpenAI 模型目录
5. 按模态分类
如果只看输入输出,可以画成下面这样:
文本模型
文本 → 文本
视觉理解模型
图片 + 文本 → 文本
语音模型
音频 ↔ 文本/音频
图片生成模型
文本/图片 → 图片
视频生成模型
文本/图片/视频 → 视频
全模态模型
多种输入 → 多种输出
同样是多模态,有的模型只能“看图并回答文字”,有的还能原生生成图片或音频,不能只看到“多模态”三个字就认为能力完全相同。
6. 按部署方式分类
6.1 闭源 API 模型
自己的应用 → 厂商 API → 模型服务
特点:
- 不需要自己准备大规模推理资源。
- 模型权重不可见。
- 厂商可以更新模型和服务配置。
- 具体内部架构不一定公开。
6.2 开放权重模型
模型权重可以下载,并部署到自己的设备或服务器:
自己的应用 → 推理框架 → 本地模型权重
可以进行量化、微调和私有部署,但需要自己解决:
- 显存和内存。
- 推理框架适配。
- 并发和性能。
- 模型许可证。
- 安全和版本管理。
“开放权重”也不必然等于训练数据、训练代码和全部实现细节都完全开源。
6.3 端侧小模型
运行在手机、笔记本、浏览器或嵌入式设备上。
优势是:
- 延迟低。
- 可以离线使用。
- 数据可以不离开设备。
- 单次推理成本更容易控制。
限制通常是模型容量、上下文和复杂推理能力不如大型云端模型。
7. 按产品档位分类
厂商还经常把同一模型家族分成不同档位:
旗舰模型 → 复杂推理、编程和高价值任务
平衡模型 → 质量、速度和成本折中
轻量模型 → 分类、提取和高并发任务
端侧模型 → 本地和低延迟场景
这属于产品和成本定位,不一定意味着底层采用完全不同的架构。
同一个任务也不应该默认选择最大的模型。简单分类、字段提取和固定格式转换,可以先使用小模型;跨系统排查、架构设计和高风险判断,再使用更强的推理模型。
8. 一个模型应该怎么描述
不要只说“这是一个 MoE 模型”,可以完整描述成:
内部架构:MoE
训练形态:指令 + 推理
主要能力:代码 + 工具调用
模态:文本 + 图片输入,文本输出
部署方式:开放权重
产品档位:中大型模型
这样才能知道它到底适合什么场景。
举几个组合示意:
| 模型 | 架构 | 训练/能力 | 模态 | 部署 |
|---|---|---|---|---|
| Qwen3-32B | Dense | 指令、推理、通用与代码 | 文本 | 开放权重 |
| Qwen3-235B-A22B | MoE | 指令、推理、通用与代码 | 文本 | 开放权重 |
| DeepSeek-V3 | MoE | 通用、代码、推理增强 | 文本 | 开放权重/API |
| Gemini 3.5 Flash | 厂商未在当前模型卡中完整披露 | 推理、Agent、编程 | 文本、图片、音频、视频输入 | API |
这张表也说明了一个问题:厂商没有公开的架构信息,不应该根据模型表现自行猜测。
9. Harness 真正应该按什么选择模型
Harness 进行模型路由时,不应该只判断 Dense 还是 MoE,而应该维护一份模型能力目录:
model_id: example-model
architecture: moe
context_window: 200000
max_output_tokens: 32000
modalities:
- text
- image
capabilities:
reasoning: true
coding: true
tool_calling: true
deployment: api
cost_tier: balanced
latency_tier: medium
然后根据任务选择:
例如 Java 开发常见任务可以这样路由:
| 任务 | 更需要哪种模型 |
|---|---|
| 判断问题属于代码还是产品 | 小型指令模型 |
| 生成普通 Java DTO | 轻量编程模型 |
| 排查跨模块调用链 | 强编程/推理模型 |
| 根据截图排查前端问题 | 多模态编程模型 |
| 在仓库中修改并测试 | 支持工具调用的编程模型 + Harness |
| 代码向量检索 | Embedding 模型,不是聊天模型 |
10. 几个容易混淆的概念
MoE 不等于多 Agent
MoE:模型内部参数路由
多 Agent:Harness 外部任务编排
推理模型不等于另一种固定架构
Dense 和 MoE 都可以经过推理训练。
多模态不等于一定能生成多种内容
能看图片,不一定能生成图片;能听音频,也不一定能直接输出音频。
激活参数不等于部署只需要加载这些参数
MoE 每次只激活部分参数,但部署时通常仍要考虑完整权重、KV Cache、运行框架和并发需求,不能直接用“激活参数量”估算机器内存。
编程模型不等于内部包含多个语言小模型
Java、Python、Go 等能力通常分布在共享参数和内部特征中。
11. 最后总结
我现在对模型分类的理解是:不要只给模型贴一个标签,而要先确定自己在问哪个维度。
一句话总结:
MoE 描述内部计算,推理和编程描述能力,多模态描述输入输出,开放权重描述部署方式;这些标签可以同时出现在同一个模型上。