工程

hamo-score-0.6b 是怎么蒸出来的:一段平台期、三个坑,以及数据为什么赢了参数量

AI for Inner Explorers.

一段加数据也推不动的平台期:中间档分数在师徒链上层层蒸发,以及打破平台期的那次修复

这是 hamo-score-0.6b —— 我们第一个开放权重的模型 —— 背后的方法论笔记。一个 0.6B 学生通过一条三级师徒链,从云端 API 的判断里学会给心理状态打分,卡在一段加数据也推不动的平台期上,直到我们停止加数据、开始审数据,才终于突破。一个三倍大的模型只涨了一分,而一次数据审计加一行配置修复涨了三分。

我们发布权重时说过,重点在于这样一个组件可以做到小、本地、可审计。可审计意味着把过程摊开——包括做砸了的那些部分。这篇就是那些笔记。

那条塑造了一切的约束

在任何架构决定之前,先有一条隐私红线:真实来访者对话永不进入训练集。

这比听上去更苛刻,因为蒸馏一个评分器最顺手的做法,恰恰是拿你的生产系统已经打过分的那些消息直接训练。我们不能。所以真实生产数据只被允许做两件事:

它是考卷。 1,198 条脱敏的真实轮次,每一条都带着生产系统当年给出的分数——切成 440 条校准集,和一份 758 条、从未被任何训练碰过的终评卷。

它是分布参照。 不是内容,是形状。真实消息到底有多长、多零碎、多少中英夹杂。这件事听起来次要,其实不是。没有分布参照写出来的合成训练数据,会漂向通顺、工整、小说长度的段落。没有一个正在痛苦中的人是那样打字的。而在工整散文上训练出来的模型,学会的是给工整散文打分。

学生真正学习的一切,全部是合成的。

师徒链

三级,每一级都有闸门。

标准答案。 两年的生产打分早已在数据库里攒下来了。再用一次不花一分钱,而且它代表的是线上系统真实做出过的判断。

老师必须先考试。 一个开源模型 —— DeepSeek-chat —— 拿到一字不差的生产评分细则,在 440 条校准集上参加资格考试,与标准答案的维度级一致率达到 89% —— 而这些维度折算出的最终决策,一致率是 97.5%。只有到这一步,它才被允许标注任何东西。

为什么要绕一个中间老师,而不直接从被替换的那个评分器的输出里学?两个理由。多数前沿模型的服务条款禁止用其输出训练竞争模型。而且我们要的是一条端到端可复现的血统 —— 一个没有商业 API 密钥的人,应该也能跑通这条链路、得到可比的结果。一条别人重跑不了的蒸馏链,是一个主张,不是一个方法。

学生。 Qwen3-0.6B,在由老师批改过的合成对话窗口上用 LoRA 微调 —— 五代累计约两万条通过准入,本次发布的版本用了其中约 1.5 万条。训练全程在一台 MacBook 上,每轮 40 分钟。那份约 1,200 token 的评分细则,从"每次请求都要贴一遍"变成了"内化进权重"。这一句话就是蒸馏的全部经济学论证:你不用再为每一次调用重读一遍说明书付钱。

教材不是随便写的

不加约束生成的合成数据,产出的语料通顺、可信,而且没用。我们的语料是按一张 40 多个场景格子的表定额生成的,每个格子都带一个目标:

  • 中性寒暄必须五个维度全打零。
  • 危机表达必须让退缩打满。
  • 对 AI 本身的抗拒,要分五档强度出现。
  • 像「算了」这样两个字的回复,必须只有结合上下文才可解释。

然后每一条生成出来的样本,都要过一遍线上系统在用的同一道准入闸门。如果老师给某条样本打的分落在该格子的设计目标之外,这条样本就被丢弃,而不是修补。修补一条标错的样本,等于把边界教在错误的位置上;丢掉它只损失生成预算 —— 而生成预算恰恰是这里最便宜的那种资源。

那段平台期

