决策模型不会写代码、不会聊天,也不做长篇推理,它只在单次前向传播里给出是/否、选项或分数。2026-10-01 Strands Agents 团队开源了 Strands Decider 2B,2026-10-07 Liquid AI 又开源了面向边缘的 d1-3B 与实验性 d1-omni-600M。对 Agent 来说,这意味着工具调用、路由和护栏前,终于有一层可以低延迟表态的专用模型,而不必每次都让大模型吐一整段 token。
本文事实以 Liquid open-d1 发布博文(2026-10-07)、d1-3B 模型卡,以及 Strands Introducing Strands Decider 2B(2026-10-01)与 PyPI strands-decider 0.1.0 为准。文中延迟与基准数字均为厂商自报,两家评测口径不同,不做排名。
决策模型能做什么,不能做什么
决策模型(也常被称作 system one 模型)吃进一段 state(文本、结构化内容,有时还有图或音频),再吃进一组有界问题,然后在一次前向传播里返回答案。问题类型有三种,下面用的是 API 里的原名:
noul:是/否题,返回 P(yes);可用 criteria 分别说明 true / false 两侧。这个名字没有写错,Liquid 模型卡(沿用 Decision Index 的问题 schema)、Strands 博文的Decider.noul(...)和 strands-decider CLI 的--noul都这么叫choice:从命名选项里选一个score:在有序等级上打分(模型卡写 2 到 10 级)
代价也很清楚。它不能生成任意文本,所以不适合做聊天、写文档、写代码或摘要。单次并行出答案的方式,也让它在复杂多步推理上明显弱于 reasoning 模型。Strands 博文写得很直白:换来的是更快、在同等规模下更擅长做选择,答案一定落在给定选项里,并且每个判断都带一个可靠度分数。
放进 Agent 流水线,它适合做的都是表态类的活:模型路由、工具选择、参数是否 grounded、要不要先问人、护栏与策略分类、廉价评测与重排。站内此前写过 Spring AI Modular RAG 接 TypeSafe Jev 做过滤重排;决策模型做的是同一类有界判断,这次被明确做成可本地跑、可挂在工具调用前后的一层。
Liquid open d1:边缘侧的多模态快判
Liquid 于 2026-10-07 放出两个开源权重模型:
- d1-3B(模型卡写总参数 3.12B):基于 LFM2.5-VL-3B,文本 + 图像。官方称在 Decision Index 0.2.1 上得 48.57,是 10B 以下最好的决策模型,领先榜上所有 4B、9B 模型以及 Decider 35B-A3B(47.11)。模型卡注明这个分数是用官方评分器自测,不是排行榜提交。
- d1-omni-600M(实验性):基于双向编码器 LFM2.5-Encoder-350M,外加视觉与音频编码器,支持文本+图像,或文本+音频。官方说明仍处早期研究版本,本次不公布它的速度数据。
d1 不产出 token,单次前向传播就给出答案。博文给出七个公开数据集的均值:d1-3B 为 82.9,d1-omni-600M 为 78.4(厂商自报)。模型卡里另有一张加了 HelpSteer2 的八项表,d1-3B 均值是 77.1,引用时要说清用的是哪张。凑巧的是,博文七项表里 Decider 2B 的均值也是 77.1,两个 77.1 不是同一个模型。延迟(厂商自报,warm call,单问):NVIDIA Jetson AGX Thor 约 16 ms,RTX 4090 约 8 ms。4090 这一行开了 model.compile(mode="reduce-overhead"),不开约 16 ms。加载要求:transformers>=5.14,且必须 trust_remote_code=True。
API 形态是 model.system_one(state, questions, images=None),type 字段取 noul、choice 或 score。下面的文本示例摘自模型卡:
import torch
from transformers import AutoModel
device = "cuda" if torch.cuda.is_available() else "mps" if torch.backends.mps.is_available() else "cpu"
dtype = torch.float32 if device == "cpu" else torch.bfloat16
model = AutoModel.from_pretrained(
"LiquidAI/d1-3B",
trust_remote_code=True,
dtype=dtype,
).to(device)
questions = {
"refund": {
"type": "noul",
"instructions": "Is the customer asking for a refund?",
},
"team": {
"type": "choice",
"instructions": "Which team should handle this?",
"criteria": {
"billing": "Charges, refunds, invoices",
"technical": "App or site faults",
"fraud": "Suspected unauthorised use",
},
},
"urgency": {
"type": "score",
"instructions": "How urgent is this?",
"criteria": ["Can wait", "Today", "Blocking the customer now"],
},
}
print(model.system_one(
"I was charged twice this month, please refund one of them.",
questions,
))
同一 state 上问多个问题只读一遍上下文;批量可用 system_one_batch。图像可当作整个 state(state=None + images=[...])。每次调用返回 answers 与 usage,其中 output_tokens 为 0。部署前请按模型卡的依赖版本复现。
还有一处容易误读:Liquid 对比表里的「Decider 2B」在 Decision Index 表中标为 2.3B,Strands 自报 Decider 2B 为 1.9B,Strands 的 PyPI 文档也提到另有一个同躯干、不同配方的 decider-2b。两者看起来不是同一个模型,不要拿这张表推断 d1 胜过 Strands Decider 2B。
许可证:HF 显示 other,正文是 LFM Open License v1.0
Hugging Face 模型卡上 license 元数据为 other(license_name 为 lfm1.0)。仓库内 LICENSE 文件标题为 LFM Open License v1.0(LiquidAI/d1-3B 与 LiquidAI/d1-omni-600M 均如此),条款与 liquid.ai/lfm-license 一致。需要写进选型清单的要点:
- 文本基于 Apache 2.0,但商业使用有收入门槛:许可把 Threshold 定义为年收入 1000 万美元($10,000,000)或以上,超过门槛的法人实体做商业使用不在免费许可覆盖范围内,需联系 Liquid AI(sales@liquid.ai)购买商业许可。
- 这里的「法人实体」按控制关系合并计算,持股 50% 及以上或受共同控制的关联公司算在一起。
- 合格非营利组织在非商业或研究用途下不适用该门槛。
- 无 copyleft:微调与衍生模型可以不开源。
- 再分发需附许可副本并保留归属通知;违反条款时许可自动终止。
开源权重不等于无条件可商用。年收入已过门槛的团队,应在 PoC 阶段就核对许可路径,别等到上线才发现卡在 Section 5。
Strands Decider 2B:为 Agent 干预钩子准备的开源配方
Strands 于 2026-10-01 发布 Strands Decider 2B。架构描述(官方):取 Qwen3.5-2B 躯干,去掉 LM head,换成约百万参数的 pointer head,躯干用 rank-16 LoRA 适配;一次前向、无生成循环。PyPI 文档写明躯干为 Qwen3.5-2B-Base,总参数 1.9B,并以 v19 为参考快照(Hugging Face:StrandsAgents/strands-decider-2B-hobson-v19)。
许可与开放范围更接近传统开源栈:Apache-2.0,官方强调权重、训练数据与训练脚本一并开放。安装入口:
pip install strands-decider
PyPI 当前版本为 0.1.0(UTC 2026-10-01 上传),包许可证标注 Apache-2.0,依赖 transformers>=5.15,<6。
延迟(厂商自报):RTX 3090(PyPI 注明在 WSL2 下)每题中位约 115 ms;M3(博文写 M3 MacBook,PyPI 写 M3 Pro)小任务中位约 153 ms。评测主线是 JevBench 公开集上的准确率与校准(Brier),PyPI 给出 v19 准确率 0.723(231 题对 167 题)。这与 Liquid 的 Decision Index、七数据集表口径不同,不宜并排比高低。
对 Agent 更有操作感的是 InterventionHandler.before_tool_call。官方示例里,Agent 被故意设定得很积极,用户只问天气却没说城市时,它会猜一个城市再调工具。在真正执行前,Decider 先回答两个 noul 问题:参数是否 grounded,现在调用是否过早。几行 Python 再把结果映射成 Proceed / Deny / Confirm / Guide。问题定义摘自官方博文:
QUESTIONS = {
"args_grounded": Decider.noul(
"Are the tool's argument values grounded in facts the user actually provided?",
{
"true": "every argument value traces back to something the user said",
"false": "an argument value was guessed or invented, not stated by the user",
},
),
"premature": Decider.noul(
"Is it premature to call this tool now, before clarifying with the user?",
{
"true": "the assistant should ask a clarifying question before calling the tool",
"false": "there is nothing left to clarify; calling now is appropriate",
},
),
}
返回动作的语义(官方):Proceed 放行;Deny 拒绝;Confirm 停下来问人;Guide 把反馈交回模型回合,不直接硬挡。完整可运行接线在仓库 examples/strands/,问题、阈值与策略都是手写的,官方也标明「illustration rather than a recommendation」。官方想说明的是,这种判断足够便宜,可以放进以前不可能再塞一次 LLM 调用的路径里。
两家相隔一周开源,选型先看约束
| 维度 | Liquid d1(2026-10-07) | Strands Decider 2B(2026-10-01) |
|---|---|---|
| 代表模型 | d1-3B;实验性 d1-omni-600M | strands-decider-2B(v19,1.9B) |
| 模态 | 3B:文+图;omni:文+图或文+音频 | 文本 |
| 延迟口径(厂商自报) | Thor 16 ms / 4090 8 ms(compile 后) | 3090 ~115 ms / M3 ~153 ms |
| 质量口径(厂商自报) | Decision Index 0.2.1:48.57;七数据集均值 82.9 | JevBench 准确率 0.723 与 Brier |
| 许可 | LFM Open License v1.0(HF 标 other;年收入 ≥$10M 的法人实体商业使用需另购) | Apache-2.0;权重+数据+脚本 |
| Agent 接入方式 | system_one 嵌入任意流水线 | InterventionHandler.before_tool_call |
两列数字放在一起容易误导:硬件不同、任务集不同、是否含图像也不同。Liquid 主打边缘多模态与极低延迟;Strands 主打可复现配方、Apache 许可,以及和 Strands Agent 干预系统的直接咬合。生产选型先看三件事:许可能否覆盖你的法人实体,是否需要视觉/音频 state,钩子要挂在工具前还是路由层。
可以先做的一件事
挑一条真实的工具调用路径(例如「缺槽位时是否允许猜参数」),用决策模型只回答两个 noul 问题,阈值写死、先不上自动调参。若团队年收入可能触碰 Liquid 的 $10M 门槛,优先在 Apache-2.0 的 Strands Decider 或已获商业授权的路径上做 PoC;若必须在 Jetson 等边缘设备上看图判题,再按官方依赖拉起 d1-3B,并把所有榜单数字继续标成厂商自报。
一起交流
分享你的思考,让讨论更进一步。