
文章目录
-
- [1. 先把问题讲清楚:Qwen 不只是一个模型名](#1. 先把问题讲清楚:Qwen 不只是一个模型名)
- [2. tokenizer:中文模型的第一道工程成本](#2. tokenizer:中文模型的第一道工程成本)
- [3. Base 和 Instruct:不是谁更高级,而是目标不同](#3. Base 和 Instruct:不是谁更高级,而是目标不同)
- [4. Coder 模型:代码能力不是"会写几段代码"](#4. Coder 模型:代码能力不是“会写几段代码”)
- [5. 工具调用:不是会输出 JSON 就够了](#5. 工具调用:不是会输出 JSON 就够了)
- [6. 长上下文:和 RAG 是配合关系](#6. 长上下文:和 RAG 是配合关系)
- [7. 多模态 Qwen:不要只测"看图说话"](#7. 多模态 Qwen:不要只测“看图说话”)
- [8. 小模型和 MoE:同一生态里的不同成本选择](#8. 小模型和 MoE:同一生态里的不同成本选择)
- [9. 一个 Qwen 项目选型实验](#9. 一个 Qwen 项目选型实验)
- [10. 常见误区](#10. 常见误区)
- [11. 小结](#11. 小结)
- 大模型视角
- 下一篇
摘要:Qwen 系列的学习价值,不只是"中文能力不错的模型",而是一个现代大模型家族如何围绕通用对话、代码、多模态、长上下文、工具调用、小模型、MoE 和部署生态做工程化拆分。本文不追逐某个时间点的榜单,也不把不同版本混成一个抽象名字,而是从开发者视角讲清楚:为什么 tokenizer 会影响中文和 RAG 成本,Base/Instruct/Coder/VL/MoE 分别解决什么问题,工具调用该如何评估,长上下文为什么要和证据检索配合,以及项目选型应该如何做最小验证。
- 前置知识:专栏一 Tokenization、 KV Cache、上下文长度扩展;上一篇 LLaMA 架构
- 阅读时间:55-70 分钟
- 代码环境:Python 3.10+,示例只依赖标准库
- 读完目标:能用任务视角理解 Qwen 模型家族,能设计中文/代码/工具/多模态/长上下文评估集,能避免"只看模型名选型"的错误
1. 先把问题讲清楚:Qwen 不只是一个模型名
很多开发者第一次接触 Qwen,会把它理解成"阿里的中文大模型"。这个理解不算错,但太浅。对实际项目来说,Qwen 更像一组围绕不同任务形态拆分的模型路线:通用对话、代码、数学、多模态、长上下文、小模型、MoE、工具调用、开源部署生态。
这类模型家族的核心不是"某个版本一定比另一个版本强",而是:同一个模型家族会为不同任务提供不同形态的基座,开发者要选的是适合任务的版本,而不是最响亮的名字。
可以先把 Qwen 这类模型家族拆成几个角色:
| 类型 | 主要用途 | 选型时重点看什么 |
|---|---|---|
| Base | 继续预训练、SFT、研究实验 | tokenizer、上下文、许可证、训练稳定性 |
| Instruct/Chat | 直接对话、问答、Agent 原型 | 指令遵循、拒答、格式、工具调用 |
| Coder | 代码生成、解释、修复、测试 | 单测通过率、API 真实性、项目上下文 |
| VL/多模态 | 图片、截图、OCR、图表、文档 | 小字、表格、图表、证据定位 |
| 小模型 | 本地、端侧、低成本任务 | 延迟、量化后质量、任务边界 |
| MoE/大模型 | 复杂任务和高容量需求 | 激活参数、吞吐、显存、路由和部署 |
所以学习 Qwen 时,不要只背版本历史。更有价值的问题是:
text
1. 我的输入是什么:中文、英文、代码、图片、长文档还是工具结果?
2. 我的输出是什么:自然语言、JSON、代码补丁、工具参数还是引用答案?
3. 我需要继续微调,还是直接推理?
4. 我能接受多少延迟和成本?
5. 我有没有自己的评估集,而不是只看公开榜单?
2. tokenizer:中文模型的第一道工程成本
大模型不是直接处理字符,而是处理 token。tokenizer 决定文本如何切分。对中文开发者来说,这件事尤其重要,因为中文、英文、数字、代码、符号、表格经常混在一起。
同一段内容,如果 tokenizer 切得更碎,会带来几个后果:
- 同样上下文窗口能放的文档更少;
- RAG 检索片段更容易被截断;
- prefill 成本和费用更高;
- KV Cache 更快增长;
- 长文档任务延迟更大。
下面用一个极简切分器建立直觉。它不是 Qwen tokenizer,也不代表真实 token 数,只是让你看到中英混合文本为什么不能用字符数估算。
python
# Python 3.10+
import re
samples = [
"请根据合同条款解释 force majeure 的适用边界,并输出 JSON。",
"def query_user(user_id): return db.session.get(User, user_id)",
"报销金额为 12,345.67 元,审批状态为 pending。",
]
pattern = r"[A-Za-z_][A-Za-z0-9_]*|\d+(?:,\d{3})*(?:\.\d+)?|[\u4e00-\u9fff]|[^\s]"
for text in samples:
pieces = re.findall(pattern, text)
print(text)
print(pieces)
print("rough_count=", len(pieces), "\n")
这个例子告诉我们:中文业务文本不是纯中文,常常包含英文术语、代码标识符、数字格式和 JSON 字段。真实项目必须用目标模型的 tokenizer 做统计。
选型时建议抽样统计几类文本:
text
1. 普通中文问答;
2. 中英混合技术文档;
3. 合同/制度/法律条款;
4. 代码和配置文件;
5. OCR 后的票据或表格文本;
6. RAG 检索片段。
如果某个模型在你的核心文本上 token 数明显更多,它在长上下文、RAG 和成本上就未必合适。
3. Base 和 Instruct:不是谁更高级,而是目标不同
Base 模型和 Instruct/Chat 模型经常被混用,但它们适合的工作不同。
Base 模型更接近预训练后的语言模型,通常适合:
text
1. 继续预训练 CPT/DAPT;
2. 做领域 SFT 的起点;
3. 研究模型行为;
4. 做特定任务的深度适配。
Instruct/Chat 模型经过指令微调和对齐,更适合:
text
1. 直接构建聊天助手;
2. 做 RAG 问答;
3. 做结构化输出;
4. 做工具调用和 Agent 原型;
5. 做业务 prompt 验证。
一个常见错误是:拿 Base 模型直接做客服问答,然后抱怨它"不听话";或者拿 Instruct 模型继续做大量领域预训练,却没有评估对齐和指令能力是否被破坏。
可以用下面表格判断:
| 需求 | 更合适起点 |
|---|---|
| 我要直接做中文问答 demo | Instruct/Chat |
| 我要继续喂大量领域原始文本 | Base 或适合 CPT 的基座 |
| 我要做 LoRA 指令微调 | 通常 Base 或 Instruct 都可实验,但目标不同 |
| 我要做工具调用 Agent | 优先看 Instruct/Chat 的工具和 JSON 稳定性 |
| 我要研究模型原始能力 | Base |
这里没有绝对答案。最终要用评估集验证,而不是靠模型后缀猜。
4. Coder 模型:代码能力不是"会写几段代码"
Qwen 这类模型家族里常会有 Coder 路线。代码模型的评估不能只看回答是否像代码,而要看能不能通过真实工程约束。
代码任务至少分几类:
| 任务 | 评估方式 |
|---|---|
| 代码补全 | 语法正确、上下文变量一致 |
| bug 修复 | 单元测试通过、修改范围合理 |
| 代码解释 | 是否抓住关键逻辑和边界条件 |
| 单测生成 | 是否覆盖异常路径和真实断言 |
| API 使用 | 是否编造不存在的库函数 |
| 项目级修改 | 是否理解多文件依赖 |
下面用一个最小"代码评估记录"示例说明,不要只保存模型答案,还要保存能否验证。
python
# Python 3.10+
eval_case = {
"task_id": "py_bugfix_001",
"prompt": "修复 add_user 函数中重复用户名未校验的问题。",
"files": ["app/users.py", "tests/test_users.py"],
"expected_check": "pytest tests/test_users.py::test_duplicate_user",
"model_patch": "...",
"passed": False,
"failure_reason": "模型添加了校验,但没有保持原异常类型",
}
for k, v in eval_case.items():
print(k, ":", v)
这类记录能帮助你做错误分析:模型是语法错、API 编造、没理解需求,还是破坏了已有行为。
如果你的业务是代码助手,公开代码榜单只能作为参考。真正有价值的是把公司代码规范、常用框架、单测和错误日志做成评估集。
5. 工具调用:不是会输出 JSON 就够了
现代 Qwen 类 Instruct 模型常被用于工具调用。工具调用的核心不是"输出一段 JSON",而是模型要在合适时机选择合适工具,并生成合法参数,还要处理工具失败。
一个最小工具 schema:
python
# Python 3.10+
import json
schema = {
"name": "search_policy",
"description": "查询公司制度文档",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string"},
"top_k": {"type": "integer"}
},
"required": ["query"]
}
}
model_output = '{"name":"search_policy","arguments":{"query":"北京住宿报销标准","top_k":3}}'
call = json.loads(model_output)
print(call["name"])
print(call["arguments"]["query"])
接下来要做校验。下面是一个简化版工具参数检查器:
python
# Python 3.10+
def validate_call(call, schema):
errors = []
if call.get("name") != schema["name"]:
errors.append("unknown tool")
args = call.get("arguments", {})
required = schema["parameters"].get("required", [])
for key in required:
if key not in args:
errors.append(f"missing required argument: {key}")
if "top_k" in args and not isinstance(args["top_k"], int):
errors.append("top_k must be integer")
return errors
print(validate_call(call, schema))
print(validate_call({"name": "search_policy", "arguments": {"top_k": "3"}}, schema))
评估工具调用要分层看:
text
1. 是否该调用工具;
2. 工具选择是否正确;
3. JSON 是否合法;
4. 参数类型是否正确;
5. 权限是否允许;
6. 工具失败后是否能修复或解释;
7. 多轮状态是否一致;
8. 最终回答是否基于工具结果。
如果只测试 JSON 合法率,很容易高估模型 Agent 能力。
6. 长上下文:和 RAG 是配合关系
长上下文能力很有价值,但不能被理解成"把所有资料塞进去就行"。长上下文至少有三层能力:
text
放得下:上下文窗口足够大;
找得到:模型能定位关键证据;
用得对:模型能整合证据并按问题回答。
长上下文成本也不只是输入 token 数。生成过程中,KV Cache 会随序列长度增长。下面用常见估算建立数量级直觉:
python
# Python 3.10+
def kv_cache_gb(layers, seq_len, kv_heads, head_dim, bytes_per_value=2):
# 2 表示 Key 和 Value 两份缓存
return layers * seq_len * kv_heads * head_dim * 2 * bytes_per_value / 1024**3
for seq_len in [4096, 32768, 131072]:
gb = kv_cache_gb(layers=32, seq_len=seq_len, kv_heads=8, head_dim=128)
print(seq_len, f"{gb:.2f} GB")
这个数字说明:长上下文会直接影响显存、并发和延迟。RAG 的作用是先找证据,减少无关上下文;长上下文的作用是承载更多证据和对话状态。两者不是互相替代。
长上下文评估应包含:
| 能力 | 测试方式 |
|---|---|
| 证据定位 | 关键事实放在开头/中间/结尾分别测试 |
| 抗干扰 | 加入相似但错误的干扰段落 |
| 跨段整合 | 答案需要合并多个位置证据 |
| 引用准确 | 输出对应页码、段落或原文片段 |
| 无证据拒答 | 上下文没有答案时不能编造 |
如果模型窗口很长,但找不到中间证据,业务效果仍然不可靠。
7. 多模态 Qwen:不要只测"看图说话"
VL 模型让模型处理图片、截图、文档和图表。业务评估不能只问"图里有什么"。真实任务更像:
text
从发票图里抽取金额、日期、税号;
判断截图中哪个按钮是禁用状态;
读取图表趋势并说明异常点;
对比两张图片中的字段差异;
基于文档截图回答带页码的问题。
一个多模态评估记录可以这样设计:
json
{
"task_id": "invoice_001",
"input_type": "image",
"question": "提取发票金额和日期,并给出证据区域。",
"expected_fields": ["amount", "date", "evidence_region"],
"risk": "medium",
"manual_review_required": true
}
评估点包括:
- 小字 OCR;
- 表格行列关系;
- 图表坐标轴和单位;
- UI 控件位置和状态;
- 多图编号是否混淆;
- 看不清时是否承认不确定;
- 是否输出可复核证据。
多模态能力要和成本一起看。图片分辨率越高,视觉 token 和延迟通常越大。不能只看 demo 效果。
8. 小模型和 MoE:同一生态里的不同成本选择
模型家族通常会同时提供小模型和更大/稀疏模型,这是两种不同成本路线。
小模型适合:
text
1. 高频低风险任务;
2. 本地或私有化部署;
3. 意图分类、轻量摘要、简单 RAG 整理;
4. 成本敏感场景;
5. 作为路由器或预处理器。
MoE 或更大模型适合:
text
1. 复杂推理;
2. 多任务通用助手;
3. 高价值低频任务;
4. 对答案质量要求更高的场景;
5. 有能力处理多卡部署和推理调优的团队。
不要用"最大模型处理所有请求"。更合理的是分层:小模型做简单任务和路由,大模型处理复杂任务,高风险场景转人工。
9. 一个 Qwen 项目选型实验
真正选型时,可以做一个小型评估矩阵。下面是纯 Python 的评分汇总示例:
python
# Python 3.10+
results = [
{"model": "qwen_candidate_a", "task": "json", "pass": 92, "total": 100},
{"model": "qwen_candidate_a", "task": "rag", "pass": 76, "total": 100},
{"model": "qwen_candidate_a", "task": "tool", "pass": 81, "total": 100},
{"model": "qwen_candidate_b", "task": "json", "pass": 88, "total": 100},
{"model": "qwen_candidate_b", "task": "rag", "pass": 84, "total": 100},
{"model": "qwen_candidate_b", "task": "tool", "pass": 73, "total": 100},
]
summary = {}
for r in results:
summary.setdefault(r["model"], {})[r["task"]] = r["pass"] / r["total"]
for model, scores in summary.items():
print(model, scores)
这个例子故意不输出一个总分,因为不同项目权重不同。如果你做 Agent,工具调用权重更高;如果你做知识库,RAG 引用准确更重要;如果你做自动报表,JSON 合法率更关键。
选型过程建议:
text
1. 先用 50-100 条真实样本做快速筛选;
2. 再用 500-1000 条分层评估集做候选对比;
3. 对失败样本做归因:事实、格式、工具、权限、长度、语言;
4. 加入成本:首 token、tokens/s、显存、并发、价格;
5. 最终选择"任务收益/成本"最合适的模型。
10. 常见误区
误区一:Qwen 就等于中文闲聊模型。 真实项目常包含中英混合、代码、工具、表格、长文档和多模态输入。
误区二:会输出 JSON 就等于能做工具调用。 工具调用还要看时机、工具选择、参数类型、权限、失败恢复和最终答案。
误区三:长上下文可以替代 RAG。 长上下文解决容量,RAG 解决证据检索、更新和引用,两者通常配合。
误区四:同一模型家族能力都差不多。 Base、Instruct、Coder、VL、小模型、MoE 的训练目标和成本结构不同。
误区五:公开榜单可以代替业务评估。 榜单反映部分能力,不能覆盖你的数据、格式、权限和成本约束。
11. 小结
Qwen 系列的学习价值在于理解现代模型家族的工程化拆分:tokenizer 决定中文和 RAG 成本,Base/Instruct 决定训练和推理起点,Coder 要用单测和项目上下文评估,VL 要测 OCR、图表和证据定位,工具调用要测 schema、权限和失败恢复,长上下文要和 RAG 一起看,小模型和 MoE 则代表不同成本结构。
对开发者来说,选型不是"哪个 Qwen 最强",而是"哪个候选模型在我的任务评估集上,以可接受成本稳定通过"。这也是后续所有模型家族分析都应遵循的思路。
大模型视角
从大模型生态看,Qwen 代表了一条应用导向很强的路线:一个模型家族不再只是单点聊天模型,而是围绕代码、多模态、工具、长上下文、端侧和部署生态形成组合。理解这种组合,比背某个版本的排名更有价值。
下一篇
下一篇会讲 ChatGLM/GLM 系列。我们会从训练目标、对话模板、loss masking、本地部署和中文业务评估角度,理解另一条中文大模型路线。