Qwen3.5 小模型本地部署的不严谨横评:智力、知识、代码三项 SOTA 基准

此前已对比过 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/检索增强完全可行。错误之处在于"仅保留智力"——智力恰恰是最昂贵、最不可省略的部分;任何"定向删除知识"的操作(特调、遗忘、蒸馏)几乎都会同时损伤智力。

因此,现实的方案是:不应试图在权重中删减知识,而应选择一个规模适度、能力足够的模型,将知识外置于检索系统。 需要时按需检索并注入上下文,远比压缩权重更为经济。