本节摘要:LLM 的输出是串行链条——第 N 个 token 依赖前 N−1 个,所以生成越久越贵;Jev 对一个请求里的 K 个问题同时求值,延迟主要由 state 大小决定,追加问题几乎不增加响应时间,只增加少量 token 费用。独立实测(Flavio Copes):13 个问题一次问完,比串行问 13 次便宜约 12.2 倍、快约 10 倍。这带来一个反直觉的工程结论与一个新姿势——结论:问题越多单价越低;姿势:投机性扇出(speculative fan-out),把一个场景里所有可能用到的判断一次性全问掉,哪怕一半答案暂时用不上。软件设计的惯性因此改变:从"能少调一次是一次"变成"反正都问了,答案留着总有用"。
阅读完本节,你应当能够:
| LLM 生成(串行) | Jev 求值(并行) | |
|---|---|---|
| 第 N 个输出依赖前 N−1 个吗 | 是 | 否(K 个问题同时算) |
| 延迟主要取决于 | 生成长度 | state 大小 |
| 多问一个问题 | ≈ 重新来一次完整调用 | 几乎不变慢,只加一点 token 费 |
推论:请求的"单位"不再是"一个问题",而是"一份 state + 一组问题"。同一份 state 上的判断,无论几道,都应合并进一个请求。
独立深度评测的对照实验:13 个问题一次问完 vs 串行问 13 次——便宜约 12.2 倍,快约 10 倍。
粗算直觉:一次调用的成本 ≈ state token × 单价(输出免费),延迟 ≈ state 处理时间。串行 13 次 = 付 13 次 state 的钱、等 13 次 state 的时间;扇出 = 付 1 次 state + 13 份很短的问题描述的钱、等 1 次的时间。
💡 state 才是大头:判断题的问题描述通常只有几十 token,而 state(文档、工单、上下文)动辄上千 token。合并请求省的是重复传输 state 的钱和时间。
把一个业务场景里所有可能用到的判断一次性声明:
questions = { # 路由要用 "topic": { "type": "choice", "instructions": "工单主题归类", "criteria": {"billing": "计费问题", "technical": "产品故障", "sales": "购买意向", "other": "以上皆非"} }, # 排序要用 "is_urgent": { "type": "noul", "instructions": "该消息表达了紧迫性" }, "is_angry": { "type": "noul", "instructions": "该消息包含强烈不满或威胁性表述" }, # 现在没用,但顺手问了 "is_sponsor": { "type": "noul", "instructions": "该消息是商业推广或赞助请求" }, "needs_refund": { "type": "noul", "instructions": "该消息明确提出退款要求" }, } answers = client.system_one(state=ticket, questions=questions) # 一次调用,五个答案同时回来;下游按需取用,不用的丢弃
"投机性"的含义:你赌其中一部分答案将来有用——赌注极低(每问几百 token 的千分之一美分级成本),赌赢一次(少发一次请求、少等一轮延迟)就回本。
三个组织纪律:
| 传统惯性(判断昂贵) | Jev 时代(判断廉价) |
|---|---|
| 能少调一次是一次,懒执行 | 反正都问了,答案留着总有用 |
| 一个大而全的"综合判断" | 多个原子判断并行 + 代码组合 |
| 判断结果即用即弃 | 全量落盘,喂养回归集与校准监控 |
第 1.2 节的 Jevons 悖论在这里落地:判断便宜到可以"浪费",而"浪费"出来的数据反过来让判断越来越可靠。
快和便宜讲完了。但概率凭什么可信——凭什么
p > 0.9敢直接写进生产代码?答案在训练范式里,下一节拆 RLCD。