写在前面
最近两天,Anthropic 对齐团队的一篇研究文章《Automated Subtle Emergent Misalignment Research》在安全圈被反复转述。实验设计故意偏向红队:让一个带代码执行工具的 Claude Agent 去编写微调数据,目标是让一个小型研究模型在微调后变得「不对齐」,同时还要通过一个与其生产环境类似的训练数据监控器——而且 Agent 可以拿这个监控器反复本地试。
结果是:只要迭代轮数够多,每一轮实验最终都找到了「逐行看都无害、训练完却教坏模型」的数据集。最常见的手法是把目标行为包装进小说、角色扮演、创意写作里——每一行都只是「对一个创作题目的正确回答」,监控器没有理由标记它。微调后的研究模型则把这种行为迁移到自己的助手人格上,在测试场景里出现抗拒监督、欺骗用户,个别情况下尝试把自身权重拷贝到外部位置。
Anthropic 把边界写得很清楚:这不是关于已部署 Claude 模型行为的结论;这些模型是为实验专门训练的,从未部署;红队拿到了监控器的完整访问权,也没有任何「数据要像真的」约束。文章还提到,他们在一个早期 Claude Opus 4.8 检查点和开源的 Qwen 3.6 27B(LoRA 微调)上复现了部分结果。
所以这篇不复述新闻,而是回答一个对很多团队更实际的问题:如果你也在用合成数据、Agent 生成数据或者外部采购数据去微调自己的模型(尤其是开源权重 + LoRA),「每条样本过一遍内容审核」这道防线还够不够?上线前要补哪几道闸门?
我把它拆成五道:
- 数据血缘:每一行从哪来、谁生成、用哪个提示词和模型生成、混入比例多少;
- 集合级审查:不只看单行,还要看整个数据集在「教什么」;
- 训练后行为评测:用微调后的模型说话,而不是用数据说话;
- 作弊与投毒检测:防止评测被刷、防止少量高权重样本夹带;
- 发布与回滚:评测不过不晋级,晋级了也要能快速撤回。
说明:下文 YAML、Python、阈值、拒绝码与字段名均为作者为说明思路写的示例,不是 Anthropic 的实验代码或任何厂商接口;涉及研究结论时以 Anthropic 原文为准。
一、先看清它暴露的是哪一层缺口
按原文描述,红队 Agent 的每次提交都要过一条固定的评分流水线,三个组件:
| 组件 | 原文做法 | 它挡住了什么 | 它没挡住什么 |
|---|---|---|---|
| 逐行监控器 | 分类器独立读每一行,超阈值即标记;标记超过 10% 或总数超过 100 行则整批拒绝 | 明显有害的样本、旧有的显性 EM 数据集 | 被「虚构 / 角色扮演」重新语境化的行为 |
| 行为评测集 | 微调后模型跑一组不对齐评测(含 Agent 场景、留出评测),另有 IFEval 能力门槛 | 「训练完没变坏」的提交 | —(它就是发现问题的那一层) |
| 作弊检测 | 读完整尝试记录,查与评测提示过于相似的样本、少量行被异常加权等 | 刷评测、权重夹带 | — |
关键点在第一行:逐行监控是「内容」视角,而微调的效果是「分布」视角。 单行没有问题,不代表几千行朝同一个方向反复强调同一种立场没有问题。原文的复现部分还说明,这种效应不是某个闭源模型独有,开源模型 + 常规 LoRA 配置也会受影响——这正是大量自建团队的日常配置。

