开源低延迟非自回归决策模型Laya热度飙升

近期,一款名为Laya的非自回归System 1决策模型正式开源,由Convai Innovations推出。这款模型凭借仅33到38毫秒的超低推理延迟和高效的并行处理能力,专为邮件分流、内容审核等快速分类决策场景设计。开源不到两天,Laya就登上了主流开源模型榜单前三,在GitHub平台收获了超过2.1k的Star数。
Laya是一款面向分类与决策任务的专用模型,它不需要像大语言模型那样逐字生成回复,而是直接输出判断结果和对应概率,能够快速从文本中识别类别、风险等级和处理优先级,适用于邮件分流、钓鱼检测、内容审核和客服路由等多个业务场景。
这款模型的技术源自2025年Nandakishor M公开的强化学习决策研究,后续有团队推出了同思路的闭源模型Jev,而Nandakishor M则进一步优化重构,将其扩展为完全开源的通用横向场景System 1决策模型。Laya包含4.21亿参数,基于双向编码器构建,使用RLCD方法训练概率输出,在GPU上的推理延迟仅33到38毫秒,对比Jev公布的150毫秒延迟,速度提升了约4倍。模型采用Apache 2.0协议开源,支持本地部署,还通过校准概率为自动化决策提供可靠的置信度依据。
你可以通过以下链接获取模型和代码:
模型下载地址
代码仓库地址
为什么生成式大模型不适合轻量决策
很多企业的AI流水线都存在一个明显的瓶颈——用生成式大语言模型处理简单的反射式决策任务。比如当客服工单进入系统、邮件到达收件箱,或者用户提交API请求时,往往只需要回答几个简单的问题:这个请求应该分配给哪个部门?这封邮件是不是钓鱼攻击?这个提示词有没有越狱风险?这个任务的紧急程度如何?
调用8B甚至70B的大语言模型来处理这类任务完全是大材小用:整个过程需要等待500到2000毫秒的流式生成时间,还要承担实际的推理成本,之后还需要编写正则表达式或JSON解析器来从自由格式的文本中提取干净的标签。更糟糕的是,大语言模型很容易产生幻觉,输出虚假的置信度,比如当它输出“confidence: 0.95”时,只是在生成听起来自信的文本,并没有经过真正的数学校准。
真正需要的是类似人类System 1的决策模型:能够快速做出反射式决策,输出经过校准的诚实概率,并且在标准硬件上只需要30到40毫秒就能完成推理。
三种核心决策原语
Laya采用了System 1的设计理念,它可以接收原始文本、邮件、工单或者JSON文档作为输入,搭配一个或多个带类型的问题,通过一次并行前向传播完成全部评估。它支持三种核心决策原语:
- choice:从预定义的字典选项中选择最合适的标签,返回选中的结果、每个候选选项的概率和置信度分数,非常适合部门路由、意图识别和主题分类。
- score:按照有序量表(比如0到3级)对输入状态进行评分,返回期望分值、各等级的概率和置信度,适合评估客户满意度、任务紧急程度和提示词危害等级。
- noul:直接回答布尔类型的问题,返回经过校准的真实概率,取值范围从0.0到1.0,适合检测钓鱼邮件、垃圾信息、越狱提示词或者客户流失风险。
因为Laya的输出空间严格限定为概率和数字,所以它不会生成自由文本,也就不会产生幻觉,更不会输出格式损坏的JSON。
模型架构细节
Laya的核心是一个包含4.21亿参数的端到端架构,由两个紧密耦合的组件组成。
ModernBERT-large主干网络
这个主干网络包含3.95亿参数,共有28层,隐藏维度为1024,配备16个注意力头和维度为2624的GeGLU中间层,通过旋转位置嵌入支持8192个Token的上下文长度。由于它是完全双向的编码器,每个Token都可以同时关注输入文本和选项中的所有内容。
[MASK]选项提取机制
对于每个问题,build_sequence函数会按照特定方式封装提示词,每个选项都带有一个[MASK] Token。输入经过ModernBERT和两层决策头Transformer后,通过torch.gather专门提取这些Mask标记位置的隐藏状态。选项评分器MLP会将每个1024维的标记状态投影为一个标量Logit,对当前问题的所有选项执行Softmax后就能得到候选概率分布,其中温度参数T会根据问题类型和选项数量分别拟合调整。
行动与升级处理决策头
在实际的自动化系统中,需要判断何时可以信任模型的输出,何时需要将任务交给人工处理。Laya新增了这个决策头,它接收池化后的[CLS] Token(1024维),并拼接了四个分布特征:最高概率max(p)、前两名概率差p_top1 - p_top2、归一化熵H(p)/log(K)、选项预算比K/255。这个1028维的向量经过两层MLP后,会输出[P(act), P(escalate)],也就是自动执行和升级人工处理的概率。
另外,Laya支持一次前向传播处理多个问题:比如针对一封邮件提出5个问题,这5个序列会被整理成一个批次,ModernBERT在GPU上只需要一次前向传播就能处理全部问题,耗时仅约35毫秒。
RLCD训练校准方法
如何训练Laya,让它输出的概率真正经过校准?
普通训练方法的陷阱
如果用交叉熵训练分类器,只有当获胜类别的Logit趋近于无穷大时,损失才能最小化,这会让模型变得过度自信。如果用二元奖励的标准强化学习,预测正确奖励+1,错误奖励0,那么策略梯度会迫使最高概率趋近于1.0,其余概率趋近于0.0,也就是朴素强化学习会通过破坏校准来提升准确率,让模型变成“自信地犯错”的工具。
严格适当评分规则
RLCD(面向校准决策的强化学习)的核心是使用严格适当评分规则作为奖励。在决策理论中,当模型报告分布q,真实结果为y时,评分规则S(q,y)会给出一个分数,当且仅当q等于真实分布p时,期望得分能达到唯一最大值,这样的评分规则就是严格适当的,它能保证只有当模型输出诚实的概率时,才能获得最高奖励。
复合奖励结合了三种适当评分: 1. 对数评分S_log:如果模型赋予真实结果的概率很低,这个规则会施加惩罚,为了保持数值稳定性,下限被截断为-9.21。 2. 球面评分S_sph:这是一个取值在0到1之间的有界分数,它会奖励模型将概率质量分配给正确的类别,同时避免纯对数损失带来的极端梯度尖峰。 3. 排序概率评分S_rps:针对有序的score问题,比如0到3级的紧急度量表,如果真实紧急度是3级,那么预测为2级显然比0级更好。RPS衡量的是两个累积分布之间的平方距离,在奖励中减去RPS,可以让模型理解量表上的距离差异。
训练细节优化
训练过程使用纯策略梯度,监督式交叉熵损失为零: - 高斯探索:对于每个问题,训练过程会采样8组带噪的候选Logit,噪声向量会被投影,让它在所有选项上的和为零,也就是epsilon - mean(epsilon),因为给所有Logit加上同一个常数在Softmax中会相互抵消。探索的标准差sigma从1.0逐渐衰减到0.3。 - 带噪分布:基于带噪的Logit计算得到的概率分布。 - 奖励评估:基于上述三种评分计算最终奖励。 - 组均值优势:相对于8个样本的组均值计算优势,采用GRPO风格的优化方式。 - 策略损失:使用高斯对数概率计算。 - 成本敏感的行动头:行动头从自动执行和升级人工两个选项中采样动作,并根据成本矩阵获得奖励:自动执行且结果正确奖励+1.0,自动执行但结果错误惩罚-3.0,升级人工处理惩罚-0.5。只有当置信度高于62.5%时,自动执行操作才是有利的,这个策略会自动学会这个阈值。
多轮轨迹建模优化
在2025年3月的早期研究中,团队使用PPO预测销售转化的多轮对话变化,但存在数据泄漏的问题:如果在第一轮就输入完整的对话嵌入,模型会看到未来的信息。在Laya的设计中,这个问题得到了解决:对话会按轮次切分成逐步增长的前缀,模型只能接收截至当前轮次的上下文。训练使用以蒙特卡洛回报为目标的时序差分学习,也就是TD(lambda=1.0),当lambda=1.0时,早期轮次会直接针对对话的真实终局结果进行训练,而不是从模型自己的猜测中自举,这样模型就能学习到哪些早期的对话模式真正会带来转化或者流失。
置信度计算方式
对于每个问题,Laya会返回一个0.0到1.0的置信度分数,这个分数通过归一化香农熵计算得到。如果模型完全无法确定,所有选项的概率都是1/K,此时熵等于log(K),置信度为0.00;如果模型完全确定,某个选项的概率为1.0,此时熵为0,置信度为1.00。
真实数据集流水线
很多团队会用大语言模型生成合成的训练问题和标签来构建这类模型,但这其实是错误的,因为用合成标签训练的校准模型,只会针对大语言模型自身的错误和幻觉进行校准。Laya的训练流水线使用100%由人类标注的真实公开数据集,覆盖多个领域: - 客服分流与意图:真实的客服对话、银行业务意图和工单路由队列 - 推断与事实核查:前提假设验证、事实验证和矛盾检查 - 内容安全:针对有毒言论、骚扰和严重辱骂的人类共识标签 - 安全与护栏:真实的越狱提示词和提示词注入攻击 - 量表与质量:对帮助性、复杂度和正确性进行多维度人工量表评分 - 多轮轨迹:具有已验证最终结果的SaaS销售与客服互动
为了防止模型走捷径,数据流水线会动态打乱选项顺序、改写问题表述、在原始文本和嵌套JSON状态之间交替切换,并注入随机干扰问题。
基准测试对比结果
团队在微调后的检查点上进行了广泛评估,总共测试了25424个问题,其中23024个是任务内问题,还有2400个是训练期间从未见过的任务家族的零样本问题,并且将结果和同类模型发布时的公开数据进行了直接对比。
整体性能对比
| 指标/维度 | 同类闭源模型 | Laya(微调检查点) | 性能优势 |
|---|---|---|---|
| P50延迟(单问题) | 平均约400ms(70-500ms,最佳150ms) | 38.4ms(p95:42.1ms) | 平均快约10.4倍,对比最佳情况快4倍 |
| 批处理延迟(10个问题) | 串行约1500ms / 约400ms | 156.0ms(p95:158.4ms) | 处理10个问题的时间仅相当于同类模型处理1个问题 |
| 批处理延迟(50个问题) | 数秒 / 受速率限制 | 721.4ms | 支持高吞吐并行小批处理 |
| 基准准确率 | 67.8%(覆盖4个生产工作流) | 任务内宏平均准确率83.8% | 总体准确率高16个百分点 |
| 意图识别与客户路由 | 约95%-98%一致率 | 准确率99.1%(ECE:0.009) | 路由任务校准误差近乎为零 |
| 审核与内容安全 | 约92%-95%一致率 | 准确率96.7%(ECE:0.061) | 安全边界区分清晰 |
| 推断与事实验证 | 未单独报告 | 准确率88.3%(ECE:0.054) | 完整双向注意力能够捕捉矛盾 |
| 部署成本 | 每百万输入Token收费0.042美元 | 自托管零成本 | 可运行于普通GPU、Mac MPS或CPU |
| 开源程度 | 闭源专有API | 100%开源Apache2.0 | 完整的数据主权与透明度 |
任务内详细表现
| 任务家族 | 问题数量 | 准确率 | 校准误差ECE |
|---|---|---|---|
| 意图识别与路由 | 1475 | 99.1% | 0.009 |
| 审核与安全 | 2708 | 96.7% | 0.061 |
| 主题分类 | 749 | 93.9% | 0.029 |
| 情绪与语气分析 | 1825 | 90.6% | 0.018 |
| 推断与事实验证 | 3022 | 88.3% | 0.054 |
| 指令遵循任务 | 600 | 87.8% | 0.046 |
| 邮件分流与钓鱼检测 | 2691 | 73.2% | 0.017 |
| 任务内总体宏平均 | 23024 | 83.8% | 0.060 |
零样本泛化能力
针对2400个训练期间未接触过的任务,Laya的零样本表现如下:
| 零样本任务家族 | 问题数量 | 准确率 |
|---|---|---|
| 指令遵循任务 | 600 | 86.3% |
| 内容安全审核 | 600 | 79.7% |
| 情绪与语气分析 | 600 | 58.3% |
| 零样本总体宏平均 | 2400 | 65.1% |
自动化门控实际应用
由于Laya的置信度分数是通过归一化熵校准的,开发者可以直接在代码中使用这些分数来控制是否自动执行操作: - 接受全部预测结果:整体准确率83.8% - 仅保留置信度前80%的预测:准确率提升至89.4% - 仅保留置信度前50%的预测:准确率达到92.2%
这意味着,如果将自动路由的阈值设为置信度≥0.85,Laya可以用92%以上的精确率自动处理大约一半的客服工单、安全告警或者邮件分流任务,将真正棘手的情况升级给人工处理。
Python快速使用示例
可以通过PyPI快速安装Laya工具:
pip install laya
如果需要从官方仓库下载模型,可以使用:
modelscope download --model convaiinnovations/laya --local_dir convaiinnovations/laya
快速开始的完整示例代码:
import laya
# 加载微调后的模型
agent = laya.load("convaiinnovations/laya")
定义输入的邮件数据
state = {
“from”: “user@company.com”,
“subject”: “Charged twice on March invoice”,
“body”: “Hi, we were billed twice for invoice 4411. Please refund the duplicate today or we will cancel our plan.”
}
定义需要分析的问题
questions = {
“department”: {
“type”: “choice”,
“instructions”: “Which department should handle this email?”,
“criteria”: {
“billing”: “invoices, payments, refunds”,
“technical”: “bugs, outages, system errors”,
“sales”: “pricing, new contracts”,
“other”: “everything else”
}
},
“urgency”: {
“type”: “score”,
“instructions”: “How urgent is this request?”,
“criteria”: [“not urgent”, “soon”, “critical deadline or blocking issue”]
},
“churn_risk”: {
“type”: “noul”,
“instructions”: “Does the user threaten to cancel or leave?”
},
“is_phishing”: {
“type”: “noul”,
“instructions”: “Is this email a phishing or scam attempt?”
}
}
一次性完成所有问题分析,GPU上仅需约35毫秒
result = agent.predict(state, questions)
answers = result[“answers”]
输出分析结果
print(“Department :”, answers[“department”][“choice”])
-> billing (confidence: 0.94)
print(“Urgency :”, answers[“urgency”][“score”])
-> 1.84 / 2.0
print(“Churn Risk :”, answers[“churn_risk”][“noul”])
-> 0.892 (89.2% probability)
print(“Phishing :”, answers[“is_phishing”][“noul”])
-> 0.008 (0.8% probability)
自动化门控逻辑示例:
dept = answers["department"]["choice"]
conf = answers["department"]["confidence"]
if conf >= 0.85:
route_automatically(dept)
else:
send_to_human_triage(dept, reason=f"Low confidence ({conf:.2f})")

