Jev从入门到实战-读懂System One模型并跑通智能if语句

Jev 从入门到实战:读懂 System One 模型,跑通工单智能路由

它不会聊天、不会写代码、不会写文案,甚至

一个字都不生成

。但它一上线,24 小时内就有近 13% 的 Vercel 付费团队接入,成为 Vercel 平台有史以来被采用速度最快的新模型。 这篇文章不讲虚的:先花 3 分钟认识 Jev------它是什么、和传统大模型有什么区别、适合干什么;然后从申请 API Key 开始,一步步带你发请求、跑通一个完整的工单智能路由 Demo。

想上手的朋友,看完就能动手。


第一部分:认识 Jev

一、Jev 是什么?

Jev 是旧金山创业公司 TypeSafe AI 发布的首个「System One」模型 ------ 它不做生成,只做判断。

官方定位是 "Decisions, not strings"(要决策,不要文本):

  • 你给它一段状态(一封邮件、一条工单、一段日志、一份程序状态);

  • 再给它几个预定义好的问题(带候选答案);

  • 它一次性并行返回选择、评分、概率,每个结果都附带置信度。

它不是 "一个小号的 ChatGPT",而是一个放在代码里的 "智能 if 语句":模型负责模糊的语义判断,代码负责精确的规则、权限和动作。

名字的由来

  • System One 出自卡尼曼《思考,快与慢》------ 快速、直觉式的判断(System 1);过去几年大家造的聊天大模型则对应 "System 2",会思考、会写长文。

  • Jev 不是缩写,而是致敬经济学家威廉・斯坦利・杰文斯,借 "杰文斯悖论" 表达:当单次智能判断的成本被压到极低,软件里原本觉得 "调用一次 AI 不划算" 的地方,都会开始用 AI。

二、三种核心原语

Jev 只会答三种 "题",可以混在同一个请求里并行计算------ 问 1 个问题和问 4 个问题,延迟几乎一样:

原语 作用 示例问题 返回
Choice 从固定候选中选一个(≤255 个) 这条工单该转给哪个部门? 选择 + 完整概率分布 + 置信度
Score 在有序等级上评分(2---10 级) 客户有多沮丧? 加权分数 + 概率 + 置信度
Noul 判断 "是否为真" 的概率 客户是否要求退款? 0~1 概率

三、和传统大语言模型的根本区别

维度 传统 LLM Jev
输出方式 逐 token 自回归生成 并行输出结构化判断
输出形态 文本 / JSON(需要解析校验) 类型确定的选择、评分、概率
延迟 端到端 3s---329s 端到端 70---500ms
成本 输入输出都按 token 收费 输入 $0.042 / 百万 token,输出免费
幻觉 可能生成 schema 外的字段 结构上不会输出候选之外的值
擅长 写作、解释、推理、创造 分类、路由、评分、判断

官方给出的对比数字很夸张:特定工作流评测中最高比对照大模型快 193.6 倍、便宜 444.6 倍。

⚠️ 注意:这些数字来自

TypeSafe 自己的评测

------ 测试任务由自家团队设计,参考答案由其他大模型生成而非人工标注,官方也承认数据 "处于实际收益的较高一端"。当方向参考,别当绝对真理。

四、它擅长什么、不擅长什么?

适合(高频 "小判断"):工单路由、邮件 / 消息分拣、风控判断、Agent 工具选择、内容审核 /guardrail、状态评估。

不适合:❌ 聊天 ❌ 写代码 / 写文案 / 写长文 ❌ 看图听音频 ❌ 多步推理(实测长程浏览器任务 1/20)❌ 中文(CJK)效果一般。

一句话:它是补充,不是替代------Agent 里几十次判断交给 Jev,真正需要 "想" 和 "写" 的部分仍然交给大模型。


第二部分:上手实战

五、开工前:申请访问 + 配置密钥

先说清楚一件事:Jev 是托管 API,不需要也不支持自己部署模型(目前没有开源权重)。所以本文的 "部署",指的是把它接进你的服务 ------ 这恰恰也是官方设计它的方式。