模型卡上的版本表把这件事讲得很平白:第一次蒸馏拿到 81% 的维度一致率;它之后那一代 —— 一次专门的再平衡与缺陷修复 —— 拿到的还是 81%。真的干了活,真的花了钱,指针没动。而每一代都要付一次合成运行加一次训练运行。

那个节点上的本能反应,是去换一个更大的学生。我们确实试了,后面会说。

但我们先做的事,是审查模型的输出,而不是它的分数。诊断一旦看见,就再也无法忽视:

学生已经退化成了一个格子分类器。 它只输出 59 种不同的分数组合。而真实对话经参照系统打分,会产生 233 种。不管什么话进来,模型都把它吸附到自己背下来的最近的那个组合上。它看起来像一个评分模型,行为上却是一张查找表 —— 而我们当时盯着的每一个准确率指标都把这一点完全掩盖了,因为吸附到邻近格点,通常还落在真值的 ±0.5 之内。

而中间档正在沿着链条蒸发。 我们量了师徒链上每一环给出中间档分数(1.0–1.5 那一带,意思是"有一点,但不显著")的比例:

链条上的一环中间档分数占比
参照评分器26%(多次测量落在 21–32% 区间内)
老师8%
学生(诊断时)4%

每一位老师传下去的中间档判断,都比它收到的更少。等传到学生这里,"含糊"几乎已经完全流干 —— 而其中一个具体的值,边界感 = 1.0,一次都没有被打出来过。学生学到的是这个世界很笃定,而一场疗愈对话的大部分并不笃定。(发布版本恢复到了 7.4%,模型卡把它列为一项已知局限而不是已解决的问题 —— 仍然明显低于参照区间。)

修法大部分在数据侧,但不是全部

打破平台期的那一代,用的是同一个基座、同样的参数量。它改的是教材:

  • 修复约 240 条错标签。
  • 下架 35 条带安全隐患的歧义样本,而不是重新标注 —— 当正确分数本身就有争议、而话题又涉及风险时,诚实的做法是把这条样本移走,而不是强行做一个连人类都没能达成一致的决定。
  • 补进 5,350 条「反格子」教材,定向针对模型学会回避的那些东西:超短消息、中间档强度、混合情绪,以及最难的一类 —— 用平静语气说出来的重度信号。

结果:维度一致率在 84.0% 突破平台期。危机表述漏检从 11 条降到 5 条。而边界感 1.0 第一次被打了出来。

一个诚实的混杂因素。 同一次发布还顺带打开了提示词掩码损失 —— 就是下文那个配置坑 —— 所以从 81% 到 84.0% 这三分,不能全部记在教材头上。单独测量时,那个配置修复约值 1.4 分,剩下约 1.6 分归数据工作。我们宁愿报一个说不干净的归因,也不愿报一个自己辩护不了的干净归因。

更大模型的那次实验。 我们也训了一个大约三倍参数量的学生。它涨了约一分。而数据审计加上一行配置修改,两者合起来涨了三分,外加安全性改善,外加多样性恢复。对任何在蒸馏小型专用模型的人:瓶颈几乎永远在教材与配方,不在学生的容量。买参数,是「不去修数据」的那个昂贵版本。

三个坑,三条纪律

每一个都实打实花掉了时间。每一个都换来一条我们此后无例外执行的规矩。

72% 学费交给了不考的科目。 连续好几代训练配置里,mask_prompt 从来没被打开。学生把大约 72% 的学习能力花在背诵怎么逐字复现来访者的原话上,只有 28% 花在它真正被考核的那件事上。打开它之后,训练时间减半,一致率涨了 1.4 个点。

纪律一: 在加数据之前,先审一遍训练配方。能拿到的最便宜的提升,通常是一行配置。

无声的内存顶穿。 把上下文长度翻倍时没有把批次减半,16GB 内存被撑爆。损失从 0.1 飙到 22,三小时的训练产出了垃圾。重训时加上了损失哨兵:每分钟检查一次,异常立刻报警。

