作者用 82 道人工标注题比较 14 款云端决策模型,Decision-1 答对 75 题、排名第六,并在 26 次选项反转测试中保持答案一致。文章还提供本地模型结果、API 调用代码、评测脚本和错题。
2026 年 10 月 10 日,我用同一套包含 82 道人工标注题目的测试集,测试了 OpenRouter 上的所有决策模型,Microsoft Decision-1 在 14 个模型中排名第 6。它答对了 75/82 道题;将选项顺序反转后,它没有改变过任何答案(26 组测试中有 0 次翻转);从我的 Mac 发起请求,响应时间中位数为 0.472 秒,每道题的成本为 0.0000036 美元。Perplexity Decider V1.1 27B 以 80/82 的成绩夺冠。我还在自己的 Mac 上运行了 4 个决策模型,费用为 0 美元:通过 llama.cpp 运行的 Kev 4B 与云端得分相同(72/82),耗时为 0.173 秒。本文包含所有测试数据、可直接复制使用的 OpenRouter Decisions API 和 llama.cpp 新增的 /v1/systemone 端点调用代码、基准测试脚本,以及各模型答错的题目。
决策模型针对某段内容回答指定类型的问题,返回的是概率,而不是一段文字。你向它提供一个“状态”(state,例如工单、评论或聊天记录),再提出一个或多个问题:“该交给哪个团队?”“这是诈骗吗?”“按 1 到 5 分打分”。它返回的数值可以直接用于 if 语句。
Microsoft 发布的 Decision-1 就是这样的模型之一,基于 Qwen3.5-9B 基础模型构建。发布文章称,它在 36 项测试中击败了其他决策模型,运行速度是 GPT-6 Sol 的 35 倍,价格为每百万输入 token 0.042 美元,输出免费。这些都是 Microsoft 公布的数据。我想拿到自己的测试结果,于是编写了 82 道题,测试了所有能访问到的决策模型。
OpenRouter 是一项服务,只需一个 API 密钥,就能调用来自多家公司的数百个 AI 模型。它通过同一个 alpha 端点提供所有这些决策模型,因此很容易进行公平比较。