Jev 目前是 Early Access,需要申请:

  1. 打开 TypeSafe 官网(typesafe.ai)加入 waitlist;

  2. 获得访问后,登录 Console 创建一个 API Key;

  3. 只在服务端保存密钥,不要写进前端、Git 仓库或博客示例。

配置环境变量(本地开发):

bash 复制代码
# bash / zsh

export TYPESAFE_API_KEY="your-key-here"

# 或者写进 .env 文件

echo "TYPESAFE_API_KEY=your-key-here" >> .env

Python / Node SDK 都会自动读取

TYPESAFE_API_KEY

环境变量,默认使用

jev-latest

模型,开箱即用。

六、接口速览:一个端点搞定一切

Jev 只有一个端点,一次请求可以混合问多个问题:

bash 复制代码
POST https://api.typesafe.ai/v1/systemone

Authorization: Bearer $TYPESAFE_API_KEY

Content-Type: application/json

请求体由三部分组成:

字段 说明
model 模型版本,如 jev-1.13.0,或用稳定别名 jev-latest
state 一段状态:文本 / JSON 对象 / 文本数组
questions 预定义问题,支持 choice / score / noul 三种类型混用

关键参数速查(截至 2026-09,以官方 Models 页为准):

项目 数值
输入价格 $0.042 / 百万 token
输出价格 免费
总上下文 64K token / 请求
state + 单问题上限 32K token
Choice 候选上限 255 个
Score 等级 2---10 级
默认限流 250,000 token / 秒,1,200 请求 / 分钟

七、第一个请求:cURL 一次问三件事

拿一条客服消息当 state,同时问三个问题:该转给哪个部门、客户多生气、是否紧急。

vbnet 复制代码
curl -X POST https://api.typesafe.ai/v1/systemone \

  -H "Authorization: Bearer $TYPESAFE_API_KEY" \

  -H "Content-Type: application/json" \

  -d '{

    "model": "jev-latest",

    "state": "My payouts have failed for 3 days. I am losing sales. Help ASAP.",

    "questions": {

      "department": {

        "type": "choice",

        "instructions": "Which team should handle this?",

        "criteria": {

          "billing": "Payments and refunds",

          "technical": "Bugs and outages",

          "sales": "Pricing and new accounts",

          "other": "None of the above"

        }

      },

      "frustration": {

        "type": "score",

        "instructions": "How frustrated is the customer?",

        "criteria": ["Calm", "Frustrated", "Very angry"]

      },

      "urgent": {

        "type": "noul",

        "instructions": "Does this need urgent attention?"

      }

    }

  }'

返回的是一个结构化答案(不是一段文字):

json 复制代码
{

  "model": "jev-1.13.0",

  "answers": {

    "department": {

      "type": "choice",

      "choice": "billing",

      "probabilities": {

        "billing": 0.72,

        "technical": 0.25,

        "sales": 0.0,

        "other": 0.03

      },

      "confidence": 0.71

    },

    "frustration": {

      "type": "score",

      "score": 1.62,

      "probabilities": { "0": 0.05, "1": 0.28, "2": 0.67 },

      "confidence": 0.83

    },

    "urgent": {

      "type": "noul",

      "noul": 0.95

    }

  }

}

注意看:三个问题在同一次请求里并行返回,每个都带概率(Noul 直接返回 0~1 概率)。你的代码拿这些值做决策即可。

八、Python SDK 实战:官方推荐姿势

8.1 安装

要求 Python 3.10+:

复制代码
pip install typesafe-sdk

8.2 最小调用

ini 复制代码
from typesafe_sdk import Choice, Noul, Score, TypeSafeClient

