此前已对比过 Ollama、oMLX、MoXing 三条推理路线,关注的是推理速度。但推理速度只是工程问题,真正决定模型是否可用的是模型本身的能力。
Qwen3.8 的 27B 版本已经发布,但更小尺寸的尚未放出。本文转而回顾拥有多个小规模参数的 Qwen3.5 系列。
本文将 Qwen3.5 全系——0.8b、2b、4b、9b,外加一个 coding 特调的 omnicoder-2-9b——集中起来,用三套 SOTA 基准分别测量智力(推理)、知识(记忆)与代码(编程)三项能力。目标是回答两个问题:这些能力如何随参数规模变化;以及"能否让模型遗忘知识、仅保留智力"这一老问题。
测试环境与模型
MacBook Air M4, 16G 统一内存
推理引擎: Ollama 0.32.9
共五个模型,均为 Qwen3.5 系列:
| 模型 | 体积 | 量化 | 格式 |
|---|---|---|---|
| qwen3.5:0.8b-mlx | 1.2 GB | mxfp8 | safetensors |
| qwen3.5:2b-mlx | 3.1 GB | mxfp8 | safetensors |
| qwen3.5:4b-mlx | 4.0 GB | nvfp4 | safetensors |
| qwen3.5:9b-mlx | 8.9 GB | nvfp4 | safetensors |
| omnicoder-2-9b | 5.7 GB | Q4_K_M | GGUF |
前四个为官方版本;omnicoder 是社区上传的 coding 特调版,基于 Qwen3.5 9B 微调而来。将其纳入,可作为"知识被消除后剩余能力"的对照样本。
所有测试都用 temperature=0、关闭思考,每道题只生成一次(pass@1)。
智力 vs 知识:SOTA 基准
先界定"智力"与"知识"的区分。采用四套数据集:
- 智力(题面提供充分信息,考察推理):HellaSwag(常识推理)+ GSM8K(小学数学应用题)
- 知识(题面不提供,考察记忆):TriviaQA(冷门事实问答)+ MMLU(学科知识)
各抽样 20 题,结果如下:
| 模型 | 智力(推理) | 知识(记忆) | 智力−知识差 |
|---|---|---|---|
| qwen3.5:0.8b | 22% | 20% | +2% |
| qwen3.5:2b | 28% | 25% | +2% |
| qwen3.5:4b | 38% | 28% | +10% |
| qwen3.5:9b | 58% | 48% | +10% |
| omnicoder-2-9b | 15% | 12% | +2% |
分项数据:
| 模型 | HellaSwag | GSM8K | TriviaQA | MMLU |
|---|---|---|---|---|
| 0.8b | 8/20 | 1/20 | 3/20 | 5/20 |
| 2b | 11/20 | 0/20 | 4/20 | 6/20 |
| 4b | 15/20 | 0/20 | 5/20 | 6/20 |
| 9b | 18/20 | 5/20 | 8/20 | 11/20 |
| omnicoder | 4/20 | 2/20 | 0/20 | 5/20 |
由此得到两项结论:
智力比知识更"昂贵"。 从 0.8b 到 9b,智力提升 36 个百分点,知识仅提升 28 个;智力−知识差由 +2% 扩大至 +10%——模型越大,推理能力相对记忆的优势越明显。这与"遗忘知识可节省空间"的直觉相反:记忆事实是相对廉价的部分,推理才是占用参数的主要部分。
omnicoder 是"知识被消除"的实证案例。 其 TriviaQA 得分为 0/20,冷门事实几乎全部遗忘;但代价是智力同步受损——HellaSwag 常识推理仅 4/20,而 9b 官方版为 18/20。特调消除知识的同时,推理能力一并受损。
知识外置验证
既然特调能够消除知识,那么能否彻底放弃记忆知识、改由外部检索提供?为此设计一组对照实验:对每个 TriviaQA 问题,分别在两种模式下作答——"无外部知识"(仅依赖模型记忆)与"有外部知识"(模拟 RAG,参考资料中已包含答案),各 10 题。
| 模型 | 仅依赖记忆 | 提供外部知识 |
|---|---|---|
| omnicoder-2-9b | 0/10 | 3/10 |
| qwen3.5:9b | 3/10 | 10/10 |
实验结果表明:知识外置的路径可行,但前提是模型自身的理解能力保持完整。 9b 仅依赖记忆时只有 3/10,提供外部知识后达到满分 10/10——其短板并非知识储备,而是信息输入;一旦上下文中给出答案所需的信息,其理解能力即可将答案提取出来。而 omnicoder 即便在"从参考资料中提取答案"这一任务上也仅做对 3/10,说明其基础理解能力已经受损。
因此,对"遗忘知识、保留智力"这一设想,正确的结论是:知识可以不内置于权重,但智力无法省略;且特调或遗忘操作往往同时损害智力。
代码能力:HumanEval 系列
代码部分采用 HumanEval(Python)与 HumanEval-X(C++/JS),pass@1 评分——模型仅生成一次,随后用 clang 编译、node 运行、python 执行测试用例,全部通过方记为正确。
| 模型 | Python | C++ | JS | 平均 |
|---|---|---|---|---|
| qwen3.5:0.8b | 20% | 20% | 53% | 31% |
| qwen3.5:2b | 47% | 33% | 40% | 40% |
| qwen3.5:4b | 100% | 47% | 80% | 76% |
| qwen3.5:9b | 100% | 47% | 93% | 80% |
| omnicoder-2-9b | 60% | 60% | 80% | 67% |
说明:前四个模型每语言测 15 题;omnicoder 因推理速度过慢(生成一段代码需上百秒),每语言仅测 5 题,其分数为 5 题内的正确率,仅供参考。
代码部分的观察如下:
4b 是能力分水岭。 0.8b 到 2b 仅从 31% 升至 40%,增幅平缓;2b 到 4b 则由 40% 跃升至 76%。4b 与 9b 在 Python 简单题上均取得满分——对于日常编写脚本、函数的需求,4b 已经足够。
C++ 是所有模型的薄弱项。 即便 9b 也仅有 47%。C++ 的类型系统、指针与 STL 对较小模型尤为不利,生成的代码多数无法通过编译。
omnicoder 的特调未带来代码优势,反而引入了额外问题。 其 Python 60% 并不高于 9b 官方版,且默认会将"思考过程"直接输出到正文中,开头常出现大段 "Let me analyze this problem...",需显式传入 num_think=0 才能正常输出代码。否则,其 token 预算会被思考内容耗尽,函数体尚未生成即被截断。
三项观察
"智力"与"知识"在模型中并不等价,但也难以干净分离。 数据显示智力随规模增长更快(+36pp vs +28pp),说明二者的参数效率不同;但 omnicoder 的案例又表明,无法只消除其一——特调消除知识时,智力随之受损。二者在权重中深度耦合。
代码能力是三项中增长最不连续的一项。 推理与知识均随规模平滑提升,代码却呈现 2b 到 4b 的突变。一个可能的原因是:代码生成需要模型达到某个理解阈值,超过阈值后,剩余的部分即是对标准模式的组合。
小模型的 C++ 能力基本不可用。 4b 以下模型 C++ 正确率均不高于 33%。若需本地进行 C++ 代码生成,应选择 9b 及以上规模,而非寄望于小模型。
选型建议
按用途划分:
- 日常对话、简单工具调用:0.8b 或 2b 即可,智力 22-28% 足以应对简单场景,优势在于速度。
- 本地编写代码(Python/JS):4b 是均衡之选,Python 满分、JS 80%,体积仅 4GB,16G 内存下运行无压力。
- 追求最强的通用能力:9b,智力 58%、代码 80%,代价是推理速度与内存占用。
- omnicoder 不建议采用:特调未带来代码优势,且需额外处理思考内容泄露问题,性价比不高。
结语
回到最初的问题——"能否让模型遗忘知识、仅保留智力"。
综合三项测试,结论是:方向正确,但实现路径有误。 正确之处在于"知识可以外置"——9b 在提供外部知识后达到满分,证明 RAG/检索增强完全可行。错误之处在于"仅保留智力"——智力恰恰是最昂贵、最不可省略的部分;任何"定向删除知识"的操作(特调、遗忘、蒸馏)几乎都会同时损伤智力。
因此,现实的方案是:不应试图在权重中删减知识,而应选择一个规模适度、能力足够的模型,将知识外置于检索系统。 需要时按需检索并注入上下文,远比压缩权重更为经济。