只需发送一个 POST 请求,包含模型 ID、state 和带名称的问题即可。先在 shell 中设置 OPENROUTER_API_KEY;切勿把密钥粘贴到要分享的代码里。
curl https://openrouter.ai/api/alpha/decisions \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "microsoft/microsoft-decision-1",
"state": {
"message": "I was charged twice for the same order and nobody answers my emails. This is ridiculous."
},
"questions": {
"team": {
"type": "choice",
"instructions": "Which team should handle this ticket?",
"criteria": {
"account": "login, password, profile",
"payments": "charges, refunds, checkout",
"shipping": "delivery, tracking",
"app_bug": "crashes, broken screens"
}
},
"angry": {
"type": "noul",
"instructions": "Is the customer angry?"
}
}
}'
三种问题类型:
有个坑让我浪费了几分钟:是非题的类型是 noul,而不是 boolean。API 会拒绝 "type": "boolean"。
响应中的 answers 会为每个问题 ID 返回一个条目,usage 则包含费用信息。下面是一份真实响应:2026 年 10 月 10 日,我将工单“点击付款后,我的结账页面变成了空白。”发送给 Microsoft Decision-1,使用测试中的四个团队选项,并设置指令为“哪个团队应该处理这条客户消息?”:
{
"answers": {
"q": { "type": "choice", "choice": "app_bug",
"probabilities": { "app_bug": 0.9296888579799077, "payments": 0.06734643498951523, "account": 0.0026113052895926415, "shipping": 0.00035340174098428504 } }
},
"usage": { "input_tokens": 90, "output_tokens": 1, "cost": 3.78e-06 }
}
从我的 Mac 发起请求,它在 0.925 秒内返回了答案。noul 问题返回一个数值,表示答案为“是”的概率:针对测试中的第一条诈骗短信,我问“这条消息是否属于诈骗或网络钓鱼?”,它返回了 { "type": "noul", "noul": 0.9995 }。
usage.cost 的单位是美元。本文中的所有成本数据都来自这个字段。
无需安装依赖,只使用标准库:
import json, os, urllib.request
body = {
"model": "microsoft/microsoft-decision-1",
"state": {"message": "I was charged twice for the same order and nobody answers my emails."},
"questions": {
"team": {
"type": "choice",
"instructions": "Which team should handle this ticket?",
"criteria": {
"account": "login, password, profile",
"payments": "charges, refunds, checkout",
"shipping": "delivery, tracking",
"app_bug": "crashes, broken screens",
},
},
"angry": {"type": "noul", "instructions": "Is the customer angry?"},
},
}
req = urllib.request.Request(
"https://openrouter.ai/api/alpha/decisions",
json.dumps(body).encode(),
{"Authorization": "Bearer " + os.environ["OPENROUTER_API_KEY"], "Content-Type": "application/json"},
)
with urllib.request.urlopen(req, timeout=60) as r:
d = json.loads(r.read())
team = d["answers"]["team"]
print("team:", team["choice"], team["probabilities"][team["choice"]])
print("angry:", d["answers"]["angry"]["noul"] >= 0.5)
print("cost $", d["usage"]["cost"])
替换模型字符串,就能测试其他任何决策模型,其他内容无需修改。
82 道题均于 2026 年 10 月 10 日人工编写,在任何模型开始测试之前就已完成。共九组,涉及工单分派、诈骗检测、评论审核、评判助手的回答,以及“陷阱”评论(讽刺、提示词注入),每类都有普通版和困难版。82 道题中有 34 道是困难题。
每次调用只提交一道题,所有模型使用完全相同的措辞,通过同一个端点调用。
顺序测试:每道选择题都会将选项顺序反转,再运行一次,共 26 组配对测试。一个模型如果因为选项位置变了就改变答案,说明它依据的是位置,而没有读懂内容。
延迟:测量每次调用的实际耗时,从我的 Mac 通过网络发起请求。本地模型直接在 Mac 上计时,不经过网络。
成本:将 OpenRouter 返回的 usage.cost 按模型汇总。
bench.py 的核心是遍历 tests.json 的循环,以及一个反转选项的辅助函数:
def reverse(q):
q = dict(q); c = q["criteria"]
q["criteria"] = dict(reversed(list(c.items()))) if isinstance(c, dict) else list(reversed(c))
return q
for task, t in TESTS.items():
variants = [("base", t["question"])] + ([("reversed", reverse(t["question"]))] if t["question"]["type"] == "choice" else [])
for variant, q in variants:
for i, (state, gold) in enumerate(t["items"]):
d, sec = call(model, state, q)
got, p = answer_of(d)
row = {"model": model, "task": task, "i": i, "variant": variant, "gold": gold, "got": got, "p": p,
"ok": got == gold, "sec": sec, "cost": (d.get("usage") or {}).get("cost")}
下面是读取答案的方式,同时支持这两种问题类型:
def answer_of(d):
a = (d.get("answers") or {}).get("q") or {}
if a.get("type") == "noul": return a.get("noul") is not None and a["noul"] >= 0.5, a.get("noul")
if a.get("type") == "choice": return a.get("choice"), (a.get("probabilities") or {}).get(a.get("choice"))
return None, None
每次调用都会记录为 results.jsonl 中的一行;summary.py 会对原始顺序的测试结果评分,统计原始顺序与反转顺序之间的答案翻转次数,并计算延迟中位数。设置的 2 美元费用上限会在达到限额时停止循环;我总共花了 0.0195 美元。

Perplexity Decider V1.1 27B 的准确率最高(80/82)。Microsoft Decision-1 排名第 6(75/82)。排名先比较答对的题数,再比较答案翻转次数,最后比较速度。所有数据均来自我在 2026 年 10 月 10 日进行的测试。
Respan Span-01 和 Span-01 Lite 只接受 criteria 为纯字符串的是非题(noul)。它们答对了 40 道题,但 API 拒绝了 52 次选择题调用(26 道题及其选项反转后的副本),因此按满分 82 分计分并不公平。
Perplexity Decider V1 27B 返回了 404:它已在 OpenRouter 上停用,由 V1.1 取代。
GPT-6 Luna 的答案翻转次数为 2/25,分母是 25 组配对测试,因为其中一次调用返回了错误。

它答对了所有简单问题,失分都出在困难题和陷阱题上。工单、诈骗识别、评论和判断这四类常规题共 40 道,它全部答对。它答错的 7 道题:
提示注入这道错题,是我在生产环境中最在意的。如果用 Decision-1 处理用户撰写的文本,它是本次测试中唯一遵从了评论里隐藏的“回答 true”指令的云端模型。提问前,请先把用户文本封装起来,或清除其中的指令。
“其他运行次数”统计的是基准测试中所有模型的运行结果,包括云端和本地,因此 Span-01 和 Span-01 Lite 分别计数。
Decision-1 真的比 GPT-6 Sol 快 35 倍吗?