with TypeSafeClient(model="jev-latest") as client:

    response = client.system_one(

        state={"ticket": "I was charged twice. Please fix this today."},

        questions={

            "department": Choice(

                instructions="Which team should handle `ticket`?",

                criteria={

                    "billing": "Charges, invoices, and refunds",

                    "technical": "Bugs, outages, and integrations",

                    "other": "None of the above",

                },

            ),

            "severity": Score(

                instructions="How severe is `ticket`?",

                criteria=["Routine", "Degraded", "Blocking"],

            ),

            "refund": Noul(

                instructions="Does `ticket` request a refund?"

            ),

        },

    )

    print(response.choices["department"].choice)

    print(response.scores["severity"].score)

    print(response.nouls["refund"].noul)

三种原语的返回对象:

类型 返回对象 关键属性
Choice response.choices["key"] .choice、.probabilities、.confidence
Score response.scores["key"] .score、.probabilities、.confidence
Noul response.nouls["key"] .noul

九、完整实战:工单智能路由 Demo

下面是一个可以直接跑的端到端示例:读入工单 → Jev 判断 → 代码路由 → 执行动作。

python 复制代码
import os

from typesafe_sdk import Choice, Noul, Score, TypeSafeClient

TICKET = "东西还行,但快递等了十天,问客服也没人回,我要退款。"

def route_ticket(ticket_text: str) -> str:

    with TypeSafeClient(model="jev-latest") as client:

        response = client.system_one(

            state={"ticket": ticket_text},

            questions={

                "department": Choice(

                    instructions="Which team should handle `ticket`?",

                    criteria={

                        "billing": "Charges, invoices, and refunds",

                        "shipping": "Delivery, logistics, and tracking",

                        "technical": "Bugs, outages, and integrations",

                        "other": "None of the above",

                    },

                ),

                "urgency": Score(

                    instructions="How urgent is `ticket`?",

                    criteria=["Routine", "Degraded", "Blocking"],

                ),

                "refund_request": Noul(

                    instructions="Does `ticket` request a refund?"

                ),

            },

        )

    department = response.choices["department"]

    urgency = response.scores["urgency"]

    refund = response.nouls["refund_request"].noul

    # ---- 决策逻辑:阈值 + 置信度双轴 ----

    if department.confidence < 0.5:

        return "人工介入:部门判断不明确"

    if refund >= 0.8:

        return "转退款组:客户明确要求退款"

    if urgency.score >= 2.0 and urgency.confidence > 0.7:

        return f"加急处理:{department.choice}"

    return f"正常队列:{department.choice}"

if __name__ == "__main__":

    assert os.environ.get("TYPESAFE_API_KEY"), "请先设置 TYPESAFE_API_KEY"

    print(route_ticket(TICKET))

跑一下:

ini 复制代码
export TYPESAFE_API_KEY="your-key-here"

python ticket_router.py

# 输出示例:转退款组:客户明确要求退款

这段代码演示了三个生产要点:

  1. confidence 作为第二决策轴:判断不明确就升级人工,不硬猜;

  2. Noul 阈值触发业务动作:退款概率 ≥ 0.8 直接转组;

  3. Score 判断严重度:≥ 2.0 且高置信度才加急。

十、进阶技巧

10.1 高基数选择(候选超过 255 个)

Choice 最多 255 个候选。候选非常多时(比如要从几千个链接里选),官方做法是两阶段:

复制代码
第一阶段:对每个候选独立评分(Score)

第二阶段:只把分数最高的几个候选拿去 Choice

这样既绕开数量上限,又保持 "候选之外的结果不会出现" 的类型保证。

10.2 接入自己的 Agent 循环

Jev 特别适合 Agent 里的 "下一步决策":

perl 复制代码
# 伪代码:Agent 每一步用 Jev 决定调用哪个工具

state = {

    "task": "查询用户 A 的订单状态",

    "available_tools": ["get_order", "send_email", "refund_order", "human_escalate"],

    "history": "已尝试 get_order,返回 404",

}

decision = client.system_one(state=state, questions={

    "next_tool": Choice(

        instructions="Which tool should the agent call next?",

        criteria={t: t for t in state["available_tools"]},

    )

})

# 再决定是否升级人工

if decision.choices["next_tool"].confidence < 0.5:

    escalate_to_human()

10.3 成本估算