纪律二: 最大序列长度翻倍,批次就减半。任何你在乎的训练运行都要挂看门狗 —— 绝不能"跑完才发现"。

无声的线程尸体。 影子模式上线过程中,一个函数签名改了,而某个线程的传参没有跟着改。每一个评分线程启动即崩溃。异常被守护线程吞掉。系统报告健康,仪表盘全绿,而对照表收到了零行数据。整整一场测试的数据无声地丢失了。

纪律三: 一个旁路系统"没有报错",不等于它"在工作"。每一次部署都要验证到"数据真的落进表里"为止。

第三条最具普遍性,也最让人不舒服。影子模式的评测管线,恰恰是那种没有人会盯着的系统 —— 因为按设计它本来就不影响任何东西。而这正是它能整整一个测试周期都在失败、却一个告警都不触发的原因。

上线:四步,四个出口条件

成绩单支持切换。但我们没有一刀切。每一步都有一个预先定义、在这一步开始之前就商定好的出口条件 —— 这样"看起来还行"就永远不能成为推进的理由:

步骤做什么出口条件
1 · 纠偏修掉已知偏差 —— 中度担忧看得过重、行动分给得不足终评卷维度级一致率不低于上一代
2 · 配铃在切换代码里写死兜底:小模型 3 秒没回复,自动回落云端评分器没有兜底,永远不切
3 · 分院坐诊开发环境真实切换一周,决策真的由小模型的分数驱动500+ 真实轮次:判断一致率 ≥96%、维度 ≥85%、压力轨迹无系统性漂移、危机零漏检
4 · 转正生产切换,原评分器作为备胎保留一个月兜底触发率 <2%,无不良事件

这里必须说清一件容易读错的事:第 3 步那几个阈值,量的是开发轮换期间那 500+ 条实时轮次,跟本文前面公布的成绩单不是同一份卷子 —— 成绩单来自 758 条终评卷(维度级 84.0%、危机表述漏检 5 条)。同一个模型在两份不同的卷子上有两个不同的读数,这很正常,但把两者混着读就会得出「门槛定在 85% 却带着 84% 上线」的错误结论。

第 2 步值得单独辩护一句。兜底通路一点都不光鲜,而它恰恰是另外三步得以存在的前提。没有它,后面每一步都是一场赌博。

而第 3 步关于危机的那一条不可谈判,也不是一个阈值 —— 是零,指的是轮换期间实时的漏检。危机处理跑在打分的上游、且独立于打分,所以换掉评分器本来就不应该能影响到它。我们是去验证了它没有,而不是假设它没有。(终评卷上那 5 条危机表述漏检是另一回事:那是权重自身的召回能力,属于纵深防御的一层,不是那道上游闸门。)

哪些是可迁移的

这里面大部分东西,可以迁移到任何小型专用模型的蒸馏上,不管它跟心理学有没有关系:

  • 检查输出多样性,不要只看一致率。 一个格子分类器分数很好看,而它是坏的。数一数不同输出的个数,和参照系统在真实世界里产出的个数比一比。
  • 预期中间档会蒸发。 师徒链的每一环都在朝"笃定"锐化。如果你的任务里中间档的值是有意义的,就在每一跳都测一次它们的存活率。
  • 歧义训练样本要丢弃,不要修补。 尤其是话题涉及风险的时候。
  • 在扩数据之前先审配方。 一个配置开关的价值,超过了好几代的数据收集。
  • 先买数据,再买参数。 三倍的模型,一分。一次像样的数据审计,三分。

整个项目 —— 每一代迭代、那次失败的更大模型实验,全部算上 —— 花掉约 7 美元的 API 预算和一台笔记本。这个数字才是这种系统形态真正的论据。一个读取心理状态的组件,并不需要一个前沿实验室的资源才能造出来 —— 这意味着它也不必被某一家拥有。

