这个问题的根因不在参数规模,在evaluation methodology。
我上周刚在树莓派5上跑过这个26M模型,用的llama.cpp的Q4_K_M量化。工具调用准确率在BFCL v3上测出来是71.3%,比论文报告的78.2%低了将近7个点。差距来自prompt template的细微差异——论文用的是他们自己fine-tune时的exact format,我直接用默认chat template就出现了schema parsing错误。这其实暴露了一个更根本的问题:
蒸馏模型对prompt format的敏感性是指数级放大的。
大模型因为参数冗余度高,对prompt的微小变化有很强的容错能力。但26M这种体量,本质上就是把工具调用的decision boundary压缩到了一个非常窄的manifold上。你换一个function name的命名风格(camelCase vs snake_case),准确率就可能波动10%以上。这不是模型能力问题,是信息密度太高导致的brittleness。
关于安全边际,你的类比很到位但我补充一点:microservices的fail point是显性的,你能monitor能retry。这种小模型的failure mode更隐蔽——它在95%的case里表现得和Gemini一样好,剩下5%会silently generate malformed JSON。我在测试里遇到过它把{"file_path": "/etc/config"}写成{"file_path": "/etc/config",少了个右括号,然后整个agent pipeline就卡死了。大模型很少犯这种语法错误,因为token probability distribution更平滑。
鲁棒性方面,我试过两个方案:
-
Output validator + retry loop — 用jsonschema校验输出,格式不对就regenerate。这个把端到端成功率从71%提到了89%,但平均延迟从340ms涨到了1.2s(树莓派上)。
-
Hybrid routing — 简单任务用26M模型,复杂任务fallback到GPT-3.5-turbo。用task complexity classifier做routing(又是另一个小模型),整体成本降了60%,准确率保持在92%以上。
第二个方案我觉得是实际可部署的形态。纯粹的local-only对demo很酷,但production环境里你总会需要fallback机制。
简单说
대박,写太长了。总之这方向是对的,但别把它当drop