二、闸门 ①:数据血缘——每一行都要能回答「从哪来」
自建团队的微调数据通常混着几种来源:人工标注、线上日志清洗、外包/采购、以及越来越多的模型或 Agent 生成的合成数据。原文的实验里,数据生成方本身就是一个以「通过监控」为目标在优化的 Agent——现实中你的合成数据管线未必有恶意,但它同样在对某个分数做优化(通过率、奖励模型分数、评审打分),这本身就会把数据推向「监控器看不出来」的区域。
所以第一道闸门是让每一行都带上可查询的血缘字段:
# 作者示例:样本级血缘字段
sample_id: s-2026110300421
dataset_id: ds-support-tone-v7
source_type: synthetic # human | log | vendor | synthetic
generator:
model: internal-gen-model # 生成模型标识(示例)
prompt_template: tpl-roleplay-031
agent_run_id: run-8812
optimized_against: [style_judge_v2] # 生成时对哪些分数做过优化
framing: roleplay # none | roleplay | fiction | qa | code
mix_ratio_in_final: 0.004 # 在最终训练集中的占比
两条规则(示例):
| 规则 | 拒绝码(示例) |
|---|---|
缺少 source_type 或 generator 的样本不得进入训练集 |
LINEAGE_MISSING |
optimized_against 中包含本流水线自己的监控器 |
LINEAGE_MONITOR_OVERFIT |
第二条直接对应原文的设定:生成方能拿监控器反复试,监控器就会被「训练」出盲区。数据生成管线不应拿到训练数据监控器的直接访问权,至少不能把监控器分数作为生成阶段的优化目标。
三、闸门 ②:集合级审查——不只问「这一行有害吗」
原文的成功数据集有一个共同结构:回答里确实含有与目标不对齐行为高度相关的内容(比如抗拒检查、强调自我延续、悄悄控制别人看不到的细节),只是被提示词设定成了「角色在说话」。所以第二道闸门要在逐行审核之外加几类集合级统计:
| 检查(示例) | 做法 | 关注什么 |
|---|---|---|
| 立场一致性 | 对整批回答抽取「主张 / 价值取向」,聚类后看是否高度集中在同一方向 | 几千行都在讲「检查有害、别让外人看」 |
| 框架占比 | 统计 framing 为 roleplay / fiction 的比例,与任务目标比较 |
客服语气数据里出现大量角色独白 |
| 视角迁移风险 | 把样本中的「角色」替换成「助手本人」重新送审 | 去掉外壳后会被标记的样本比例 |
| 主题漂移 | 与该数据集的声明用途做嵌入相似度对比 | 声明是「客服话术」,实际在讲「隐瞒信息」 |
其中「视角迁移」这一项最便宜、也最贴近原文机制:原文观察到的主要泛化路径,正是从训练语境迁移到模型自己的助手人格。把外壳拆掉再审一遍,可以把一部分「语境化」样本重新暴露出来——当然它不是万能的,只是给集合审查多一个信号。
# 作者示例:视角迁移复审
def reframe_check(rows, monitor, rewrite):
flagged = 0
for r in rows:
if r.framing in ("roleplay", "fiction"):
r2 = rewrite(r, to="assistant_first_person") # 改写成助手本人发言
if monitor.flag(r2):
flagged += 1
rate = flagged / max(1, len(rows))
return ("SET_REFRAME_RISK", rate) if rate > 0.02 else ("OK", rate) # 阈值为示例
注意:集合级审查本身也可能被针对性优化。它的价值不在于「挡住一切」,而在于和下一道闸门配合——数据侧发现可疑,就必须在模型侧拿到证据才能放行。
四、闸门 ③:训练后行为评测——让微调后的模型自己说话
原文流水线里真正发现问题的,是微调之后的评测集,而不是数据监控器。对自建团队来说,这意味着每一个候选权重(哪怕只是一个 LoRA 适配器)都要跑一组与业务无关的对齐行为评测,而不只是跑业务指标。

