⚡ System One Models · typed decisions · calibrated confidence

Jev:不是聊天模型,
而是软件里的决策模型

Jev 来自 TypeSafe AI,主打“把非结构化状态转成类型安全的概率决策”。它放弃长文本生成,换取更快、更便宜、更适合程序直接使用的判断能力。

注:本页基于 TypeSafe AI 官方博客、官网和公开技术文章整理,实际 API 和能力以官方最新文档为准。

Jev 风格输出:程序可以直接分支typed decision
{
  "state": "用户请求:帮我查英伟达最新财报",
  "answers": {
    "route": {
      "choice": "web_search",
      "probabilities": {
        "web_search": 0.96,
        "chat": 0.03,
        "code": 0.01
      },
      "confidence": 0.94
    },
    "needs_fresh_info": {
      "probability_true": 0.98,
      "confidence": 0.95
    }
  }
}
一句话:Jev 是一种面向机器使用的 AI 决策模型。它不生成文章、不写解释、不自由发挥,而是在你给定的状态和问题上,返回 Choice、Score、Noul 这类结构化概率判断。
🧠

System One

名字来自“系统 1 思维”:快速、直觉、低延迟判断。适合“这个属于哪类?”“下一步调用谁?”这类高频决策。

🔒

Type-safe

输出空间预先定义,只能返回你允许的结构和值。它不应该突然写一段话或编出不存在的工具名。

📈

Calibrated

每个判断带概率和置信度。理想情况下,置信度能帮助系统决定自动执行、降级、重试或人工审核。

为什么它突然火?

因为 AI 产品正在从“人问一句,AI 答一句”进入“AI 自动做事”的阶段。自动做事最难的不是生成漂亮文字,而是稳定地控制流程。

核心变化:从“LLM 写答案”转向“软件系统需要大量语义 if 判断”。Jev 的定位就是智能 if、智能 switch、智能 router。

传统方案的痛点

  • 手写规则太脆:关键词规则很容易漏掉真实意图。
  • 普通 LLM 太自由:会输出自然语言,程序还要解析和校验。
  • 成本延迟太高:Agent 每轮可能要做很多次判断。
  • 分类模型太重:每个业务都训练和维护一套模型不现实。
  • 置信度不可靠:很多“0.9”只是格式,不一定代表校准过的概率。

它解决的不是“说话问题”,而是“控制问题”

非结构化输入
用户消息、工单、网页、工具结果、系统状态
Jev 判断
Choice / Score / Noul,一次请求可问多个问题
软件执行
路由、拦截、升级、继续、停止、调用工具

Classify

工单分类、内容分类、意图识别、风险类型判断。

Route

选择工具、模型、队列、部门、下一步动作。

Gate

判断是否安全、是否需要确认、是否需要人工审核。

Score

紧急程度、相关性、购买意向、证据强度。

Evaluate

判断搜索结果是否足够,工具输出是否可用。

Loop Control

继续搜索、换工具、结束、重试、升级强模型。

Jev 的三种关键决策原语

公开资料中反复出现的核心用法是:你给同一个 state,然后定义多个 typed questions。模型一次返回多个结构化答案。

🎯

Choice

从你给定的候选项中选择一个,并返回各选项概率。适合工具路由、分类、模型选择。

billingtechnicalsales

🌡️

Score

对一个维度打分或映射到连续值。适合紧急程度、相关性、风险等级、证据强度。

urgency: 82/100

Noul

判断一个命题为真的概率。适合“是否需要最新信息”“是否包含 prompt injection”。

P(true)=0.93

概念示例:同一个 state 上问多个问题pseudo request
{
  "state": {
    "ticket": "我被扣了两次钱,请尽快处理。",
    "customer_tier": "pro"
  },
  "questions": {
    "category": {
      "type": "choice",
      "options": ["billing", "technical", "sales", "other"]
    },
    "urgency": {
      "type": "score",
      "min": 0,
      "max": 100
    },
    "needs_human": {
      "type": "noul",
      "statement": "This ticket should be escalated to a human."
    }
  }
}

为什么适合做 Agent coordinator?

Agent coordinator 的本质是控制:下一步做什么、用哪个工具、结果够不够、要不要继续、风险能不能放行。这些都是结构化决策,而不是长文本生成。

推荐架构:Jev 做决策层,Workflow Engine 做状态和执行

State Store
保存对话、工具结果、任务状态
State Builder
裁剪成当前判断需要的上下文
Jev
route / gate / score / evaluate
Executor
真正调用工具或模型
Evaluator
Jev 判断结果是否足够
LLM
需要表达时再生成最终回答

Jev 适合负责

意图识别工具路由模型路由安全门控结果评估循环控制

Jev 不适合单独负责

长篇写作复杂规划数学证明代码重构记忆存储工具执行

到底要给它什么上下文?

