你有没有遇到过这种场景:业务里有一类固定文本需要反复分类,比如客服工单、邮件、短信。直接调 GPT 或 Claude 当然能搞定,但每一条都走一遍大模型,成本、延迟、数据出境都是问题。Shrewd 这个开源项目想解决的就是这件事——把大模型的判断能力,蒸馏成一个跑在本地、毫秒级响应的小模型,专门处理某一个固定任务。
思路其实不复杂:先用 LLM 当老师,给一批无标注数据打标签,然后用这些标签去训练一个轻量级的学生模型(比如 TF-IDF 加逻辑回归,或者微调一个小型 BERT)。之后推理阶段完全不需要 LLM 参与,一个几百 KB 的模型文件就能在本地跑。作者在构建过程中做了不少实验,得出的几个结论挺反直觉的,值得想走这条路的人参考。
**提示词优化带来的提升,往往在测试集上就消失了**
作者先用 GEPA(一种基于进化算法的提示词自动优化方法)去优化老师的提示词。在 AG News 数据集上,用 Haiku 模型,提示词优化让老师准确率从 0.78 涨到 0.84,看起来不错。但在 20 Newsgroups 上,优化完全没效果。更关键的是,GEPA 在开发集上的得分提升,到了锁定的测试集上经常就没了。这说明提示词优化很容易过拟合到开发集,用它来评估真实效果要格外小心。
**更好的老师标签,不一定带来更好的学生**
这是另一个反直觉的点。作者发现,在某些任务上,换一个更强的老师(比如从 Sonnet 5 换成 Fable 5.1),学生模型的提升幅度远小于老师本身的提升。有时候,改变学生模型的架构,或者给它更多训练数据,效果反而更好。这提醒我们,蒸馏的瓶颈往往不在老师,而在学生——学生模型的学习能力有限,老师教得再好,学生学不进去也没用。
**主动学习比买更便宜的标签更划算**
作者对比了几种降低标注成本的策略:用更便宜的模型(如 Haiku)打标签、对不确定的样本升级到更强模型、以及主动学习(用当前学生模型最不确定的样本去问老师)。结果很明确:在 CFPB 和 AG News 两个任务上,主动学习策略用三分之一的成本就达到了目标精度,而前两种策略都没能胜过它。具体来说,用 TF-IDF 探针模型挑出最不确定的样本,比按文件顺序标注,能省下 1.1 到 2.3 倍的老师调用次数。
**校准很重要,但校准得好不代表排序排得好**
作者特别强调了概率校准(Calibration)的作用。在 GoEmotions 数据集上,经过校准后,模型的 ECE(期望校准误差,衡量预测概率和真实频率的差距)从 0.122 降到 0.043,Brier 分数也从 0.090 降到 0.058,概率输出和人类标注者的判断更接近了。但作者也发现一个坑:一个模型如果对每条文本都输出基率(比如总是输出 80% 是正类),它的校准误差会很低,但完全没用。所以报告里专门加了一条规则,检测这种“完美校准但毫无区分度”的失败模式。
**零样本模型的叠加,只在特定场景有效**
作者还尝试在蒸馏出的模型上叠加一个零样本 NLI(自然语言推理)模型作为第二意见。这个组合在情感分析任务上效果显著(GoEmotions 上 AUROC 从 0.755 提升到 0.836),但在几乎所有多分类任务上都被门控机制拒绝了。原因是零样本模型和老师模型在约定俗成的标签上会犯同样的错误,用它们的一致性来评估会高估效果。
Shrewd 这个项目本身也提供了完整的工具链:从标注、提示词优化、主动学习到训练、评估、部署,都有对应的 API。它还预置了四个决策面板(短信垃圾邮件、邮件分类、AI 输入护栏、个人数据门禁),可以直接加载使用。
这套思路最适合的场景是:你有一个固定的分类任务,有几百条人工标注的种子数据,还有大量未标注的数据池,并且你关心推理成本、延迟,或者数据不能出本地。它不适合需要复杂推理、依赖最新知识或者领域变化很快的任务。
一个值得注意的坑是:学生模型会继承老师的系统性错误。比如在 PII 检测面板上,训练数据里的卡号都是连续 16 位数字,导致模型对带空格或连字符的卡号识别率很低(0.05),而连续数字的卡号识别率很高(0.7-0.96)。作者尝试在训练池里加入带空格和连字符的样本,修复了带连字符的形式,但带空格的形式只修好了一半,还让连续数字形式的识别率下降了。这说明数据分布对最终效果的影响非常大,需要仔细设计训练样本。
如果你已经在生产环境用 LLM 做分类,想保留 LLM 作为兜底,可以看看 TRACER 这个项目,作者在 BENCHMARKS.md 里做了对比。总的来说,Shrewd 的价值在于它把“LLM 蒸馏”这个听起来很玄乎的事情,变成了一个可复现、可测量的工程流程,并且用实验数据告诉你哪些环节值得投入,哪些是坑。
内容与图片版权归原作者所有 · 原文: https://github.com/sshah03/shrewd