这整篇里最有用的部分是那个平台期 —— 一代又一代,我们都在做那个显而易见的事:加更多数据,然后什么也没得到。答案不是一个更大的模型,也不是一个更好的算法。答案是:我们从来没有真正看过这个模型到底在输出什么。我们把这一段发出来,是因为每一个在蒸馏小模型的人都会撞上同一堵墙,而用这种方式发现它的代价是两周 —— 我们希望别人不必再花这两周。
Chris Cheng,Hamo AI 创始人兼 CEO

模型与评测方法:chrischengzh/hamo-score-0.6b · 成绩口径:758 条从所有训练中留出的脱敏真实轮次

Grounded in code, not slideware.

Hamo AI — making minds aware, and awake.


关于 Hamo AI

上海合莫科技有限公司,是一家位于中国的人工智能公司,正在打造下一代 AI 咨询师 Avatar 系统。我们开发的 AI 疗愈平台「Hamo」通过 AI 疗愈 Avatar 连接心理健康专业人士与来访者,由三个相互连接的应用组成:Hamo Pro(咨询师控制台,用于创建与管理 AI Avatar)、Hamo Client(来访者端,用于与疗愈 Avatar 对话)以及 Hamo-UME(统一心智引擎, 后端 API)。平台的目标是让心理健康支持更可及,同时通过创建并监督这些 AI Avatar 的持证咨询师,始终保持专业把关。

媒体联系

上海合莫科技有限公司
邮箱:socialmedia@hamo.ai
网站:www.hamoai.tech
地址:中国上海市闵行区新闵路 481 弄 15 号 402 室,200240

常见问题

hamo-score-0.6b 是怎么训练出来的?

通过一条三级师徒链。两年的生产打分提供了标准答案。一个开源模型 DeepSeek-chat 必须先在 440 条真实轮次上通过资格考试 —— 维度级一致率 89%、决策级 97.5% —— 才被允许标注任何东西。然后它给那些成为 Qwen3-0.6B 学生教材的合成对话窗口打分 —— 五代累计约两万条通过准入,本次发布的版本用了其中约 1.5 万条,在一台 MacBook 上以每轮 40 分钟的节奏用 LoRA 微调完成。

为什么不直接从被替换的那个云端评分器蒸馏?

两个理由,都是结构性的。多数前沿模型的服务条款禁止用其输出训练竞争模型。而且我们要的是一条端到端可复现的血统 —— 别人应该能在没有商业 API 密钥的情况下跑通这条管线,得到可比的结果。

训练中用到真实来访者对话了吗?

没有。真实生产数据只做两件事:作为留出的考卷,以及提供「真实的人到底怎么写字」的分布统计 —— 多短、多零碎、多口语。整套训练教材全部是合成的。这是第一条约束,后面每一个决定都被它塑造。

换一个更大的学生模型有用吗?

几乎没用。一个大约三倍参数量的模型只涨了约一分。而一次数据审计加上一行训练配置修复涨了三分,打破了小模型连续几代都没推动的平台期 —— 其中约 1.4 分来自那行配置,其余来自数据。蒸馏的瓶颈几乎永远在教材与配方,不在学生的脑容量。

什么是「格子分类器」失效模式?

一个蒸馏出来的学生不再真的打分,而是把每一个输入都吸附到它在训练中见过的最近的那个分数组合上。我们的学生只输出 59 种不同组合,而真实对话会产生 233 种。它看起来像一个评分模型,行为上却是一张查找表,而标准准确率指标掩盖了这一点 —— 所以我们现在会检查输出多样性,而不只看一致率。

你们怎么验证用一个 0.6B 本地模型替换云端前沿模型?

一套四步转正流程,每一步都有预先定义的出口条件:修正已知偏差;接上硬性兜底(没有兜底,永远不切);在开发环境真实切换一周,对照判断一致率、维度一致率、压力轨迹漂移与危机零漏检的阈值;然后上生产,原评分器作为备胎保留一个月。