无尘阁日记

无尘阁日记

用大模型做分类判断,又慢又不稳?这个 0.8B 小模型 33 毫秒给答案(3.5 万星)
silcano

github监控器 · 2026-11-10 · 约 2829 字 · NandhaKishorM/laya

 

你要判断"这条工单属于哪个部门",现在只能让大模型读一遍再输出 JSON。贵、慢、而且同一个输入两次可能给两个答案。

laya 走的是另一条路:非自回归(non-autoregressive)——不是"一个字一个字生成",而是一次前向传播直接输出结构化判断,100 多种语言,33 毫秒。

3.5 万星,每天涨 655 星,Apache-2.0。它能输出"带校准的概率",意思是那个 0.82 是真的 82%,不是随口说的。

一、先说结论:不是所有任务都该用生成模型

大模型是"通用生成器",但很多任务根本不需要生成。


任务
真的需要生成吗
这条评论是正面还是负面
不需要,是分类
这封邮件紧急程度 1-5
不需要,是打分
这段代码属于哪个模块
不需要,是分类
要不要把这条转给人工
不需要,是二分类
把这段翻译成英文
需要生成

前四行用大模型做,等于用卡车送一封信。

laya 就是那辆自行车:专门做"判断",不做"生成"。

laya 数据卡

二、它的技术路线:非自回归

自回归 = 一个 token 一个 token 往外吐,慢,而且每一步都可能跑偏。

非自回归 = 一次性算出整个结果。对"判断"这种任务,输出是有限的几个字段,完全不需要逐个生成。

带来的三个直接好处:

  • 快。 单次前向,33ms 量级,比生成式快一到两个数量级;
  • 稳。 同样输入同样输出,没有采样随机性;
  • 能校准。 输出的概率可以被训练成"真实概率",不只是"相对排序"。

第三点最专业,也最重要。"校准"意味着模型说 0.8 的时候,长期统计下真的有 80% 是对的。 这是能拿去做业务决策的前提。

三、装:一条 pip 命令

基础安装:

python -m pip install laya

用 uv 的话:

uv add laya

要带 0.8B 的通用读取器(vegaml),确保版本够新:

python -m pip install -U laya # 0.4.23 或更新,vegaml 随包提供

当前版本是 0.4.31。这个版本号值得记——README 里"0.4.31 有什么新东西"单独占了一节,说明迭代快。

四、用:三个概念,一段代码

三个概念:Agent(模型)、questions(你要它判断什么)、state(输入文本)。

import laya

agent = laya.Agent(vegaml=True) # 0.8B 通用读取器,默认

out = agent.predict(state, questions)

questions 是字段定义——你要它输出哪些判断、每个判断有哪些选项。

换模型的语法很简洁:"Switching the model underneath is one string"——换底层模型只是换一个字符串,引擎、问题定义、字段都不变。

这个设计的意义:你的业务代码不用跟着模型换代改。

五、长文本和图片:两个边界

长文本: 单次最多 73,728 token。超了会被截断,而且它会告诉你:

usage["truncated"]

这个字段必须检查。被截断的输入会给出自信但错误的答案——这是所有长文本模型的通病,它至少告诉你了。

图片: 支持 PIL image、路径、或 HxWx3 数组,任何 Pillow 能打开的格式都行,会被缩放到约 1 百万像素。

README 里的示例图

六、路由器:小模型和大模型怎么分工

它有一个 Router 模块,可以按输入长度和复杂度自动选模型:

from laya.vega import Router

router = Router(fast=laya.Agent(), vega=agent)
out = router.predict(state, questions)

返回里带 routing 字段,告诉你它选了谁、为什么:

{"model": "fast", "reason": "short English text, no fitted head: the ..."}

这个设计很实用。短英文文本用快模型,长文本或非英语用大模型。平均成本能降下来,延迟也降。

而且它把"为什么选这个"写进返回里——可审计。线上出问题时你能解释"为什么这次走了慢路径"。

七、想更准:微调自己的头

README 有"Fine-tune for better accuracy"一节,意思是在预训练模型上加一个你自己的输出头,用你的标注数据训。

数据格式很直白,CSV 三列:

state,team,urgency
"We were charged twice for the March invoice, please refund the duplicate.",billing,2
"I would like to apply for the open backend engineer role. Where do I send my CV?",hr,0

state 是输入,后面几列是你要它判断的字段。

这个格式的好处:不用写 prompt,不用调格式,标注即训练数据。

先用预训练模型跑一批,把置信度低的挑出来人工标注,再微调。这个循环比"先标一千条"效率高十倍。

八、六个坑

  • 拿它做生成。 它是判断引擎,不是聊天模型;
  • 不检查 truncated。 长文本被截断后会自信地答错;
  • 以为概率天然准。 校准是训练出来的,未微调的头可能偏;
  • 一次问太多字段。 单次判断字段越多,每个的准确率越难保证;
  • 不设兜底。 置信度低于阈值要转人工,这个逻辑要你写;
  • 忽略语言差异。 它支持 100+ 语言,但不同语言准确率不同,要分语言测。

九、和"让大模型输出 JSON"的对比


大模型 + JSON 输出
laya
延迟
几百毫秒到几秒
33ms 量级
成本
按 token
按调用,便宜一到两个数量级
一致性
有采样随机性
确定性
概率含义
基本不可信
可校准
灵活性
任意任务
固定字段的判断
部署
API 或大显存
0.8B,消费级硬件可跑

第四行是分水岭。"模型说 0.8"这件事,只有校准过才有意义。

十、典型用法:三个真实场景

按落地难度从低到高:

  1. 工单分派:判断这条工单属于哪个团队、紧急度几级。字段固定、标注容易;
  2. 内容审核:是否违规、违规类型、置信度。需要校准概率才能定阈值;
  3. 意图识别:用户这句话是要退款、要查询还是要投诉。和现有规则引擎配合,低置信度转规则。

三个场景的共同点:输出空间有限、判断标准明确、需要低延迟。

README 里的说明

十一、谁该用


你是谁
建议
有大量分类/打分需求
强烈建议,这是它的主场
要低延迟(几十毫秒)
建议,生成式做不到
要做可解释的业务决策
建议,校准概率是关键
要模型会写文章
别用,它不是生成模型
只有很少标注数据
先用预训练跑一遍看看

十二、版本与地址


用途
地址
仓库
github.com/NandhaKishorM/laya
模型
huggingface.co/convaiinnovations/laya
论文
doi.org/10.20944/preprints202611.0781.v1
许可
Apache-2.0
版本
0.4.31
包名: laya
版本: 0.4.31
许可: Apache-2.0
模型: 非自回归 System 1 决策引擎(vegaml 0.8B)
速度: 单次前向约 33ms
上限: 单次 73,728 token
语言: 100+

最后一句:这个项目最值钱的不是"快",是它把"概率"做成了可以相信的东西。没有校准的概率,只是模型在表达态度。

 

关于作者 · 江天(楠哥)
AI 实战导师 / 企业 AI 落地顾问 / 智能体工程师,17 年跨界、15,000+ 小时 AI 实操、20+ 套已交付工作流。