[控场AI]
· 12 分钟阅读· 6,479 字

Cloudflare clef-omni:不生成文本的30B开源决策模型

Cloudflare clef-omni:不生成文本的30B开源决策模型

Cloudflare 开源 clef-omni:30B 多模态决策模型,输出概率而非文本,分类强推理弱。

Cloudflare 在 Hugging Face 上发布了 clef-omni,一个 Apache 2.0 许可的 30B-A3B 混合专家多模态决策模型。它不做文本生成,而是接收文本、JSON、图片、音频或视频,外加 1 到 64 个带类型的问题(noul、choice、score),对每个候选答案返回概率,因此没有 JSON 需要解析。它在意图分类和路由任务上大幅领先 Jev,但在 GPQA、BBH、MMLU-Pro 等多步推理任务上落后 12 到 31 分,RAGTruth 幻觉检测更从 Clef 的 79.4 掉到 42.0,做 RAG 校验应改用普通 Clef。音视频可在一次调用内处理,托管价每百万输入 token 0.15 美元,成本极低。本地部署需约 64 GB 显存,且示例代码会执行下载仓库中的 Python,需固定 revision 并审读代码。

Cloudflare 把 clef-omni 放进 Hugging Face 了:一个 30B 多模态模型,Apache 2.0 许可。它写不出俳句,也写不出任何句子。你给它文字、图片、音频或视频,外加一组带类型的问题,它返回每个候选答案的概率。这是 Cloudflare 对 TypeSafe 的 Jev 的开源权重回应。

如果你在信息流里看到「Cloudflare 开源模型」就以为来了个 Llama 竞品,那要失望了。它属于决策模型(decision model),而非对话模型。我认为它在生产环境里会比大多数人自托管的聊天模型更实用,但有两条来自 Cloudflare 自家基准表的警告必须先摆在前面:推理能力和 RAG 幻觉检测。

clef-omni 到底是什么

据 模型卡,它是一个「30B-A3B 混合专家多模态模型」,把状态和一组带类型问题映射成决策。你发送上下文(JSON、工单、截图、一段 20 秒视频),加上 1 到 64 个问题。每个问题属于三种类型之一:

  • noul:是 / 否
  • choice:从 N 个带标签的选项里选一个
  • score:有序刻度,比如「无影响 / 轻微 / 严重 / 致命」

模型做一次前向传播,为每个问题的每个允许选项返回一个 logit。因为它从不生成 token,所以没有 JSON 要解析,也不会有尾随逗号在凌晨三点搞崩你的流水线。

规格速览:底座是 Qwen3-Omni-30B-A3B-Instruct(只用 thinker,语音输出未使用),总计 30B 参数、激活 3B,支持文本、JSON、图片、音频、视频(2fps 采样),上下文 64,000 token,Apache-2.0 许可,Workers AI 上的 ID 是 @cf/cloudflare/clef-omni,托管价每百万输入 token 0.15 美元,输出免费。

Cloudflare 冻结了 Qwen3-Omni 的理解骨干,训练 LoRA 适配器,并使用了标签平滑交叉熵配合 Brier 分数校准。模型卡补充了一个替代文本生成的关键部件:一个小的「联合模式头」(joint schema head),读取骨干的最终隐藏状态,为所有问题的所有选项一起打分。我最在意校准这一环——如果你要按「0.85 置信度判定这是钓鱼」来设阈值,那些概率必须真的有意义。

什么是决策模型

决策模型(decision model)是一类与对话模型(chat/LLM)输出形态不同的架构:它不对输入生成自由文本,而是把「上下文 + 一组预先定义好的问题」映射为每个候选答案的概率分布。典型任务包括意图分类、工单路由、内容审核打标、工具选择等——这些场景的共同特点是答案空间有限且结构化,因此直接输出概率比生成文本再解析更可靠。

传统做法是用大模型生成一段 JSON,再写规则或再用模型把它解析成结构化决策,这条链路里任何一步出错(多余的解释、尾随逗号、字段名漂移)都会在生产环境引发静默故障。决策模型通过在一次前向传播中对所有问题、所有选项一起打分,绕过了整个生成-解析环节:没有 token 生成,也就没有 JSON 可崩。它在概率校准上也可以针对任务专门训练(例如用 Brier 分数),让「0.85 置信度」这类阈值真正具备可操作含义。

MoE、A3B 与「30B-A3B」的含义

混合专家(Mixture-of-Experts, MoE)是 Transformer 的一种稀疏化变体:把前馈网络拆成多个「专家」子网络,每次前向只激活其中少数几个,由路由网络决定激活哪几个。因此「30B-A3B」表示模型总参数量约 300 亿,但处理每个 token 时只激活约 30 亿——推理算力开销接近一个 3B 模型,而知识容量接近 30B 量级。

