GLiNER2.5-Decide:一个只做分类、不做推理的 340M 模型,把路由和意图判断塞进单次 forward

Fastino 发了个新模型,叫 GLiNER2.5-Decide,340M 参数,Apache 2.0 协议,跑在 DeBERTa-v3-large 编码器上。光是这句话你可能没感觉,但它干的事挺反直觉:你不在调用时传模板,也不靠生成 token,直接把一套标签集丢给它,它就在单次 forward pass 里把所有头的打分都算完。意图、路由、情感、优先级、策略、多标签,一个调用全出。

先说说它定位得多窄。卡上写得非常直白:这不是通用模型,不推理、不解释、不回答开放问题,是个专门做「运营决策」的分类器。客户和银行意图、旅行和诊所请求、评论情感、文档类型、邮件和工单路由、转人工、Agent 是否完成、审核、严重度、紧急性、垃圾邮件。同一个调用还能对一段文本做阅读理解式的 yes/no 问答、给一本书分类、用带描述的标签,甚至输出 0 到 10 的序数评分。它的主页甚至放了一段「这不是什么」的免责声明,这种自我设限在模型发布里挺少见。

跑分上,它在自家 fastino/fast-decisions 数据集上做了 exact-match 准确率对比:17 个领域,每个领域 300 个留出样本,所有模型用同一份文本和候选标签。GLiNER2.5-Decide(340M)平均 60.2%,比 1B 版(59.6%)还高一点,也压过 JevK5 的 57.6% 和 SemIf(Qwen3.5-4B)的 56.4%。1B 参数反而没打赢 340M,说明在这个任务上规模不是决定性因素。这套测试是英文的,多语言输入得换 GLiNER2.5-multi-Decide。当然,exact-match 只说明它「选对标签」的能力,别把它当成泛化能力或者理解力的证据。

真正的看点是怎么用。装一个 pip install gliner2,然后 AutoExtractor.from_pretrained("fastino/GLiNER2.5-Decide") 就能本地跑,CPU 或 GPU 都行。它的设计哲学是「每轮调一次,就把一整套流程的多个决定一起拿了」。比如一个共享邮箱,一条消息进来,你一次调用同时拿到 intent、urgency、route 三个头的判断,路由器不需要把模型跑三遍;酒店场景里,一个客人既想换房、又催账单、又要报修,一条消息上四个头一起打分,直接开出正确的工作单,不用链式 prompt 去拼。

我最喜欢的一个用法是判断「Agent 到底做完了没有」。很多 Agent trace 看起来忙忙碌碌,草稿存了、按钮点了,但字段没填、收件人没地址,发送键还是灰的。用这套逻辑,判断依据是「目标 + 最后状态」,而不是「模型有没有停嘴」。这其实直击了现在 Agent 评测的一个痛点——完成度不该由「说了多少话」决定。

还有几个小细节值得一提。它支持带描述的标签,就是标签名字不够用时,给它配一句说明,描述本身参与决策,这让私有分类法在小模型上也能保持精度;也支持 0 到 5、0 到 10 这种序数评分,直接当字符串传进去就行。审核、垃圾邮件、严重度这些偏「策略判断」的头它都有,算把运营侧的脏活基本覆盖全了。

需要提醒的是,这个榜单是自家数据集、exact-match 口径,只能说明它在这个任务组合上的表现;实际部署前最好拿你自己的数据跑一遍。模型是开源的,GitHub 仓库和 arXiv 论文 2507.18546 都在,论文讲的是 GLiNER2 的 schema-driven 多任务提取框架。想自己试,直接本地跑最快,毕竟 340M 的权重(实际 safetensors 约 0.5B 参数量级、F32)在 CPU 上也不至于等太久。