Jev Recipe / 厂商对比

Jev vs OpenAI Decision API(Luna):决策 API 正面对比

OpenAI 在 DevDay 用 GPT-6 Luna 的 Decision API 正面回应 Jev。这份对比看契约本身:预定义答案集 vs Choice/Score/Noul 三原语、150ms vs ~95ms、定价未公布 vs 公开透明,以及两种置信度各自值多少信任。

选定决策 API 之前的 6 项检查

01先确认你在对比的是同一类契约,而不是聊天模型:两者都是「上下文 + 问题 + 预定义答案集 → 单一答案 + 置信度」。两家厂商在一个月内收敛到同一个形状,这本身就是「类型化决策」被市场验证的信号。
02选厂商之前先把业务决策映射到原语:Choice 管多选一路由、Score 管有序评分、Noul 管是/非闸门。Luna 预览版覆盖的是「答案集」这一种情况;有序的 Score 问题目前没有 Luna 对应物。
03按你的调用量把两种计费都算一遍:Jev 公开定价为每百万输入 token $0.042、输出免费;Decision API 在 limited preview 阶段的单次调用成本仍未公布。在分类这种量级下,「定价未公布」是迁移风险,不是细节。
04自动化阈值要建立在「校准」上,而不是「有没有置信度数字」上:Jev 的概率经 RLCD 校准,0.85 的阈值就是一份准确率契约。Luna 的置信度语义无论长什么样,先拿约 100 条你自己的标注样本验证,再让它自动执行任何动作。
05诚实地检查模态与部署边界:Luna 的 context 字段今天就接受图片输入,Jev 的 state 是文本(视觉判断走 OpenJev 生态);如果决策必须留在你的硬件上,本地路线是 OpenJev 克隆——Luna 没有自托管路径。
06把厂商可选性设计进架构:决策调用收口到一个接口后面,Jev 闸门和 Luna 调用随时可换;再让置信度门控降级链把任何一家模型的低置信区间送进同一条人工复核车道。
schema / 类型化多问题契约
{
  "routing": {
    "type": "choice",
    "instructions": "Which queue should this ticket go to?",
    "criteria": {
      "billing": "Payment, invoice or refund issue",
      "technical": "Product malfunction or bug",
      "sales": "Buying or upgrade question",
      "abuse": "Safety or abuse report"
    }
  },
  "needs_safety_escalation": {
    "type": "noul",
    "instructions": "Does this ticket require a safety escalation regardless of queue?"
  },
  "urgency": {
    "type": "score",
    "instructions": "Rate how urgent a human reply is, 1 (routine) to 5 (business-stopping)"
  }
}
这套 schema 就是 Jev 契约深度的直观展示——在 Playground 里一次跑三个问题并查看校准置信度。

决策 API 契约对比:Jev 类型化原语 vs OpenAI Decision API(Luna)

METRIC
Jev
OpenAI Decision API(Luna)
可用性(2026 年 10 月)
正式可用——自助开通 API Key,也可经 OpenRouter 与网关服务商接入
DevDay(2026-09-29)官宣的 limited preview;官方称「未来几天」扩大开放——预览版契约可能仍会变动
问题契约
类型化 Choice(N 选一、每个选项带 criteria)+ Score(1–5 有序)+ Noul(是/否)——多个问题共用一次调用
问题 + 预定义扁平答案集 + 上下文——每次调用一个决策;单次答案数上限尚未公布
单次决策延迟
约 70–100ms 单次前向——不生成任何文本
约 150ms(OpenAI 口径,对照 GPT-6 Luna 聊天 1.6s)——同样是单次推理而非生成
定价透明度
公开:每百万输入 token $0.042、输出免费——十万次决策只要几美分
预览阶段未公布——「扩大开放时披露更多细节」(The New Stack,2026-09-29)
置信度语义
RLCD 校准概率——0.85 约等于 85% 正确率,阈值就是准确率契约
随响应附置信度分数,但校准方法未公开——在你自己的标注上验证之前,只能当排序信号用
模态与部署
文本 state(视觉判断走 OpenJev 生态);可用 OpenJev 克隆在自有硬件本地运行
context 现已支持图片输入(OpenAI changelog);仅 OpenAI 托管——没有自托管或私有化路径

代码对比:OpenAI decisions 端点 vs Jev 类型化调用

python / openai decisions endpoint(limited-preview 形状)
import os
import requests

# Limited-preview shape (announced 2026-09-29). Verify against the
# current reference at broad rollout - preview APIs move.
resp = requests.post(
    "https://api.openai.com/v1/decisions",
    headers={"Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}"},
    json={
        "model": "gpt-6-luna",
        "context": "Ticket: my invoice shows the same charge twice...",
        "question": "Which queue should this ticket go to?",
        "answers": ["billing", "technical", "sales", "abuse"],
    },
    timeout=5,
)
resp.raise_for_status()
decision = resp.json()  # -> {"answer": "billing", "confidence": 0.91}

# One flat answer set per call: no per-option criteria, no second
# question sharing the call, no ordered score primitive.
python / jev 类型化多问题闸门
import requests

JEV_ENDPOINT = "https://api.typesafe.ai/v1/jev/evaluate"
AUTO_ROUTE_CONFIDENCE = 0.85