这对部署成本的影响很直接:MoE 通常需要把全部专家权重加载进 GPU,所以显存需求仍按 30B 计(模型卡给出 bf16 约 64 GB),但吞吐和延迟更接近小模型。这也是为什么 clef-omni 在 80 GB 卡上能跑,而 24 GB 消费级卡在 bf16 下装不下。LoRA(Low-Rank Adaptation)则是在冻结主干的前提下,只训练少量低秩适配器参数,让 Cloudflare 能用相对便宜的代价把 Qwen3-Omni 的理解能力「校准」成决策输出。

Clef 与 Jev:Cloudflare 为什么做这件事

clef-omni 是一个只有十天历史的家族里的第三个模型。Cloudflare 在 10 月 1 日发布了 Clef 和 Clef-flash,作为对 Jev 的开源权重回应;Jev 是 TypeSafe 的决策模型,9 月 15 日发布。Clef API 与 Jev 兼容,切换只需改模型 ID。

首次发布反响不佳。据 Traictory 的综述,Hacker News 帖子里(614 分、214 条评论)有人按每次调用约 300 token 估算,一百万次决策在 Jev 上约 12.60 美元,在 Clef 上约 72 美元。Clef 每百万 token 收 0.24 美元,而 Jev 是 0.042 美元,贵了近六倍。另有人写道「公开基准很容易作弊」。在 r/LocalLLaMA 上,人们争论 Cloudflare 是对着较弱的开源 Jev 变体做的基准。

八天后,Cloudflare 把 Clef-flash 从 0.09 美元降到 0.038 美元(已低于 Jev),把 Clef 的推理迁到 SGLang 获得 1.7 到 2.0 倍中位加速,并发布了 clef-omni。Clef 本身仍保持 0.24 美元。我猜 Cloudflare 里有人读了那些帖子。

基准对比:先看难看的那几行

以下数据全部为自报,来自 Cloudflare 内部跑 Decision Index 0.2.1 套件的结果。目前还没有人独立复现。

意图分类和路由类任务(BANKING77、CLINC150)上 clef-omni 表现优秀,大幅领先 Jev。凡是需要多步推理的任务(GPQA、BBH、MMLU-Pro),Jev 领先 12 到 31 分。

我最在意的行是 RAGTruth。Clef 在检测 RAG 输出幻觉上拿到 79.4,而 clef-omni 掉到 42.0。如果你原本打算用 clef-omni 当廉价的「这个回答有检索文档支撑吗」检查器,请改用普通 Clef。我猜加入音频和视频在这里付出了代价,但 Cloudflare 没有解释这次下滑。

工作流评测里,clef-omni 每一行都低于 Clef:发票处理的精确动作是 60.2 对 64.7,客服是 71.6 对 76.3。它也落后 Jev(61.8 和 76.0)。

Brier 分数与概率校准

Brier 分数是衡量概率预测质量的指标:对每个预测计算(预测概率 − 实际结果)² 再取平均,0 表示完美,越小越好。它同时惩罚「方向错误」(把真的判成假的)和「过度自信」(说 0.99 实际只有 0.6 命中)。相对于只看「是否答对」的准确率,Brier 分数更关心概率本身是否可信。

这就是为什么校准对决策模型生死攸关。当你在生产里设定「置信度 ≥ 0.85 就自动打标钓鱼邮件」,真正起作用的不是模型分类得对不对,而是它的 0.85 是否真的对应约 85% 的准确率。未经校准的模型常常系统性过度自信,导致阈值形同虚设。Cloudflare 使用标签平滑交叉熵配合 Brier 分数校准,目的正是让输出的概率可以直接被业务阈值消费,而不是再叠加一层规则。

一次调用处理音视频:延迟与成本

Cloudflare 想让你停止串联模型。与其先跑 Whisper 转写、再跑一次图像描述,不如直接发送片段并提问。博客给出的数字是纯文本决策中位约 130 毫秒,图片约 150 毫秒,一段 21 秒带声音的视频约 1.5 秒,都在一次 API 调用内完成。

同一天发布的 changelog 却说文本约 20 毫秒、同样的 21 秒片段约 300 毫秒。这两个数字不可能是同一个测量口径。我猜是服务端计算与端到端之别,但 Cloudflare 没说,所以按慢的那个做预算更保险。

成本方面,Workers AI 文档把音频标为每分钟约 780 token,视频在最高分辨率下每分钟最高约 15,400 token(480p 约 8,600)。按 0.15 美元/百万计算,一分钟最高分辨率带声音视频约合四分之一美分,便宜到你可以扫描用户上传的每一个片段。

