技能应存进权重而非提示词?抽象技能与on-policy自蒸馏 📅 发布时间:2026/8/29 12:16:52 👁 浏览次数: 最近越来越觉得很多模型“变笨”不是参数出了问题而是技能的存放位置选错了。明明同样是让模型先分析再回答写在提示词里的规则就是不稳定换到权重里的能力却更可靠。这篇题为Distill Skills into Weights, Not Prompts: Abstract Skills as Privileged Signals for On-Policy Self-Distillation的研究正是在回答一个更底层的问题技能应该活在提示词里还是活在权重里。这个问题prompt engineering 做得越久越容易有体感。你花一个下午写好的 system prompt换一个模型版本效果可能直接打折你把 few-shot 示例喂得再全任务一变又得从头调。最近连 “weights” 相关的话题都开始频繁出现某种程度也说明行业关注点正在从“怎么把提示词说清楚”慢慢下沉到“模型参数里到底存了什么能力”。我对这个方向的判断是它不是要否定提示词而是试图把一类能力——抽象技能——从推理时的文本读取搬到训练时的参数固化。真正值得关注的地方不在于“能不能不用 prompt”而在于“能力获取的层级”变了。下面把标题拆开讲清楚。1. 提示词是“临时备忘录”权重才是“长期记忆”1.1 提示词为什么总让人不踏实Prompt 本质上是一份在推理时临时注入的声明。模型每次都要重新读它根据当前上下文来调整行为。这意味着几个天然限制提示词占用上下文窗口技能描述写得越长越挤占输入空间。提示词是概率性的激活换一种表达方式行为就可能漂移。提示词无法改变模型的先验知识它只能临时“唤醒”某种行为。在很多项目里这三点都是硬伤。尤其是 agent 类应用系统提示词里塞满了各种技能定义每次请求还要带一长串历史和工具描述推理成本和效果都受影响。技能不是被模型“拥有”的而是每次开会时被临时提醒的。开完会技能又还回去了。用一个生活化的类比教练在场边喊“注意观察后视镜”“变道前先打灯”这是提示词学员练了三个月之后不用人提醒也能自然完成这些动作那是权重。很多人把大量精力花在怎么把教练的话说得更响、更清楚却忽略了一个更根本的问题——训练量够不够技能有没有真正长在模型身上。1.2 权重中的技能是“会了”提示词只是“知道了”“知道了”和“会了”的区别决定了稳定性的差别。提示词再完美也只是让模型在当次生成时按规则执行而权重里的技能是模型在相关输入下自动触发的行为它不依赖外部提醒也不需要每次重新宣读。从训练机制看把技能放进权重的过程并不神秘本质是让模型在大量带技能标注的数据上做参数更新。只要训练数据分布足够贴近真实使用分布模型就会把“输入特征 → 技能触发 → 行为输出”这条路径固化进参数。之后哪怕你什么都不写它也会自然表现出这类技能。这里也能解释为什么很多团队对 prompt 越来越不放心prompt 可以随时改但也意味着行为随时可能变。权重一旦训练完成行为相对稳定代价是迭代周期变长。两种方案其实各有用处但如果你追求的是“长期稳定的能力”权重显然是更接近本质的位置。2. “抽象技能”和“具体任务”是两件不同的事为什么是技能而不是任务这决定了蒸馏出来的东西能不能迁移。2.1 技能是可迁移的能力任务是具体的目标具体任务是“做一道除法题”“写一段排序代码”。抽象技能则是“把复杂问题拆成子问题”“先检查输入边界再做操作”“在给出答案前做一次自检”。这些技能不绑定某个任务而是跨任务生效。这个区别在落地时非常关键。如果把蒸馏目标定成具体任务模型学到的是“这个输入的答案是什么”换一种问法就失效。如果把蒸馏目标定成抽象技能模型学到的是“遇到这类结构时应该如何组织推理过程”迁移性要好得多。一个典型的抽象技能清单可能是这样技能典型行为适用场景逐步分解把复杂指令拆成子步骤按序执行数学、代码、多步任务先验证后输出检查输入、边界、潜在错误再给答案代码生成、数据清洗、agent 工具调用结构化表达按固定格式输出保持字段完整数据抽取、接口返回自检修正生成后自查一遍发现并修复错误长文本、代码、推理上面这些技能如果你用提示词来教每一轮都要把定义重新写一遍如果用权重来教只要模型在训练中见过足够多“输入 → 技能 → 输出”的样例它就能内化。长期看维护成本反而更低。2.2 抽象技能在蒸馏中扮演“特权信号”论文标题里的 privileged signals说的是训练阶段可以拿到、推理阶段拿不到的信息。技能就是这一类训练时你知道这条样本体现的是“逐步分解”这个技能但推理时你不想依赖任何技能名的提示。模型必须在没有技能标签的情况下自己判断“这个问题需要分解”然后自动做到。这正是把技能做成权重而不是提示词的核心逻辑技能只出现在训练监督信号里不出现在推理输入里。就好比驾校教练在训练时不停提醒你“看后视镜”但你拿到驾照以后没人提醒你也会看。提醒的话是特权信号会看后视镜是长在身体里的能力。而“抽象”这个限定词同样重要。抽象技能比具体技能更容易跨任务迁移更不容易过拟合任务表面特征同时训练时只需要标注一个技能标签或一段简短描述标注成本相对可以接受。如果你把蒸馏目标换成“回答这道题的具体格式”那它就成了任务记忆失去了迁移价值。3. On-Policy Self-Distillation让模型在自己的分布里学习标题里最不好读的一块是 on-policy self-distillation。拆开就三件事蒸馏、自蒸馏、on-policy。3.1 自蒸馏为什么能成立知识蒸馏本来是用一个大模型或教师模型的输出分布去训练一个小模型或学生模型。传统蒸馏里教师往往是一个更强、更大或更稳定的模型。而“自蒸馏”里的教师和学生可以是同一个模型或者同一个模型的历史快照。这听起来有点绕模型本来就不会的东西向自己学能学到什么答案在于模型在一次生成中往往已经具备“表现出某个技能”的潜力只是不稳定。自蒸馏要做的是从自身输出里筛选出高质量的那一部分把它们变成训练数据再让参数更稳定地朝这个方向调整。换句话说它是在把“偶尔会”变成“每次都”。3.2 On-policy 的价值训练数据必须来自当前模型On-policy 这个词来自强化学习。它要求训练数据由当前策略生成而不是用一批别人采集好的固定数据。在自蒸馏场景里这意味着每个训练轮次模型先用自己的当前状态生成一批候选输出经过筛选后再训练自己。为什么不能直接用离线数据因为离线数据分布和当前模型行为之间可能存在漂移。如果数据来自一个已经迭代过的旧模型里面有些行为是新模型已经改掉的用它做蒸馏会把模型往回拉。用 on-policy 数据模型学到的是“在目前的参数状态下哪些输出更好、哪种技能该被强化”分布始终是对齐的。一个典型的 on-policy 自蒸馏循环长这样当前模型在任务集上生成候选输出。用规则、评测集或 LLM 评判筛选出高质量输出。给被选中输出打上技能标签特权信号。用这些数据做一轮蒸馏训练产生新模型。新模型继续生成进入下一轮迭代。这样每一轮模型都在“自己的输出中挑选更好的自己”作为老师再把自己变成更像这个老师的学生。如果不控制筛选质量模型很容易学到错误模式所以第 2 步是整个循环的成败关键。3.3 抽象技能在循环里起什么作用如果没有技能标签上面这个循环本质上是普通的自我训练模型只是记住哪些输出更受好评。而加入抽象技能作为特权信号之后训练目标就多了一个维度模型不仅要学“输出长什么样”还要学“当前输入触发了哪个技能、为什么要触发这个技能”。这让蒸馏出来的东西不再是样例层面的模仿而是技能层面的内化。打个比方普通自蒸馏是让模型看到“这道题你要这样答”带技能的蒸馏是让模型看到“这道题要用逐步分解的技能来答”。后者学到的是一套可复用的策略而不是一道题的答案。4. 特权信号在训练里的几种落地形态前面讲清楚了概念这一节具体聊聊技能标签作为特权信号在训练代码里到底长什么样。4.1 信号注入的几种常见方式从工程上看特权信号可以有不同