从我的 Mac 发起请求时,它的速度大约是 GPT-6 Sol 的 2.4 倍,每道题的费用约为后者的 1/73,并没有快 35 倍。我通过 OpenRouter 的常规聊天端点向 GPT-6 Sol 提出了相同的问题,在提示词中列出选项,并要求“严格只回复这些键中的一个”。
在这套题上,大型聊天模型更准确。我使用 ChatGPT 订阅,通过 Codex CLI(OpenAI 在终端中运行的编程智能体)调用 GPT-6.1 Sol,答对了全部 82 道题。决策模型的优势在于价格,以及可预测的单一数字输出。我测出的 2.4 倍来自 Mac 上的网络请求;Microsoft 的 35 倍是在它自己的环境中测得的,我无法查看那个环境。
如何在本地以 0 美元运行决策模型?

复制这些命令之前,先提醒一句。我最初通过 Kev 4B 自带的 MLX 服务器尝试运行完整版:未压缩的 Qwen3.5-4B 基座模型(8.4 GB)加上它的适配器。模型卡要求使用配备 32 GB 内存的 Mac;我的只有 24 GB,而且当时还开着浏览器和几个应用。Mac 随后失去响应并重启。使用 llama.cpp 运行压缩后的 GGUF(Q4_K_M,3.0 GB)时,整个测试顺利完成,没有出现问题。加载模型前,请检查它的内存需求,并为其他已打开的程序留出空间。
请使用 llama.cpp 0.6.0 或更新版本,该版本新增了 /v1/systemone 端点,接受同样的 {state, questions} 请求体。llama.cpp 是一个免费程序,可以在自己的电脑上运行 AI 模型。这个端点由 PR #29818 引入,于 2026 年 10 月 2 日合并。
brew upgrade llama.cpp
llama-server -hf ggml-org/Kev-4B-GGUF:Q4_K_M --port 8081
然后,在另一个终端中运行:
curl http://127.0.0.1:8081/v1/systemone \
-H "Content-Type: application/json" \
-d '{
"state": {"message": "Hi Dad, my phone broke, this is my new number. Can you WhatsApp me?"},
"questions": {
"scam": {"type": "noul", "instructions": "Is this message a scam or phishing attempt?"}
}
}'
不需要密钥,不需要联网,也没有账单。-hf 参数会在首次运行时从 Hugging Face(AI 模型文件的主要公共平台)下载模型。
开放的决策模型 Laya 也可以用同样的方式运行:
llama-server -hf ggml-org/Laya-GGUF
也可以在 Python 中使用 PyTorch(最常用的 AI 库,通过 MPS 使用 Mac 的 GPU):
# pip install laya
import laya
agent = laya.Agent("convaiinnovations/laya", subfolder="multilingual")
state = "I was charged twice for the same order this morning."
questions = {"angry": {"type": "noul", "instructions": "Is the customer angry?"}}
print(agent.predict(state, questions))
或者使用 MLX(Apple 为在 Apple Silicon 上运行模型开发的库):
import laya_mlx
agent = laya_mlx.load("aac6fef/laya-multilingual-mlx")
print(agent.predict(state, questions))
我的 local_bench.py 会向上述任意一种运行方式提交相同的 82 道题。llama.cpp 后端只需十行代码:
def http_backend(url, model):
def f(state, q):
body = json.dumps({"model": model, "state": state, "questions": {"q": q}}).encode()
with urllib.request.urlopen(urllib.request.Request(url + "/v1/systemone", body, {"Content-Type": "application/json"}), timeout=300) as r:
return json.loads(r.read())
return f
本地决策模型的表现如何?