动手前先看托管限制:每次请求最多 4 张图、4 段音频、2 段视频,单段视频最长 60 秒,单段音频最长 300 秒,音视频合计 16 MiB。远程 URL 也不被接受,媒体必须以 base64 内嵌在请求里。

另一处提醒来自 Digital Applied:OpenRouter 的目录目前只列出 clef-omni 的文本和图片输入。如果你需要音频或视频,直接走 Workers AI。

在 Workers AI 上调用 clef-omni

在 Worker 里就是一次 env.AI.run 调用:

const result = await env.AI.run("@cf/cloudflare/clef-omni", {
  model: "clef-omni",
  state: "Checkout has been failing for every customer for the last hour.",
  questions: {
    urgent: { type: "noul", instructions: "Is this support request urgent?" },
    team: {
      type: "choice",
      instructions: "Which team should handle this request?",
      criteria: {
        billing: "Payments, invoices, and refunds",
        technical: "Outages, errors, and configuration",
        sales: "Plans and upgrades",
      },
    },
    severity: {
      type: "score",
      instructions: "How severe is the customer impact?",
      criteria: ["No impact", "Minor", "Major", "Critical"],
    },
  },
});

result.answers 会以相同的 ID 作为键返回:urgent 的概率、team 的选中项及各选项概率、severity 的概率加权分数。或者用 curl 打到 https://api.cloudflare.com/client/v4/accounts/$CLOUDFLARE_ACCOUNT_ID/ai/run/@cf/cloudflare/clef-omni,带 bearer token,body 一致。

本地用 transformers 跑 clef-omni

先准备大显存。模型卡说骨干在 bfloat16 下需要约 64 GB GPU 显存,测试环境是单张 H200、torch 2.11、transformers 5.10.2。按 80 GB 卡规划,24 GB 消费级卡在 bf16 下装不下。

pip install "torch==2.11.*" "transformers==5.10.2" huggingface_hub pillow av

pillow 处理图片,av 处理音频和视频。接着从模型卡复制示例代码:下载快照、把路径插入 sys.path、从 joint_schema_model 导入 collate_records、encode_record、load_release_model,构造一条 record,编码、批处理,在 torch.inference_mode() 下跑模型,对每个问题的 logits 做 softmax 得到概率。

有一点必须点出来:那段代码 sys.path.insert(0, path) 之后从下载的仓库里导入 joint_schema_model,等于执行 Hugging Face 快照里的 Python,和 trust_remote_code=True 是同一个信任决策,只是没有那个标志提醒你。运行前先读 joint_schema_model.py,并用 revision="<commit-sha>" 固定版本,免得代码在你脚下被改。

为什么加载开源模型存在代码执行风险

Hugging Face 仓库不只是权重文件,还可以包含自定义建模代码。当模型架构不在 transformers 原生支持范围内时,加载需要执行仓库内的 Python,这就是 trust_remote_code=True 的用途——它明确提示你将运行来自第三方的代码。风险在于:仓库内容可被作者更新,同一版本号或分支名下的代码可能在你不知情时变化,从而引入任意代码执行。

revision="<commit-sha>" 通过固定到某次提交的 SHA 哈希来锁定内容,使加载行为可复现、可审计。文中示例先 sys.path.insert 再导入本地快照里的 joint_schema_model,效果上等同于隐式的 remote code,却没有那个明显的警告标志,因此更需要人工审读。最佳实践是:固定 revision、阅读所有被导入的模块、在隔离环境或沙箱中首次运行。

该不该用 clef-omni

我的看法是:如果你在做工单路由、上传打标、内容审核,或帮 agent 决定调用哪个工具,而且输入里有一部分是截图、语音留言或短视频,那 clef-omni 是目前最实用的开源选择。Apache 2.0、概率经过校准、没有输出要解析、视频每分钟约四分之一美分。

但如果你的决策需要真正的推理,或者你要检查 RAG 回答的幻觉,公开数字告诉你另寻他处。另外这里的「开源」指的是开放权重:Cloudflare 一位 PM 向 The Register 确认训练数据不公开。

我更想知道 Cloudflare 到底为什么做这件事。它的博客说内部用 Clef 检测文档仓库里的垃圾信息、插件库里的钓鱼、PII 扫描和恶意域名。也就是说,一家 CDN 和安全公司认定分类是基础设施,不想从 TypeSafe 那里租。

那么你怎么看:Cloudflare 自己训模型,是因为托管别人的模型是没有护城河的商品生意,还是因为它的安全产品需要一个自己掌控的分类器?以及,真的有人把生产环境里的 Jev 换成 Clef 了吗?

#clef-omni#Cloudflare Workers AI#Jev#多模态决策模型#开源权重模型#Qwen3-Omni#概率校准
分享:

相关推荐