本节摘要:laya 与生成式 LLM 的分界,可以用心理学里的双过程理论一句话说清:laya 是 System 1(快直觉),生成式 LLM 是 System 2(慢推理)。本节把这个对应关系落到工程细节:自回归生成靠逐 token 循环工作,N 个 token 就是 N 次前向,延迟与文本长度成正比;laya 靠单次前向在选项上打分,输出的是概率分布而不是文本。分布输出带来三条工程红利——可校准(对着标签统计修正)、可弃权(分布平坦时转人工)、可批量(无循环依赖可并行)——它们是第 7 章置信门控的地基。概念出处为《Jev 决策编程》第 02 章《核心心智模型》,本节讲工程侧的推论,不重讲理论。
心理学把人的思维分成两个系统:System 1 快、自动、并行,负责直觉判断——看到模糊的脸就能觉得「不友善」;System 2 慢、串行、费力,负责深思——做一道乘法题。《Jev 决策编程》第 02 章《核心心智模型》把这套理论搬进了模型世界,对应关系在工程上惊人地工整:
| 心理学 | 模型世界 | 工作方式 | 典型任务 |
|---|---|---|---|
| System 1(快直觉) | laya 这类决策引擎 | 单次前向,输出分布 | 分类、路由、评分、筛选 |
| System 2(慢推理) | 生成式 LLM | 逐 token 自回归循环 | 写作、代码、多步推理 |
关键认知是:两者不是竞争关系,是分工关系。你不会用 System 2 去数一天十万条消息的违规率,就像你不会用做乘法的态度去判断对面来人是否友善——前者浪费算力,后者容易出错。第 0.1 节的谱系图是这个思想的工具版。
生成式 LLM 的本质是一个循环:每一步根据已有内容预测下一个 token,把它拼回输入,再预测下一个。
自回归解码循环(示意) 第 1 步: [提示词] ──▶ 预测 t_1 第 2 步: [提示词, t_1] ──▶ 预测 t_2 第 3 步: [提示词, t_1, t_2] ──▶ 预测 t_3 ... 第 N 步: [提示词, t_1, ..., t_N-1] ──▶ 预测 t_N(结束符) 总代价 ≈ N 次前向 × 逐步增长的上下文长度
三个工程后果:延迟与答案长度成正比(说五十句话就是几百次前向的量级);成本按 token 计费、与生成量线性相关;输出是自由文本,下游要再做解析与校验才能变成结构化决策。对生成任务这些代价天经地义——你要的就是那五十句话。但对判断任务是纯粹的浪费:你只需要一个类别标签,却为「把标签写出来」付了整段生成的钱和时间。
laya 反过来:把状态文本、问题、选项一起送进 encoder,编码一次,决策头直接读出所有选项的分数,softmax 归一成概率分布。没有解码循环,答案长度恒为零,延迟与「答案多长」无关,只与输入文本长度有关。
# system1_shape.py —— 两类输出的形状差异(laya 侧为写法示意,字段以官方文档为准) from laya import Router router = Router() result = router.predict( context="工单:打印机一直卡纸,重启两次无效,急。", questions=[{ "id": "route", "type": "choice", "question": "该转给哪个组?", "options": ["硬件运维", "网络运维", "账务支持"], }], ) # System 1 的输出:选项上的概率分布(数值为示意值) # {"硬件运维": 0.62, "网络运维": 0.21, "账务支持": 0.17} # 对照——生成式 LLM 对同一问题的输出是一段文本: # 「我认为应该转给硬件运维团队,因为卡纸通常属于硬件故障……」 # 拿到这段话之后,你还需要一次解析才能得到「硬件运维」,还要兜底解析失败。
同一个问题,laya 给你的是可以直接 max() 的字典;生成式 LLM 给你的是还要再处理一遍的自然语言。这不是实现细节的差异,是输出类型的差异。
红利一:可校准。 概率分布可以直接对着历史标签做统计修正——温度拟合就是最常用的一种:调一个标量让「模型说 0.7 的时候,现实中真的约有七成发生」。文本没有对应的操作,「我认为大概是硬件问题」没法拟合。这是第 7 章的主菜,方法学展开见《Evals 实战:LLM 评测工程》第 07 章《概率系统评测》。
红利二:可弃权。 分布有形状:一个尖锐的分布(0.95 对 0.03 对 0.02)说明模型很笃定;一个平坦的分布(0.4 对 0.35 对 0.25)说明它在猜。给置信设一条最低线(min_confidence),低于线的样本不硬答、转人工或升级给 System 2。生成式 LLM 的文本流没有天然的「我在猜」信号,要靠额外机制补。
红利三:可批量。 单次前向、无循环依赖,意味着一千条样本可以打包并行,吞吐随批量大近平线性抬升(实测倍数取决于硬件,本书不标具体数字)。自回归生成也能批量化,但每条的循环长度不同,调度复杂得多。
三条红利的共同根源只有一个:输出是分布。记住这句话,第 7 章的每个操作你都会觉得顺理成章。
| 红利 | 机制根源 | 在哪一章兑现 |
|---|---|---|
| 可校准 | 概率对着标签可统计(温度拟合) | 第 7 章;方法学见《Evals 实战》第 07 章 |
| 可弃权 | 分布形状暴露不确定性(平坦即存疑) | 第 7 章 min_confidence 门控 |
| 可批量 | 样本间无循环依赖,可并成一个大批 | 第 3.2 节 predict_batch |
两种系统最有生产价值的组合方式,不是二选一,而是前后排布:
分流器模式(结构示意) 全量请求 │ ▼ ┌──────────────┐ 高置信·简单 ┌──────────────┐ │ laya(门卫) │ ──────────────▶ │ 直接处理 │ │ 判断:难不难? │ │ (规则或缓存) │ └──────┬───────┘ └──────────────┘ │ 低置信·复杂 ▼ ┌──────────────┐ │ System 2 │ │ 深思后作答 │ └──────────────┘
这个模式的经济学很清晰:绝大多数日常请求是简单的(量级判断,多数业务里简单请求占大头),laya 用几十毫秒与近乎零边际成本把它们消化掉;只有少数被判定为「难」的请求才升级给昂贵的 System 2。整体延迟与成本同时下降,而 System 2 的算力集中在真正需要它的地方。laya 在门卫位上问的问题本身就是 typed 的——「这条需要人工吗」(noul)、「这条属于哪个处理级别」(choice)——三原语在分流器模式里全部用得上。
把同一封邮件分类任务交给三种引擎,体感差异大致是:
| 维度 | laya | Jev 云端 API | 生成式 LLM |
|---|---|---|---|
| 返回形态 | 选项概率分布 | 选项概率分布 | 一段文本,需解析 |
| 单次延迟 | 32.8 毫秒(官方 README 口径) | 236~276 毫秒(官方 README 口径) | 几百毫秒到秒级(量级) |
| 输出长度 | 恒为零 | 恒为零 | 与提示词和答案都相关 |
| 失败模式 | 分布平坦(可量化) | 分布平坦(可量化) | 解析失败、幻觉、跑题 |
最后两行是工程上最值钱的信息:打分制引擎的失败模式是可量化的分布形状,生成式的失败模式是不可枚举的文本事故——前者能设门控自动兜底,后者只能靠输出校验与重试兜住。
laya 的边界在第 0.1 节列过,这里从工作方式的角度再说一遍,因为这次你能看懂「为什么」:
心智模型立稳了一半:输出是分布、分布有形状、形状可以变成工程动作。下一节把这个「分布」拆开看——choice、score、noul 三种原语在 laya 的返回结果里各自长什么样、什么时候用哪个。