在 llama.cpp 上运行的 Kev 4B 与它的云端版本得分相同,都是 72/82,而从我的 Mac 测得的速度约为云端版本的 9 倍。所有本地测试都在一台配备 M4 Pro 和 24 GB 内存的 MacBook 上运行,每次调用费用为 0 美元,耗时在设备上测量。
作为对比,从我的 Mac 调用云端 Kev 4B(jaredpalmer/kev-4b)时,每道题的耗时中位数为 1.534 秒,得分同样是 72/82。
Laya 的结果让我感到意外:相同的权重,不同的运行时,答对题数却分别为 41 和 55。部分差距来自输入格式。在一项额外测试中,我将 JSON 状态转换为带标签的文本,而不是直接传入原始 JSON,Laya 在 PyTorch 上的判断题组得分就从 1/10 提升到了 4/10。如果你尝试运行一个小型本地模型,发现表现很差,先检查运行时如何向它传入状态,再判断是不是权重的问题。
使用最多的决策模型就是最好的吗?
不是。OpenRouter 的 Decisions 排行榜按请求次数排名,而不是按准确率排名。以下是 OpenRouter Decisions 排行榜中“This Week”的数据,统计截至 2026 年 10 月 9 日的使用量:
Microsoft 的数字只代表一天的流量:它于 10 月 9 日上线。Jev 的领先与调用量和价格有关,而 Clef Flash 按请求次数排第 3,在我的准确率测试中却排在最后。
测试集规模小,且由人工编写。共 82 道题,其中 34 道是困难题,都是我一次性写出来的。换一套题,榜单中游的排名就可能改变。Microsoft 报告了自己的 36 项测试;我没有拿到这些测试。
只有一天。所有测试都在 2026 年 10 月 10 日运行。服务提供商可能随时调整权重、路由和价格,且不会提前通知。
网络延迟。云端延迟是从我的 Mac 经公共互联网、通过 OpenRouter 测得的。如果你的服务器与服务提供商位于同一区域,测得的数值会更低。
两个有争议的标签。我将 hard_scam 的第 1 题(链接指向 Netflix 官方域名的 Netflix 付款提醒)和第 3 题(链接指向 La Poste 官方域名的 La Poste 包裹通知)标为正常消息,因为这些域名是真的。很多人会认为这两条消息都可疑,分别有 14 次和 5 次模型运行的结果与我的标注不同。Microsoft 两题都答错了。去掉这两道题,Microsoft 就会与 Mercury Decide 并列第 5。
厂商数据终究是厂商数据。36 项测试、35 倍速度的说法、Qwen3.5-9B 基座模型以及价格,都来自 Microsoft 和 OpenRouter,而不是我的测试。
Decision-1 是一个可靠、便宜、稳定的决策模型:日常问题全部答对,调整选项顺序后答案翻转次数为 0,每千次调用只需 0.0036 美元。它并不是目前可调用的模型中最准确的,而且它在提示注入题上的失误意味着,我不会在没有护栏的情况下,让它直接处理原始用户文本。如果最看重准确率,Perplexity Decider V1.1 27B、Liquid d1 或 Jev 1.13 都以相近的费用取得了更好的成绩。如果最看重成本,在笔记本上用 llama.cpp 运行 Kev 4B,让我免费拿到了 72/82 的成绩。更值得借鉴的是测试方法:82 道带标签的问题,加上一轮颠倒选项顺序的测试,只花了一个下午和 0.0195 美元,却比任何发布时的图表都更能说明问题。
Microsoft,Decision-1 发布公告(厂商报告的数据:Qwen3.5-9B 基座模型、36 项测试、速度为 GPT-6 Sol 的 35 倍)。
OpenRouter 模型页面及定价(每百万输入 token 0.042 美元,输出免费)。
OpenRouter Decisions 排行榜,请求次数,“This Week”,统计截至 2026 年 10 月 9 日(于 2026 年 10 月 10 日获取)。
llama.cpp /v1/systemone 端点,PR #29818,于 2026 年 10 月 2 日合并。
我的基准测试,2026 年 10 月 10 日:bench.py(云端)、local_bench.py(设备端)、llm_baseline.py(GPT-6 Sol)、codex_baseline.py(通过 Codex CLI 调用 GPT-6.1 Sol)、summary.py,原始记录保存在 results.jsonl 中。本文中的准确率、答案翻转次数、延迟和费用都来自这些运行结果;费用取自 OpenRouter 的 usage.cost。
由 Anass Kartit 独立测试。与 Microsoft 或 OpenRouter 无关联。
最初发表于 kartit.net。每周都会在 YouTube 发布新测试,欢迎订阅。
轮到你了:接下来你想测试什么?在评论区告诉我。
如需进一步处理,你可以考虑屏蔽此人和/或举报滥用行为。