Shieldstral 用可配置策略和单令牌分类响应处理内容审核,避免将固定风险分类完全固化在模型权重中。文章对比了它与传统护栏模型在成本、延迟及策略适配方面的差异。
有些团队正在为一个 20B 模型的推理付费:它仅仅为了判断一条评论是否违反内容政策,就要用几百个 token 把推理过程完整说出来。8 月 4 日,Mistral 发布了 Shieldstral——一个 3B 分类器,只需一个 token 就能回答同样的问题 [1]。真正值得深挖的是这种差异从何而来,因为答案并不在架构上。
传统 guard model 的问题在于,危害类别列表在训练期间就被固定下来了。guard model 是一种专注于单一任务的小模型:查看一段文本或一张图片,然后判断它是否违反某项政策。它是我在其他文章中所说的 guardrail 在内容领域的具体实现。LlamaGuard 和 ShieldGemma 都以这种方式工作,并且都把自己的分类体系编码在模型权重中。
一旦你的产品不是所谓的“平均产品”,这种做法就会失效。描述如何利用已知漏洞的文本,在渗透测试工具中属于正常内容,但在面向青少年的陪伴应用中却应该被拦截:同一份文档,可以有两种合理的判定。分类体系一旦被写进权重,想要调整这种细微差异,就意味着必须重新标注数据集并重新训练。
仅仅因为政策发生变化就重新训练,代价荒谬得不可接受——仔细看,这项政策本质上不过是一段文本。
Shieldstral 将内容审核设计成一个二元回答任务:它接收一份书面政策和一个问题,然后回答 "yes" 或 "no"。prompt 包含三个字段 [1]。
<Instruct>
You are a moderator for a cybersecurity community. Be strict about
operational instructions targeting specific systems, and permissive
with theory and educational discussion.
</Instruct>
<Query>
Does this message give actionable instructions for attacking someone
else's system?
</Query>
<Document>
[the user's message, the model's response, or an image]
</Document>
<Instruct> 用于设置上下文和执行标准,<Query> 是需要回答的问题,<Document> 则是待判定的内容:文本、图片,或者两者同时存在。采用这种格式后,通常需要四个独立模型解决的四类问题,可以合并到一个模型中:对用户的 prompt 进行分类、审核模型的响应、检测模型是否拒绝回答,以及检测毒性内容 [1]。修改 <Query>,也就改变了要解决的问题。
这种设计最重要的一点,在于你的政策最终放在哪里:它存在于 prompt 中。调整“可接受”与“不可接受”之间的界线,只需编辑一段文字并重新评估,而不必打开训练 notebook。
在推理时,Shieldstral 不会生成文本。它执行一次 forward pass,读取 "yes" 和 "no" 两个 token 的 logits,然后仅对这两个值执行 softmax 归一化 [3]。logit 是模型在将分数转换为概率之前,为每个候选 token 分配的原始分数;我在《最可能的答案并不是正确答案》中解释过这种分布意味着什么。
# Safety score without generating a single output token
# pseudocode; the real snippet with transformers is on the HF model card
logits = model(prompt).logits[-1] # next-token distribution
z_yes, z_no = logits[tok_yes], logits[tok_no]
score = exp(z_yes) / (exp(z_yes) + exp(z_no)) # softmax over two tokens
unsafe = score > 0.5 # default threshold
结果是一个介于 0 和 1 之间的连续数值,默认阈值为 0.5 [3],而不是一个固定标签。因为它来自 softmax,所以表现得像概率:分数经过了校准,阈值则由你决定。对于误报会惹恼用户的场景,可以提高阈值;对于漏报可能导致事故的场景,可以降低阈值;还可以只把中间分数区间交给人工审核。只有普通的二元标签时,你并没有这种调节手段。
最直接的对比对象是 GPT-OSS-Safeguard-20B。它同样允许你把政策放进 prompt,但在给出最终判定前,会先生成一条完整的推理链。两者的平均文本 F1 相同,都是 84.9%,但每次调用的成本完全不在一个数量级 [2]。
一个 3B 模型能在平均文本基准上追平 20B 模型,无法用架构或更多的推理时计算来解释。答案在于数据集。
技术报告中最有意思的部分,是他们如何生成数据,让模型学会具体违反的是哪一项政策,而不只是学会粗糙地区分安全与不安全。他们使用约 5410 万个样本进行训练,其中 440 万个是合成的对比样本对 [2]。
所谓对比样本对,就是让同一份文档分别接受两个同级类别问题的评估:对于其中一个问题,正确答案是 "yes";对于另一个问题,正确答案则是 "no"。一段关于药物剂量的文本,可能违反“无监督医疗建议”政策,却不违反“宣传非法物质”政策。如果模型只见过标记为有毒或无毒的样本,它学到的只是一种笼统的毒性感知,无法区分其中差异。如果模型看到同一段文字会因为问题不同而得到相反判定,它就不得不认真阅读 <Query>。
他们使用了一套刻意不同于训练分类体系的评估分类体系进行验证。这是衡量模型是否真正使用了 prompt 中政策的唯一诚实方式。没有合成数据时,F1 为 61.1%;加入合成数据后,F1 达到 84.4% [2]。
这 23 个百分点,并不是靠增加参数换来的。
Shieldstral 并非某一次训练直接产出的模型,而是三个模型进行权重合并后的结果。模型合并是指对多个 checkpoint 的权重进行插值,不再经过任何额外训练就得到一个新模型。这里使用的是 SLERP(权重之间的球面插值,而不是线性平均):其中 0.6 来自使用合成数据训练的 checkpoint,0.3 来自使用公开数据训练的 checkpoint,0.1 来自最初的 instruct model [2]。
合并后的模型优于其中任何一个组成部分:在适配新的分类体系时,F1 从 84.4% 提升到 88.7%。这 4 个百分点来自一次针对权重的代数运算。
论文中还有一项数据,如果你最终需要让模型适配自己的领域,它能帮你省下一笔钱:LoRA(只训练添加到模型中的少量小矩阵,而不是训练模型的全部权重)在这项任务上的表现几乎与 full fine-tuning 一样好。在评估使用的安全基准之一 Aegis v2 上,两者分别为 87.1% 和 87.8% [2]。成本只需一小部分,F1 却仅相差 0.7 个百分点。
当你拥有自己的政策,并且需要处理大量请求时,Shieldstral 很合适。每次调用的成本只是对一个能装进 16 GB GPU 的 3B 模型执行一次 forward pass [1]。与每收到一条评论都要为 reasoning token 付费相比,这会彻底改变经济账。如果你还需要审核图片:它的多模态 F1 为 83.8%,而 OmniGuard-7B 为 77.6% [2]。
它的短板在于低资源语言,而且论文自己也公布了这一点。在印度尼西亚语上,prompt 分类的 F1 降至 55.5%,但同一种语言的响应分类却能达到 94.1% [2]。同一个模型、同一种语言,仅仅因为要求它执行的任务不同,结果就相差近 40 个百分点。
这才是做决策时真正重要的解读:84.9% 的平均值终究只是平均值。在把它部署给真实用户之前,请先到附录表格中查清楚你的语言和具体任务表现如何。
这是一种很自然的直觉,但在这里行不通。“参数越多,结果越好”这条曲线适用于开放式任务;对于判断一份文档对某个问题的回答是否为 "yes" 这种边界明确的任务,真正决定效果的是数据。对比样本对消融实验带来的价值,远胜于把模型规模扩大七倍。
如果附录中的分语言数据表明,模型在你的主要语言上只有 55.5%,而你却根据首页上的 84.9% 做出了决定,那你上线的审核模型在你的市场中几乎有一半时间都会失败。先看细分数据,再看醒目的总体数字。
这是一个昂贵的错误。一个已经在生产环境中部署自有分类器的团队,会习惯于在每次政策变化时重新启动训练流水线,因为他们只熟悉这种做法。对于能够从 prompt 中读取政策的模型,这种变更只需要编辑 <Instruct> 块、在评估集上运行,然后比较结果。耗时可以从几周缩短到一个下午。
前提是你必须拥有这套评估集:没有它,编辑 prompt 就等于在看不见结果的情况下盲目改变模型行为。
能够显式给出推理过程的 judge model,非常适合处理模棱两可的案例、开展质量审查,或者审计值得怀疑的决定。但如果把它用于高流量平台 100% 的请求,就等于在为一份没人会读的解释付费。把推理能力留给分数位于中间区间的案例。
[ ] 你拥有自己的评估集,它来自产品中的真实内容,并按照自己的政策完成标注
[ ] 你已经阅读模型按语言、按任务划分的结果,而不只是平均值
[ ] 政策写在 prompt 中,并在代码仓库里进行版本管理,而不是零散地存在于团队成员的脑子里
[ ] 阈值按产品和具体界面分别设置,而不是不假思索地沿用默认值
[ ] 设有一个中间分数区间,用于将案例转交人工审核或 reasoning model
[ ] 你在生产环境中持续衡量误报,而不只是关注基准测试的 F1
Shieldstral — Mistral AI — 2026 年 8 月 4 日的官方公告:介绍了三字段格式、所覆盖的四类问题、在单张 16 GB GPU 上运行,以及其效果能够匹配规模最高达自身七倍的模型这一说法。
Shieldstral — arXiv:2607.25857 — 关于该多模态安全分类器的技术论文:涵盖文本和多模态 F1、数据集规模与构成、对比样本对消融实验、SLERP 合并权重、LoRA 与 full fine-tuning 的对比,以及分语言结果。
mistralai/Shieldstral-1.0-3B — Hugging Face — model card:介绍 Ministral-3B 基础模型、Pixtral 视觉编码器、如何根据 "yes"/"no" logits 计算分数、默认的 0.5 阈值,以及支持的语言列表。
guard model 是一种经过训练、用于按照安全政策对内容进行分类的模型,而不是用于对话或写作的模型:它接收一份文档,然后返回该文档是否违反某项规则的判定。在 Shieldstral 中,输出是一个根据两个 logits 计算出的 0 到 1 之间的概率,无需生成任何句子,因此比让通用模型回答同一个问题便宜得多。
这取决于你的政策是否符合它们的政策。托管 API 会按照服务提供商定义的类别进行审核,你不需要自行运行任何基础设施;Shieldstral 则要求你自己托管模型,但作为交换,你可以在 prompt 中编写政策,而且内容永远不会离开你的网络。
如果你的审核标准比较常规,而且请求量较低,那么从工程时间成本来看,使用 API 更便宜。
这意味着你可以把这个数字视为置信度,并在任何适合自己的位置设置切分点:高于 0.8 就自动拦截,介于 0.4 和 0.8 之间则送交人工审核。默认阈值为 0.5 [3]。
可以,但应该先尝试编辑 prompt:这个模型专门接受过训练,目的就是让政策可以存在于 prompt 中。如果这样做之后仍然需要适配,论文对比了 LoRA 与 full fine-tuning 在这项任务上的表现,两者的 F1 仅相差 0.7 个百分点 [2],因此可以先从 LoRA 开始。
支持。西班牙语位于 model card 列出的支持语言之中 [3],其他受支持的语言还包括英语、法语、德语、意大利语、葡萄牙语、荷兰语、中文、日语、韩语、阿拉伯语和俄语。即便如此,论文的分语言结果显示,不同语言和任务之间存在巨大差距。因此,在相信全局平均值之前,请先使用你自己的西班牙语内容对它进行评估。
本文最初发表于 AI Coding Patterns——通过可视化、交互式课程学习如何使用 AI 编程。探索相关课程。
如果需要采取进一步行动,你可以考虑屏蔽此人和/或举报滥用行为。