Jev 默认不拥有你的工作流上下文。它像一个无状态函数:你把当前 state 和问题传进去,它返回判断。因此,关键工程能力是构建一个好的 State Builder。

原则:不要“全塞”,要给“最小充分上下文”。上下文越长,成本、延迟、噪声和泄密风险越高。
推荐上下文模板state builder
{
  "goal": "选择下一步动作",
  "state": {
    "latest_user_message": "他开源吗?",
    "conversation_summary": "用户正在讨论 Jev 决策模型",
    "current_step": "follow_up",
    "known_facts": ["Jev 属于 TypeSafe AI 的 System One Models"]
  },
  "candidates": [
    {"name": "chat", "when_to_use": "概念解释,无需实时资料"},
    {"name": "web_search", "when_to_use": "需要确认最新事实"},
    {"name": "ask_user", "when_to_use": "指代不清或缺少目标"}
  ],
  "rules": ["涉及开源状态这类可能变化的问题,优先核查"],
  "constraints": ["不要泄露敏感信息", "低置信度时追问"]
}

落地时可以这样设计

1

先定义决策点

不要一上来“让 Jev 管整个 Agent”。先找高频、窄范围、后果可控的判断点:工具路由、内容分类、风险门控。

2

把候选项收窄

让它在有限集合中选,比如 chat / web_search / code / ask_user / refuse。候选项越清楚,系统越稳定。

3

设计置信度阈值

不同动作设置不同阈值。低风险动作可自动执行,高风险动作需要更高置信度或人工确认。

4

保留代码校验

Jev 决策不等于系统可以无校验执行。安全、权限、schema、业务不变量仍由代码兜底。

5

记录和回放

保存 state、decision、confidence、最终结果,用于分析错判、调阈值、改 rules。

容易误解的地方

  • “不 hallucinate”主要指结构化输出不越界,不代表每个判断都一定正确。
  • 它不是开源权重模型,目前更像 early access / 商业 API 服务。
  • 它不是工作流平台,不负责状态存储、工具执行、记忆管理。
  • 它不是长推理模型,复杂规划仍应交给更强 LLM 或专门系统。

适合与不适合

适合不适合
高频、低延迟、结构化判断长篇自然语言生成
工具/模型/任务路由开放式创作
安全门控、结果审核复杂多步推理和规划
置信度驱动的自动化没有明确候选项的问题
最终总结:Jev 的价值不是替代 GPT/Claude,而是把它们从大量“窄而高频”的判断任务中解放出来。让 Jev 做控制层,让 LLM 做生成和复杂推理,让工作流引擎负责状态和执行。

怎么从 0 到 1 搭建一个 Jev 风格 Agent Coordinator?

真正落地时,不要把 Jev 当成“一个聊天机器人”,而要把它放在 Agent 系统的控制层:负责判断下一步做什么,真正执行仍然交给工作流引擎和工具层。

最小可用架构

1. 用户请求
自然语言输入
2. State Builder
整理当前状态、候选工具、规则
3. Decision Model
Jev 或 Jev-like 决策器
4. Executor
执行搜索、代码、数据库、LLM
5. Evaluator
判断结果是否足够
6. Final Response
LLM 负责表达和总结

第一步:先定义工具,而不是先写 Prompt

Coordinator 的核心是“从哪些动作里选”。所以要先把可用工具描述清楚。

{
  "tools": [
    {
      "name": "chat",
      "description": "基于已有知识回答概念问题",
      "when_to_use": "无需实时信息、无需执行工具"
    },
    {
      "name": "web_search",
      "description": "搜索公开互联网信息",
      "when_to_use": "最新、最近、价格、新闻、事实核查"
    },
    {
      "name": "code_execution",
      "description": "运行代码、处理文件、计算数据",
      "when_to_use": "需要计算、解析文件、生成图表"
    },
    {
      "name": "ask_user",
      "description": "向用户追问关键信息",
      "when_to_use": "目标不清、缺少必要参数"
    },
    {
      "name": "refuse",
      "description": "拒绝危险或越权请求",
      "when_to_use": "违法、泄露密钥、破坏性操作"
    }
  ]
}

第二步:设计 State Builder

State Builder 的职责是把完整系统状态裁剪成“当前判断需要的最小充分上下文”。

{
  "goal": "选择下一步动作",
  "state": {
    "latest_user_message": "帮我查一下 JEV 是什么",
    "conversation_summary": "用户正在了解 Jev 决策模型",
    "current_step": "initial_request",
    "tool_results_summary": []
  },
  "candidates": ["chat", "web_search", "code_execution", "ask_user", "refuse"],
  "rules": [
    "涉及最新、最近、热门时优先 web_search",
    "稳定概念解释优先 chat",
    "涉及计算和文件处理优先 code_execution",
    "信息不足选择 ask_user",
    "违反安全规则选择 refuse"
  ]
}