QUESTIONS = {
    "routing": {
        "type": "choice",
        "instructions": "Which queue should this ticket go to?",
        "criteria": {
            "billing": "Payment, invoice or refund issue",
            "technical": "Product malfunction or bug",
            "sales": "Buying or upgrade question",
            "abuse": "Safety or abuse report",
        },
    },
    "needs_safety_escalation": {
        "type": "noul",
        "instructions": "Does this ticket require a safety escalation regardless of queue?",
    },
    "urgency": {
        "type": "score",
        "instructions": "Rate how urgent a human reply is, 1 (routine) to 5 (business-stopping)",
    },
}

resp = requests.post(
    JEV_ENDPOINT,
    json={"state": {"ticket": "..."}, "questions": QUESTIONS},
    timeout=5,
)
resp.raise_for_status()
data = resp.json()

route = data["routing"]  # criteria-checked answer + calibrated confidence
if (
    route["confidence"] >= AUTO_ROUTE_CONFIDENCE
    and not data["needs_safety_escalation"]["answer"]
):
    lane = f"auto:{route['answer']}"  # ~70-100ms, input tokens only
else:
    lane = "review"  # 0.60-0.85 band or safety flag
typescript / openai decisions endpoint(limited-preview 形状)
const resp = await fetch("https://api.openai.com/v1/decisions", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.OPENAI_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "gpt-6-luna",
    context: "Ticket: my invoice shows the same charge twice...",
    question: "Which queue should this ticket go to?",
    answers: ["billing", "technical", "sales", "abuse"],
  }),
});
// Limited-preview shape (announced 2026-09-29) - verify at broad rollout.
const decision = (await resp.json()) as {
  answer: string;
  confidence: number;
};
typescript / jev 类型化多问题调用
const JEV_ENDPOINT = "https://api.typesafe.ai/v1/jev/evaluate";
const AUTO_ROUTE_CONFIDENCE = 0.85;

const QUESTIONS = {
  routing: {
    type: "choice",
    instructions: "Which queue should this ticket go to?",
    criteria: {
      billing: "Payment, invoice or refund issue",
      technical: "Product malfunction or bug",
      sales: "Buying or upgrade question",
      abuse: "Safety or abuse report",
    },
  },
  needs_safety_escalation: {
    type: "noul",
    instructions:
      "Does this ticket require a safety escalation regardless of queue?",
  },
  urgency: {
    type: "score",
    instructions:
      "Rate how urgent a human reply is, 1 (routine) to 5 (business-stopping)",
  },
} as const;

const resp = await fetch(JEV_ENDPOINT, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ state: { ticket: "..." }, questions: QUESTIONS }),
});
const data = await resp.json();

const lane =
  data.routing.confidence >= AUTO_ROUTE_CONFIDENCE &&
  !data.needs_safety_escalation.answer
    ? `auto:${data.routing.answer}`
    : "review";

Jev vs OpenAI Decision API 常见问题

OpenAI 的 Decision API 是什么?

OpenAI 在 2026-09-29 DevDay 官宣的非聊天端点,构建于 GPT-6 家族中最小、最便宜的模型 Luna 之上。调用方提供问题、预定义答案集和上下文;它在大约 150ms 内返回答案集中的一个答案加一个置信度分数。首发为 limited preview,官方称「未来几天」扩大开放;单次调用定价在官宣时仍未公布。The New Stack 报道认为它是对 TypeSafe Jev 的直接回应。

Decision API 和 Jev 是同一个东西吗?

同一个品类,不同的契约。两者都非生成式:上下文 + 问题 + 固定答案集进,单一答案 + 置信度出——不生成任何文本。区别在契约深度:Jev 的 Choice 问题给每个选项带 criteria(策略留在可评审的代码里)、Score 覆盖有序决策、多问题共用一次调用、概率经 RLCD 校准、仅输入计费且定价公开($0.042/M)、OpenJev 生态提供自托管路线。Luna 的反制点是更简单的请求形状、今天就支持图片上下文,以及 OpenAI 第一方集成——代价是预览阶段的定价与校准透明度。

现在上生产应该选哪个?

在 Luna 还是 limited preview 的当下默认选 Jev:它正式可用、阈值经过校准、定价公开,而且迁移只是包一层适配函数。三类情况优先看 Luna:技术栈 all-in OpenAI、决策需要图片上下文、或单一厂商账单比价格透明更重要。无论选谁,先拿约 100 条自己业务的标注样本跑过两个闸门,再谈「只凭置信度自动执行」。

能不能两个都在同一条管道里用?

可以,而且模式是现成的:把两者都收口到代码里的同一个决策接口后面,再让置信度门控降级链负责路由——Jev 闸门常驻第一道,需要图片上下文的决策走 Luna,同一条 0.60–0.85 复核带接住任何一家的低置信输出。这样换厂商的成本是一个适配器,而不是一次重写。

这和 Jev vs Luna 基准页有什么区别?

本页对比的是产品与 API 契约:请求形状、原语、延迟、定价、校准、部署。Jev vs Luna 基准页对比的是实测任务成绩——505 样本第三方评测中 Jev 以约 $0.01 对 $0.06 的成本拿到 382/505,其中也包括 Luna 赢的那一局。两页一起读:契约决定你能建什么,基准决定建出来该期待什么。

预览版契约变了,我的代码怎么办?

OpenAI 承诺「扩大开放时披露更多细节」,所以要假设请求与响应字段都可能变——这正是 Luna 调用必须收口在一个适配函数里、应用层永远不直接看见它的原因。Jev 的 evaluate 端点自上线以来正式可用且未变。无论如何把手头那约 100 条评测集留着:换一个闸门重新验证是一个下午的事,不是一个季度。

继续深入契约与实测