Gemini Decision 1 与 Jev 对比:价格、延迟与 Python 接入
为多模态判断和同一输入上的独立检查试用 Gemini Decision 1,并以 Jev 作为文本路由的比较基线。对照官方直连价格与 Artificial Analysis 结果,计算共享输入成本,运行 Python 工具选择示例,并检查免费层限额、置信度阈值、错误处理和网关接口差异。
本文内容

需要根据多模态输入做路由,或对同一份输入执行多项独立检查时,可以先试 Gemini Decision 1。若主要处理文本路由,且最看重延迟和成本,先以 Jev 作为对照基线。需要生成代码、解释、提取未预先限定的值或构造工具参数时,仍应使用生成式模型。
Google 于 2026 年 11 月 11 日发布 Gemini Decision 1。截至 2026-11-13,Decisions API 已可通过 Gemini API 使用,Python 端需要 google-genai 3.2.0 或更高版本。这是专门用于决策的接口,不是编程聊天模型的替代品。
Gemini Decision 1 返回什么?
Gemini Decision 1 对预先定义的结果打分,而不是逐个 token 生成答案。一次请求可以提交共享输入,以及最多 1,000 个独立问题。上下文窗口为 262,144 tokens,通常记作 256K。输入和全部问题都必须计入这一上限。
Decisions API 指南介绍了三种题型:
| 类型 | 请求中定义什么 | 从答案中读取什么 |
|---|---|---|
noul | 是非题;可选判定标准用于说明两种结果各自的含义。 | 表示“是”的概率的 noul,以及 confidence。 |
choice | 2 到 255 个带名称和描述的选项。 | 选中的 choice、归一化后的 probabilities 和 confidence。 |
score | 有序评分标准,首个等级的索引为 0。 | 按概率加权的 score、各等级的 probabilities 和 confidence。 |
对编程智能体而言,这些题型可以分别回答:任务是否需要仓库上下文?下一步应该运行哪个工具?这项任务需要多深入的调查?
问题之间相互独立。同一请求中,一个问题不能使用另一个问题的答案。需要在应用代码中组合这些结果;如果后续判断依赖前一项结果,就另发请求。
noul 的置信度高,不一定代表“是”。 SDK 将 noul 定义为 0.01 到 0.99 之间的概率。其置信度为 max(noul, 1 - noul)。因此,noul = 0.03 表示高置信度的“否”,置信度为 0.97。
score 的值可以落在两个评分等级之间。其置信度是各等级概率中的最大值,并不表示这个连续的平均分恰好正确的概率。代码使用阈值做判断时,需要区分这两种含义。
熟悉 Jev 的读者,可以将这些基本题型对应到 Jev 决策模型应用场景指南中的模式。概念相似,并不意味着不同供应商的请求格式可以直接互换。
Gemini Decision 1 与 Jev:测量结果说明了什么?
如果自有测试中两者质量相当,纯文本路由更适合先用 Jev 建立基线。原生多模态输入能改变实现方式时,再单独测试 Gemini。
下表的官方直连价格来自 Google 价格页和 TypeSafe 价格说明。基准测试数值来自 Artificial Analysis 的 Gemini Decision 1 页面和 Jev 1.14 页面。这些数据均于 2026-11-13 核对。
| 指标 | Gemini Decision 1 | Jev 1.14 |
|---|---|---|
| 官方直连模型 ID | gemini-decision-1 | jev-1.14.0 |
| 官方直连输入价格,USD / 1M tokens | $0.10 | $0.042 |
| 官方直连输出 token 费用 | $0 | $0 |
| Artificial Analysis Decision Index | 66 | 66 |
| AA 每 1M 个基准测试任务的成本,USD | $345 | $156 |
| AA 单任务耗时,Time per Task | 211 ms | 92 ms |
AA 的结果显示,在四舍五入后的指数分数相同的情况下,Jev 的成本和用时更低。这并不证明,在你的工具选择问题上,两者准确率也相同。基准测试任务也不等于 HTTP 请求,不要直接用这些数值乘以自己的请求数。
Google 表示,Gemini Decision 1 在其发布时采用的自有基准测试套件中领先。Google 还称,在共同的基准测试上,通过 Interactions API 调用 Gemini 3.5 Flash-Lite 的成本接近 Gemini Decision 1 的 5x。这与 AA 指数不是同一组比较,不能据此认定它在所有场景都领先 Jev。
Artificial Analysis 在 11 月 12 日的发布分析中报告,Gemini 的 Brier score 为 0.18,Jev 为 0.19。这个指标衡量概率预测误差,越低越好。这点综合分数差异,不能直接给出适用于你的应用的安全置信度阈值。
Google 公布的延迟也有适用条件:模型计算时间的中位数为 50–100 ms,端到端延迟为 150–250 ms。这组数据覆盖最多 16K tokens 的上下文,问题数在 1 到 100 之间时,延迟近乎不变。不能将这个结论外推到 1,000 个问题,或用满 256K 上下文的请求。
多模态任务的差异更明确。Google 文档说明支持原生文本、图像、音频、视频和 PDF 输入。TypeSafe 模型文档列出文本和图像,但不支持原生音频或视频输入。TypeSafe 在 Jev 1.14 发布说明中还将图像功能标为实验性功能。
基于录音、视频或 PDF 做判断时,先试 Gemini。已有的文本路由器先以 Jev 为基线。如果另一种方案在带正确标签的测试中错误率更低、延迟可接受,而且整个工作流成本更低,就调整选择。
共享输入如何影响账单?
对同一份输入进行判断的相关问题,应放在一起发送。Google 对共享输入按每次请求计费一次。每个问题仍会新增其指令、判定标准和格式所占的 token。
按 2026-11-13 核对的官方直连付费单价计算:
request cost in USD =
(shared input tokens + all question tokens) × $0.10 / 1,000,000
下面做一个估算:共享输入为 10,000 tokens,共有 100 个问题。假设每个问题新增 80 tokens 的计费输入,其中已包括格式开销。
| 请求组织方式 | 预计计费输入 | 预计直连成本 |
|---|---|---|
| 将 100 个问题合并为一次请求 | 10,000 + 100 × 80 = 18,000 tokens | $0.0018 |
| 分成 100 次请求,每次重复发送输入 | 100 × (10,000 + 80) = 1,008,000 tokens | $0.1008 |
这里比较的是向 Gemini 发送请求的两种方式,并非声称共享输入评估是 Google 独有的能力。
估算未计入重试、后续模型调用和网关费用,也未使用任何折扣或免费额度。拿到真实用量后,用 result.usage.total_input_tokens 替换假设中的 token 数。
在一次交互式请求中合并多个问题,也不等于提交异步批处理任务。Google 价格页注明,Gemini Decision 1 不支持 Batch API。
用 Python 跑通工具选择示例
首次测试先直连 Gemini API。这样可以先验证请求与响应,不必同时处理网关的请求格式转换。
以下固定版本的 SDK 需要 Python 3.11 或更高版本。按 Google 的 API 密钥说明创建密钥,并检查支持的地区。
试用时先使用构造的测试输入。发送私有仓库内容前,阅读 Gemini API 服务条款。
安装 SDK 并载入密钥
在 Bash 中执行以下命令。输入密钥时不会回显,其实际值也不会作为命令文本写入历史记录。
python3 -m venv .venv
source .venv/bin/activate
python -m pip install "google-genai==3.2.0"
read -rs GEMINI_API_KEY && export GEMINI_API_KEY
示例会从环境变量读取密钥,并显式传给客户端。它使用 v1beta 和 client.decisions.create,而不是文本生成方法。对应的直连 REST 请求为 POST https://generativelanguage.googleapis.com/v1beta/decisions。
把响应转换为路由计划
将以下代码保存为 route_decision.py。它会提交三种题型的问题,校验响应类型,并输出机器可读的路由计划。
import json
import os
from google import genai
from google.genai.decisions import ChoiceAnswer, NoulAnswer, ScoreAnswer
api_key = os.environ.get("GEMINI_API_KEY")
if not api_key:
raise SystemExit("Set GEMINI_API_KEY before running this script.")
client = genai.Client(
api_key=api_key,
http_options={"api_version": "v1beta"},
)
try:
result = client.decisions.create(
model="gemini-decision-1",
input=(
"Task: Explain why parse_config rejects an empty YAML file. "
"Repository: Python service with src/config.py and "
"tests/test_config.py. No file contents are provided. "
"Start with read-only investigation."
),
questions={
"needs_repo": {
"type": "noul",
"instructions": "Must the next step inspect repository files?",
},
"next_tool": {
"type": "choice",
"instructions": "Choose the next read-only investigation step.",
"criteria": {
"read_repo": "Inspect existing source files or tests.",
"read_docs": "Look up public API behavior.",
"no_tool": "The supplied text is sufficient.",
"human_review": "The task is ambiguous or outside these options.",
},
},
"effort": {
"type": "score",
"instructions": "Rate the investigation effort this task needs.",
"criteria": [
"Simple lookup or local explanation.",
"Investigation across source code and tests.",
"Architecture or security analysis with several dependencies.",
],
},
},
)
except Exception as exc:
raise SystemExit(
f"Decision request failed ({type(exc).__name__}); no action selected."
) from None
answers = result.answers or {}
repo = answers.get("needs_repo")
tool = answers.get("next_tool")
effort = answers.get("effort")
if not (
isinstance(repo, NoulAnswer)
and isinstance(tool, ChoiceAnswer)
and isinstance(effort, ScoreAnswer)
and result.usage is not None
):
raise SystemExit("Incomplete decision response; send this task for review.")
# Illustrative thresholds. Tune them on labeled traffic before deployment.
next_tool = tool.choice if tool.confidence >= 0.85 else "human_review"
if next_tool == "read_repo" and repo.noul < 0.85:
next_tool = "human_review"
if next_tool not in {"read_repo", "read_docs", "no_tool", "human_review"}:
next_tool = "human_review"
model_tier = (
"reasoning"
if effort.score >= 1.5 or effort.confidence < 0.80
else "small"
)
print(json.dumps({
"next_tool": next_tool,
"model_tier": model_tier,
"repository_probability": repo.noul,
"tool_confidence": tool.confidence,
"effort_score": effort.score,
"input_tokens": result.usage.total_input_tokens,
"output_tokens": result.usage.total_output_tokens,
}, indent=2))
在同一个 Bash 会话中运行:
python route_decision.py
调用成功后,响应中应包含三个请求键各自对应的答案,并报告零个输出 token。脚本应打印工具标签、模型档位标签、概率和用量。不要把某个特定概率或路由结果当作保证。
0.85、0.80 和 1.5 是应用策略的示例阈值,不是供应商的推荐值。small 和 reasoning 是本地路由标签,不是 API 模型 ID。
程序只产出计划,不读取文件、不执行命令,也不会调用所选档位的模型。智能体的控制代码需要把这些标签映射到获准使用的工具和已部署的模型。文件系统权限和命令审批应独立于模型判断。
这种职责分离同样适用于业务自动化。Jev 工单路由工作流介绍了如何把分类嵌入包含校验和升级处理的完整流程。
免费层有哪些限额,常见失败如何处理?
压测前同时核对请求额度和输入 token 额度。单次可提交的问题数多,并不意味着没有速率限制。
2026-11-13 核对的 Google Gemini Decision 1 公开限额包括:
| 使用等级 | 每分钟请求数 | 每分钟输入 token 数 | 每日请求数 |
|---|---|---|---|
| Free | 200 | 50,000 | 10,000 |
| Tier 1 | 1,500 | 1,000,000 | 50,000 |
上线前,在 AI Studio 检查项目当前实际生效的限额。Google 提醒,公开限额并不保证实际处理容量。其他付费等级见上述文档。
如果客户端没有 decisions 属性,用 python -m pip show google-genai 检查已安装的包。在运行脚本的同一个虚拟环境中更新该包。SDK 从 3.2.0 开始支持 Decisions。
遇到速率限制时,先降低请求频率或缩小输入量,再重试。对于临时故障,Google 的故障排查指南建议采用指数退避、随机抖动和有限次数的重试。也就是按倍数逐步延长等待时间,并加入随机时间差。每日配额耗尽后,应等待配额重置或申请提升,而不是陷入密集重试循环。
用于内容审核时,还要设计额外的失败分支。输入安全过滤器拦截请求时,Decisions API 可能返回 400 Bad Request,而不是答案。请求被拦截,不等于策略检查得到了“否”的分类结果。应将它转交审核或其他获准的处理流程,不要把缺失答案当作继续执行的许可。
OpenRouter 和 Vercel 能使用同一份请求吗?
两者都列出了 google/gemini-decision-1,但接口与 Google 的直连 Python 示例不同。选择网关时要结合现有集成方式,不能只替换基础 URL 就照搬请求。
OpenRouter 模型页面已列出该模型。其 Decisions API 参考文档使用 POST https://openrouter.ai/api/alpha/decisions,共享内容放在 state 中。该端点处于 alpha 阶段,请求结构可能变化。模型页面还注明,目前不支持 EU 区域内路由。
Vercel 发布说明列出了相同的模型 ID。输入 PDF、音频和视频,需要采用该文档描述的 AI SDK 7 接入方式。其 TypeSafe 兼容接口和 Decisions API 支持文本与图像。
Vercel 的决策接口文档还说明,不同接口的请求结构并不相同。AI SDK 使用 state 和 boolean;HTTP Decisions 接口使用 input 和 predicate。不要直接复制 Google 的 noul 请求,应先按照对应文档调整结构。
模型上架网关,不代表任何国家都能访问,也不能证明满足指定的数据驻留要求。迁移生产流量前,检查使用资格、数据处理规则,以及网关费用。
替换路由器前应该测什么?
先让候选路由器只提出建议,不控制实际操作。将其建议与标注样本、现有系统的决策逐一对照。
在自动化比例固定的条件下,统计错误的自动执行操作。同时记录回退频率、端到端 p50 和 p95 延迟、重试次数和总成本。模型版本、问题措辞或候选列表发生变化后,都要重新检查阈值。
确定性任务继续交给代码。检查已知的退出码、匹配明确的权限规则时,引入决策模型的收益很小。需要生成补丁、解释,或构造带有新参数的工具调用时,仍应使用生成式模型。
对于编程工作流,还要把所选执行模型的成本和失败计入比较。编程智能体单任务成本指南解释了为什么路由调用更便宜,完成整个任务却可能更贵。