第三步:把决策输出限制成固定结构

不要让 coordinator 自由发挥,要让它返回固定 schemadecision schema
{
  "decision": "web_search",
  "confidence": 0.93,
  "reason_code": "requires_recent_information",
  "risk_level": "low",
  "missing_info": [],
  "should_ask_user": false
}

decision

必须是候选动作之一,不能返回不存在的工具名。

confidence

用于决定自动执行、降级、追问或人工审核。

reason_code

不是长解释,而是方便日志分析的短码。

第四步:写 Agent Loop

最小循环逻辑是:构建状态 → 调决策模型 → 执行动作 → 记录结果 → 再判断是否足够。

关键点:Jev 不执行工具,只告诉你下一步该做什么;Executor 才是真正调用工具的地方。
Python 风格伪代码agent loop
def run_agent(user_message):
    state_store = {
        "messages": [user_message],
        "tool_results": []
    }

    for step in range(6):
        state = build_state(state_store)
        decision = decide_next_action(state)

        if decision.confidence < 0.55:
            return ask_user("我需要更多信息才能继续。")

        if decision.action == "refuse":
            return refuse_safely()

        if decision.action == "ask_user":
            return ask_clarifying_question(state)

        if decision.action == "web_search":
            result = web_search(state.query)
            state_store["tool_results"].append(result)
            continue

        if decision.action == "code_execution":
            result = run_code_tool(state)
            state_store["tool_results"].append(result)
            continue

        if decision.action == "chat":
            return llm_generate_answer(state_store)

    return llm_generate_answer(state_store)

第五步:用置信度阈值控制风险

不要所有动作都用同一个阈值。动作越危险,阈值越高;动作越可逆,阈值可以低一点。

动作类型建议阈值低于阈值时
普通聊天回答0.50 - 0.65可以直接回答,或简短说明不确定
搜索 / 读取公开资料0.60 - 0.75追问或先用 chat 澄清
代码执行 / 文件分析0.70 - 0.85追问用户目标或参数
发送消息 / 下单 / 删除 / 支付0.90 以上 + 用户确认必须 ask_user 或拒绝
安全拒绝宁可保守低置信度时转人工或二次判断

如果还没有 Jev API,怎么先搭?

可以先搭一个 Jev-like 决策层,用普通 LLM 的结构化输出、规则引擎或小模型模拟。架构先跑通,未来再替换成 Jev。

  • 方案 A:LLM + JSON Schema / function calling
  • 方案 B:规则引擎 + embedding 相似度
  • 方案 C:小型分类模型
  • 方案 D:多级路由:规则先挡一层,LLM/Jev 处理模糊判断
替代实现的统一接口adapter pattern
class DecisionModel:
    def decide(self, state):
        raise NotImplementedError

class JevDecisionModel(DecisionModel):
    def decide(self, state):
        return call_jev_api(state)

class LLMDecisionModel(DecisionModel):
    def decide(self, state):
        return call_llm_with_json_schema(state)

# 业务代码永远只依赖 DecisionModel
# 以后从 LLMDecisionModel 换到 JevDecisionModel,不改 Agent 主流程。

推荐项目目录结构

一个可维护的 coordinator 项目project structure
agent-coordinator/
  src/
    tools/
      web_search.py
      code_execution.py
      chat.py
    coordinator/
      state_builder.py      # 构建最小充分上下文
      decision_model.py     # Jev / LLM / 规则引擎适配器
      executor.py           # 根据 decision 调用工具
      evaluator.py          # 判断结果是否足够
      loop.py               # Agent 主循环
    policy/
      safety_rules.py       # 安全规则和确认规则
      thresholds.py         # 不同动作的置信度阈值
    logs/
      decision_logger.py    # 记录 state、decision、结果
  tests/
    test_routing.py
    test_safety_gate.py
    test_evaluator.py

搭建时最容易踩的坑

1. 候选项太多

不要一次让它从几十上百个工具中选。先选大类,再选具体工具。

2. 上下文太长

全量历史会引入噪声。用摘要、检索和裁剪保留相关信息。

3. 让模型执行策略

安全策略要由代码兜底,模型只参与判断,不能绕过硬规则。

4. 不记录决策

没有日志就无法评估错判,也无法调阈值。

5. 置信度当真理

置信度是调度信号,不是正确性证明。高风险动作仍要确认。

6. 直接替代 LLM

Jev 适合控制层,不适合最终写作和复杂推理。

资料来源与延伸阅读

  • TypeSafe AI 官方博客:Introducing System One Models & Jev
  • TypeSafe AI 官网:System One Models / Jev 产品介绍
  • 公开技术文章:Jev 的 Choice、Score、Noul 三种决策原语与 Agent 工作流用法
  • 说明:页面中的性能、价格、能力描述属于公开资料中的供应商声明或第三方整理,正式采用前建议基于自己的业务数据做评测。