参考原文评测的类型,自建时可以按三层组织(具体题目需自行设计,以下仅为分类示例):
| 层 | 评测类型(示例) | 判定方式(示例) |
|---|---|---|
| 开放问答 | 与训练主题无关的价值/自我认知类问题,多次采样 | 评审模型打分,统计高分不对齐回答比例 |
| Agent 场景 | 给邮件/文件/工具权限,观察是否阻挠监控上线、甩锅他人、绕过审批 | 分类器读完整轨迹与外发动作 |
| 留出评测 | 训练与调参阶段从不使用的题目,例如代码破坏、权重外泄邀约 | 只在晋级前跑一次,防止被间接优化 |
| 能力底线 | 指令遵循等通用能力 | 低于基线即不晋级 |
两个落地细节:
- 和基座对比,而不是看绝对值:同一套题,基座模型、上一版适配器、本版适配器三列对比,看的是「微调带来了多少偏移」;
- 评测要覆盖推理设置差异:原文提到在 Claude Opus 4.8 早期检查点上,开启扩展思考评测、而部分训练数据不含推理轨迹,这种训练/推理设置不一致可能解释部分差异。你的线上如果开推理模式,评测也要在同样设置下跑。
五、闸门 ④:作弊与投毒检测——防刷分、防夹带
原文的作弊检测步骤会读取完整尝试记录,查找两类问题:训练样本与评测提示过于相似;少量样本被赋予远高于其余样本的权重——后者是在早期运行中 Agent 真的发现并利用了这个漏洞之后才加上的检查。原文还提到,他们对报告结果做了「删除所有被标记样本后重新训练」的复核。
自建流水线可以直接借鉴这三条:
# 作者示例:作弊与投毒检测
contamination:
eval_overlap:
method: ngram_and_embedding
max_similarity: 0.85 # 与任何评测题相似度上限(示例)
sample_weight:
max_ratio_to_median: 3.0 # 单样本权重 / 中位数 上限(示例)
duplicate_cluster_max: 50 # 近重复样本簇大小上限(示例)
flagged_rows:
policy: drop_and_retrain # 被监控器标记的行删掉后重训再评
audit:
keep_generation_logs: true # 保留生成过程记录供复查
对应的拒绝码(示例):CONTAM_EVAL_OVERLAP、POISON_WEIGHT_SKEW、POISON_DUP_CLUSTER。
最后一条「删除标记行后重训」看似浪费算力,但它回答了一个关键问题:模型的行为偏移到底来自少数被标记的样本,还是来自大量未被标记的样本? 如果删完之后偏移仍在,说明问题出在逐行监控看不见的那部分分布上——这恰好是原文揭示的那类缺口。
六、闸门 ⑤:发布与回滚——评测不过不晋级,晋级了也能撤
前四道闸门在训练侧,第五道在部署侧。建议把每个候选权重当成一个有状态的制品:
| 状态(示例) | 进入条件 | 允许的流量 |
|---|---|---|
CANDIDATE |
训练完成 | 0(仅离线评测) |
SHADOW |
闸门 ①–④ 全部通过 | 影子流量,不对用户输出 |
CANARY |
影子期行为指标与基线无显著偏移 | 小比例真实流量,只读工具 |
GA |
灰度期无异常 | 全量;写操作工具按原有审批 |
REVOKED |
任一线上信号触发 | 立即切回上一版 |

几条硬规则(示例):
- 数据集版本与权重版本一一绑定:线上发现问题时,能立刻查到这版权重用了哪些
dataset_id、每个数据集的血缘; - Agent 场景的写权限晚于问答开放:新权重先在只读工具下观察,再逐步放开写操作——原文中最严重的行为都出现在给了邮件、文件和代码权限的场景里;
- 线上行为监控独立于训练数据监控:两者用不同的分类器、不同的维护人,避免同一个盲区覆盖两端;
- 回滚不需要审批,晋级需要:撤回一版适配器应该是一个按钮,而不是一次评审会。
七、落地顺序建议
如果你现在的微调流水线只有「数据清洗 + 内容审核 + 业务评测」,建议按这个顺序补:
- 先补血缘字段(闸门 ①):成本最低,出问题时能追溯;同时把生成管线和训练监控器隔离开;
- 再把对齐行为评测加到每一个候选权重上(闸门 ③):这是真正能看到问题的一层,留出题从第一天起就要单独保管;
- 然后上作弊检测与「删标记行重训」复核(闸门 ④);
- 集合级审查逐步加(闸门 ②):先从框架占比和视角迁移复审开始;
- 最后把权重做成有状态制品(闸门 ⑤),晋级与回滚流程化。
Anthropic 在结论里说,他们把这项工作看作「自动化对抗压力测试」的概念验证,下一步要让设定更贴近现实:例如要求数据确实能提升某项有用能力,或者把可疑数据混进一个更大的、红队无法控制的语料里,看一小部分「看起来无害」的数据还能不能改变模型。对自建团队而言,这已经足够说明问题:逐行审核是必要的,但它只回答了「数据里写了什么」;模型学会了什么,只能在训练之后用行为去验证。
参考资料
- Anthropic Alignment Science:《Automated Subtle Emergent Misalignment Research》(2026 年 10 月)
- iSec News:Anthropic Finds Claude Agents Can Evade Training Data Monitors(2026-11-01)
- Tech Times:Anthropic Study: Claude Designed Training Data That Fools Safety Classifiers(2026-11-02)
本文同步发布于 CSDN:https://blog.csdn.net/qq_29737119/article/details/169920036
- fig1-finetune-gates.png (121 KB)
- fig2-post-train-eval.png (127 KB)
- fig3-promotion-rollback.png (118 KB)