Clef:做决定不必再呼叫一次大语言模型
Cloudflare 10 月 1 日以 Apache 2.0 放出 Clef 与 Clef-flash。决策步不做自回归生成,接口兼容 Jev。强化学习微调先是驻场服务,自助平台写在后面。
10 月 1 日,Cloudflare 的博客把代理环里早就发生、却一直被含糊带过的一件事拆开卖。Clef 和 Clef-flash,权重以 Apache 2.0 放在 Hugging Face,同时也跑在 Workers AI 上。它们要做的不是把话说完。博客的定义是:给有界的结构打分,返回带概率的类型化答案,代码拿去路由、升级,或者交给人。接口按 Jev API 兼容来做,换执行者不必先换编排。
拆开的是两种劳动。一种是把计划写成段落,把代码写成文件。另一种是在已经摆好的选项里做决定:急不急,交给哪个队,这一步算不算越过了界。后一种劳动长期寄生在前一种模型上。Clef 的论点是,寄生可以结束。
TL;DR:决定被做成一次非自回归的打分,而不是下一次采样。权重可以带走。按你自己的策略去微调,眼下仍是 Cloudflare 的驻场服务,自助平台还在后面。
用生成模型回答是或否,是把开放文本的毛病一起买下
代理每走一步,都要决定下一步叫哪个工具、结果能不能接受、动作该不该发出去。这些决定常常被实现成又一次对大模型的调用:把历史塞进上下文,让它生成一段看起来像结构化选择的文本。生成能工作,是因为大模型什么都能说。一个本该落在几个标签上的判断,可能先写出一段自我说明,再在说明里把标签改掉。延迟、价格和跑偏,都是开放文本的那一套。
Clef 拒绝这条路径的方式写在训练说明里,不是写在口号里。骨干是冻住的 Qwen,Clef 用 Qwen3.8-27B,Clef-flash 用 Qwen3.5-9B。推理时先做一次只做 prefill 的前向,再并行给合法的 schema 选项打分。决策步不一个 token 一个 token 地表演推理。没有中间文本。分数在不在,排序对不对,比一段流畅的理由更容易接进程序。流畅的理由曾经被误当成决定本身。误认维持了很久,是因为手里的模型太善于写理由。
Clef-flash 不是「便宜所以更差」的简单分档。他们自己的表上,flash 的中位延迟是 38.8 毫秒,Clef 是 209.3 毫秒,Jev 是 524.1 毫秒。质量也不总是大的赢。BFCL 和 API-Bank 上,flash 的数字高于 Clef。When2Call 上,Jev 更高。这张表是 Cloudflare 的评测,不是一份中立的抽检。它至少说明,决定模型内部已经有快慢和强弱,不能再用「换一个更大的生成模型」来表达所有的是或否。
博客还写了一句更冲的话:人不必再留在代理决策的环里,模型可以自己决定、自己执行,需要时再交给人。这是产品想卖的终局。10 月 1 日交出来的,是打分器和一套还没自助化的微调。终局和交付不是同一天的东西。
开源的是权重,政策还在他们的微调服务里
决策若只是别人的服务,标准就住在别人的权重和别人的系统提示里。Apache 2.0 让决策层可以带走、可以改、可以嵌进自己的网关。有两档,意味着决定开始有大小,不必永远绑定当时最贵的生成旗舰。开源不证明打分公正。它证明公正与否可以被复现,也可以被替换。
许可有一个更平凡的后果。决策模型若不能被带走,企业就无法在自己的边界里复现「为什么当时放行」。复现依赖服务还在、模型还没被默默换代。Apache 2.0 不保证这些运营纪律,它只是不再用许可挡住纪律。挡不挡得住,要看权重是不是真的被保存,阈值是不是真的被版本化。
微调没有和权重一起变成一个按钮。博客写的是强化学习产品,顺序却是先由驻场工程师动手,再从这些单子里做出客户能自己采集数据、训练、部署回 Workers AI 的平台。没有微调,开源的决策模型只是一个通用口味。放行政策不是通用口味,它是一套具体的边界。把边界从提示词移向训练信号,比一句「请忽略以上规则」难被当场带走。难,不是不可能。微调把篡改从对话挪到训练数据,监督的位置也得跟着挪。眼下这个位置,还在 Cloudflare 的工程师旁边。
兼容 Jev API,是在降低拆分的迁移成本。理念上,决定和生成不是一回事,这句很容易同意。工程上,换模型若等于换整个编排,拆分就会停在架构图的虚线里。兼容把虚线收成可以灰度的路由。同一条 API,背后从自回归生成换成结构化打分,日志里才看得到决定有没有更稳、更快、更少胡言。
接口相同不等于行为相同。原来指望模型顺便解释为什么的调用方,会发现打分模型没有义务产出一段可阅读的内心戏。解释若仍要给人看,得另找生成模型来写,或者接受解释不再是决策路径的一部分。这个损失是健康的。它迫使系统把给人看的句子,和给程序执行的决定分开。混在一起的时候,句子经常很完整,决定却跟着句子走偏。
灰度也有一种新的失败。生成模型做决定,失败往往是一段看起来合理的文本,诱使人继续对话。打分模型做决定,失败往往是一个突然变高或变低的分数,要求人去看阈值。兼容 API 降低的是接入成本,没有降低看阈值的成本。团队若把 Clef 接上,仍用阅读生成文本的习惯去理解它,分数和句子不一致时选择相信句子,拆分就又被缝了回去。
拆开之后,责任界面变多了
决策模型会引出新的推诿。生成一侧可以说,危险的选择不是我说出来的,是打分打高了。决策一侧可以说,我只给分数,动作空间是调用方定义的。调用方可以说,两边都是买来的。生成与决策绑在同一次采样里时,这种推诿比较难,因为没有第二家可以指。拆开是架构上的进步,也是责任界面的增加。
进步仍然值得要。代理环里最需要被问的,常常就是那个瞬间的选择:为什么放行,为什么是这把工具。选择若埋在一段生成文本的中部,提问只能做文本解读。选择若是一次结构化打分,至少可以问分数从哪来、微调用了什么信号、阈值是谁设的。问得出来,不等于已经有人在问。这一天给出的是两只 Apache 2.0 的模型、与 Jev API 的兼容,以及一条从驻场走到自助的微调路线。没有一份随之生效的决策日志标准。工具先于制度,是基础设施发布的常态。制度若要跟上,跟上的位置应该是分数和阈值,而不必再把整段生成记录当成唯一证据。
生成不会消失。长计划、代码、给人类的说明,仍要有人写。该消失的是一种懒惰:因为手里有一个什么都能说的模型,所以连是或否也让它说。前面那些把速度和常驻单独做成产品的发布,已经让步数和在场变成默认。默认之下,继续用同一次采样包办决定,会又贵又险。贵,是每一次决定都在为开放文本付费。险,是开放文本的跑偏会直接变成动作的跑偏。
Clef 不是又一个聊天模型的改名。谁若还用一次华丽的采样来回答放行与否,之后就不再是因为没有别的工具,而只是因为选择把两种劳动继续糊在一起。糊不糊,现在也能选择。按自己的边界把分数训准,还得等那套自助平台,或者先把驻场工程师请进来。