Jev 便宜到什么程度?官方例子:Doom bot 以 10 次 / 秒频率闭环判断,运行一小时成本约 $7。

自己算一下:

bash 复制代码
每次请求输入 1,000 token

单次输入成本 = 1000 / 1,000,000 × $0.042 = $0.000042

100 万次请求 ≈ $42

对比传统大模型按输出 token 收费(输出往往占大头),Jev 输出免费,做高频小判断的成本优势非常明显。

十一、生产化必看的坑

  1. 密钥安全:API Key 只在服务端;前端直连 = 密钥泄露。建议通过自己的后端代理调用。

  2. 中文效果一般:官方明确 CJK 准确率偏低,英文短文本最稳。生产场景建议先拿自己的中文数据回放测试。

  3. 限流会变:Early Access 期间的 250K token/s、1,200 请求 / 分钟不是永久 SLA,上线前跟官方确认。

  4. 不要拿 Jev 写文本:它不能生成解释、邮件正文、代码。需要文本的地方配一个生成模型兜底。

  5. "不会幻觉" ≠ 不会选错 :它结构上不会输出候选之外的值,但可能在合法候选中选错。阈值必须用你自己的标注集回放测试,别直接抄官方示例。

  6. 延迟受地域影响:官方 70---500ms 是西海岸实测,国内调用需实际测一下(可以通过 Vercel AI Gateway / Cloudflare / OpenRouter 等网关选择更近的接入点)。

十二、写在最后

Jev 不是一个 "更聪明的 AI",而是一个 "更便宜的判断"。 它把 AI 从 "会说话" 的明星,变成了 "能干活的螺丝钉"。

部署它不需要 GPU、不需要微调、不需要维护推理服务 ------ 申请个 Key,写几十行代码,它就成了你服务里那个永远在线、毫秒级响应、一次判断不到万分之四美元的 "智能 if 语句"。

下一步可以做的事:

  • 把工单路由 Demo 接到你的客服系统(用 webhook 或消息队列);

  • 在 Agent 循环里用 Jev 做工具路由 + 人工升级判断;

  • 用 Jev 做 LLM 输出的 guardrail(校验大模型的结论是否支持证据)。

跑通之后欢迎回来交流踩坑经验。


相关资源:

  • 官方申请入口与文档:typesafe.ai | docs.typesafe.ai

  • Python SDK:pip install typesafe-sdk

  • Node SDK:npm install @typesafe-ai/sdk

  • Vercel AI Gateway 接入指南:vercel.com/changelog

  • Browser Use 官方示例(Jev 做浏览器动作路由):github.com/browser-use/jev-ultrafast

相关推荐
冉冉同学1 小时前
AI Agent 开始操作真实手机:移动端自动化的 3 个新考点
android·ai编程
网络毒刘2 小时前
端到端:用 Cursor Agent 完成「小功能 + 单测 + PR 描述」并附人工验收清单
单元测试·agent·ai编程·cursor·工具实践
hudou_k2 小时前
使用WorkBuddy开发项目的实践经验
ai编程·workbuddy
熊猫钓鱼>_>2 小时前
Kotlin Multiplatform for OpenHarmony 实战:为 Landscapist 实现图片加载适配
开发语言·kotlin·华为云·ai编程·harmonyos·鸿蒙·openharmony
OpsEye2 小时前
上线大模型只是第一步,用好 AI 离不开完整的成本管控
javascript·ai编程
ZzT2 小时前
rtk 拆解:git log 输出压掉 98%,8 万星的 token 代理适合哪些场景
ai编程
秋天的一阵风2 小时前
🧐 为什么大厂 RAG 从不用纯向量检索?
前端·面试·ai编程
熊猫钓鱼>_>3 小时前
开源鸿蒙平台 KMP 三方库 KStore 适配全流程:从 ohosArm64 target 到真机文件持久化验证
人工智能·华为·开源·ai编程·harmonyos·openharmony·kmp
jason.zeng@15022073 小时前
(十)分层架构的多文件工程
python·架构·prompt·交互·ai编程·llama