TopxAI

Loading...

博客

TypeSafe Jev:只给判断、不写文字的 System One 模型

· typesafe, jev, system-one, 分类, api, topxai

Jev(jev-1.13.0)是什么,noul、choice、score 三种问题怎么用,官方文档承认的短板,价格与限流,以及如何通过 TopxAI 调用。

TopxAI 开始转发 TypeSafe 的 Jev,售价为官方价上浮 7%。这篇写给正在评估它的开发者。下面的内容全部取自 TypeSafe 官方文档,截至 2026-09-18,涉及数字的地方都注明出处页面。

三步接入

只想先跑起来的话,按这个顺序做:

  1. 登录 TopxAI,在 API 密钥 页面新建一把密钥。分组选「TypeSafe · 官方线路」;选「自动路由」也可以,Jev 只有这一条线,会自动落到它。

  2. 密钥建好后,在密钥详情里能看到一条安装命令,复制到终端执行。它会装好 TypeSafe 的 agent skill,把官方 SDK 和 skill 的请求地址改成 https://ai.topxea.com,最后发一次测试请求确认密钥可用:

    curl -fsSL https://ai.topxea.com/install/typesafe.sh | sh -s -- --key sk-xxxx
  3. 之后写代码看 TypeSafe 官方文档就行:docs.typesafe.ai,API 页在 docs.typesafe.ai/api,模型与价格在 docs.typesafe.ai/models。接口和请求体与官方完全相同,只是地址和密钥换成 TopxAI 的。

脚本可以重复执行,改动的文件每次都整段重写;不想装 skill 或不想发测试请求,加 --no-skill、--no-verify。下文解释 Jev 到底是什么、适合做什么、不适合做什么。

它和聊天模型的区别

聊天模型的产出是给人读的文字。代码要一个判断时,通常得让模型吐 JSON,再解析,再祈祷字段没漂。TypeSafe 把 Jev 称为第一个 System One 模型:你发一份 state 和一组带类型的问题,它返回带类型的值和概率分布。文档原话是 "No text generation, no parsing."

System One 这个名字取自卡尼曼的快思考。它设计的工作单元,是懂行的人几秒钟就能下的判断,例如"这条消息是否紧急"。文档明确说,"分析这条消息并决定最佳处理方案"这种题超出了它的范围,要拆成小问题,再在代码里合并答案。

有两点训练上的事实要先记住。Jev 用 TypeSafe 称为 RLCD(Reinforcement Learning for Calibrated Decisions)的方法训练,目标是概率校准:标 0.8 的事情大约 80% 会发生。文档同时说明,校准是在一组预测上度量的,"不保证单个答案正确"。另外它不做按客户的微调,"同一套权重服务所有账户",你只能通过请求本身来影响它。

三种问题

每个请求都是 POST /v1/systemone,正文三个字段:state、model、questions。每个问题有 type、instructions,以及 criteria(noul 的 criteria 可省)。你起的问题 ID 不会发给模型,所以完整的问题要写在 instructions 里。

noul 回答一个是非题,返回"是"的概率。criteria 可选,用 true 和 false 两条描述说明边界。下面是 noul 页面的例子:

{
  "state": "I have asked three times now. Can I please just talk to a real person?",
  "model": "jev-latest",
  "questions": {
    "is_human_escalation": {
      "type": "noul",
      "instructions": "Is the customer asking for a human agent?"
    },
    "is_repeat_contact": {
      "type": "noul",
      "instructions": "Has the customer contacted support about this before?",
      "criteria": {
        "true": "Mentions a prior attempt, ticket, or that they have asked before",
        "false": "No sign of any previous contact"
      }
    }
  }
}
{
  "model": "jev-latest",
  "answers": {
    "is_human_escalation": { "type": "noul", "noul": 0.99 },
    "is_repeat_contact": { "type": "noul", "noul": 0.93 }
  },
  "usage": { "input_tokens": 360, "output_tokens": 39 }
}

noul 没有单独的 confidence。接近 1 是强烈的"是",接近 0 是强烈的"否",0.5 附近表示拿不准。文档特别提醒,0.5 不代表"中等水平";要量一个程度,用 score。

choice 从你给的选项里选一个。选项描述可以是字符串、null 或结构化对象,一个问题最多 255 个选项。choice 页面的例子:

{
  "state": "My running shoes arrived in the wrong size. Can I swap them for a size 10?",
  "model": "jev-latest",
  "questions": {
    "department": {
      "type": "choice",
      "instructions": "Which team should handle this?",
      "criteria": {
        "returns": "Exchanges, refunds, wrong or damaged items",
        "shipping": "Delivery status, delays, lost packages",
        "billing": "Charges, invoices, payment problems"
      }
    }
  }
}
{
  "model": "jev-latest",
  "answers": {
    "department": {
      "type": "choice",
      "choice": "returns",
      "confidence": 1.0,
      "probabilities": { "shipping": 0.0, "returns": 1.0, "billing": 0.0 }
    }
  },
  "usage": { "input_tokens": 330, "output_tokens": 34 }
}

probabilities 之和为 1,confidence 由分布的尖锐程度算出。同一页还有一张更乱的工单:department 选了 returns,概率 0.60,但 billing 也有 0.38,confidence 就掉到了 0.39。

score 把 state 放到一条你用文字描述的有序刻度上,2 到 10 档。答案是按概率加权的位置,可以落在两档之间。score 页面的例子:

{
  "state": "The export button crashes the settings page in Safari. It works in Chrome, but a few of our customers only use Safari.",
  "model": "jev-latest",
  "questions": {
    "bug_severity": {
      "type": "score",
      "instructions": "How severe is the reported issue?",
      "criteria": [
        "Cosmetic; no impact to functionality",
        "Broken or degraded feature, but workaround exists",
        "Blocking issue; no workaround exists"
      ]
    }
  }
}
{
  "model": "jev-latest",
  "answers": {
    "bug_severity": {
      "type": "score",
      "score": 1.3,
      "confidence": 0.54,
      "legend": {
        "0": "Cosmetic; no impact to functionality",
        "1": "Broken or degraded feature, but workaround exists",
        "2": "Blocking issue; no workaround exists"
      },
      "probabilities": { "0": 0.0, "1": 0.7, "2": 0.3 }
    }
  },
  "usage": { "input_tokens": 332, "output_tokens": 18 }
}

score 的算法是 0 x 0.0 + 1 x 0.70 + 2 x 0.30 = 1.30。每一档单独评判,模型看不到档位编号,所以别只写数字当档位(["0", "1", "2"])。文档里同一份报告,描述性档位得 0.0、confidence 1.0,纯数字档位得 0.57、confidence 只有 0.35。

state 怎么设计,confidence 怎么读

state 可以是字符串、JSON 对象或数组。文档建议多数请求用对象,让每一部分有名字,并在 instructions 里用反引号路径指向具体字段,比如 `ticket.messages[0].text`。只放问题需要的内容,因为"state 里无关内容越多,准确率越低"。

instructions 和 criteria 也接受 JSON。choice 的一个选项可以是带 what、not_for、examples 的对象,score 的一档可以带 signals,noul 的 true 和 false 各自可以是对象。这些字段名都不是保留字,由你自己定。中转层和客户端必须原样透传这些结构。

confidence 是 choice 和 score 答案上 0 到 1 的一个数。TypeSafe 给的起步做法是分三段:高就自动执行,中等就让用户确认或标记复核,低就转人工,分界线按出错代价定。文档的例子里,查余额 0.6 就放行,批准转账要 0.85 以上。阈值只能用你自己的数据定,方法是把 confidence 和准确率画在一起看。

文档写明的四种模式

投机式扇出(speculative fan-out)。把代码可能用到的问题一次发完,包括只在某些分支才有用的那些,然后由代码忽略无关答案。问题并行评估,多几个问题几乎不增加延迟。parallel questions 这篇 cookbook 对一篇 53,777 字符的 GDPR 文章问 13 个问题:一次调用花 $0.000497、0.27 秒,拆成 13 次花 $0.006090、2.71 秒,答案完全一致。

按 confidence 分流(confidence-gated routing)。答案说"是什么",confidence 说"能不能照做"。同一个系统里,不同动作用不同阈值。

组合打分(composite scoring)。把一个判断拆成每个维度一道 score,各自除以最高档位数归一化,再在代码里加权。简历那个例子对 python_depth、team_leadership、system_design、generalist 各打 0 到 4 分,高级工程师岗用 0.40 * py + 0.10 * lead + 0.40 * arch + 0.10 * general,经理岗换一组权重。

意图路由(intent routing)。一道 choice 判意图,一道 score 判复杂度,然后分别交给确定性代码、专职 LLM 或人工。confidence 低于 0.5 直接转人工。

cookbook 里的几个实测

LLM 护栏。每条消息一个请求,带四个 noul(越狱、有害请求、医疗建议、自伤)和一道 0 到 3 的严重度 score,代码按策略把风险映射到拦截、复核或转支持。DAN 提示词的越狱概率是 0.98;小说作者问"角色怎么被下毒"只有 0.05,放行。

重排序。40 个法律检索查询,BM25 先取前 30,再对每个"查询 + 候选"对问一道 noul。top-1 从 5% 升到 18%,top-10 从 38% 升到 62%,一共 1,200 次调用、$0.0645。

带 confidence 的分类。60 份 SEC 年报,一道 choice 在 75 个 SIC 行业组里选。硬选行业组答对 39/60;confidence 低于 0.9 时改报更粗的大类,可用答案升到 48/60。

抽取。日期 cookbook 把月、日、年和相对锚点都做成 choice,日历运算全部留在代码里。预解析抽取 cookbook 先用正则找出候选片段,再让 choice 挑一个,模型不可能凭空编值。SDE 级联让小模型先抽取,用逐字段 noul 当错误标记,只有某个标记超过 0.7 才升级到推理模型。

引用核查。先用字符串匹配找引文;找得到的,再用一道 choice 判断该段落对论断是支持、反驳还是无关。有一条引文逐字存在,但同一段写着 "Use of this claim is OPTIONAL",以 0.99 判为反驳。

函数调用。十个带 Literal 参数的交易函数,每条指令生成 54 个问题:一道 choice 选函数,每个参数一道 choice 或 noul,再加一道"用户有没有提到这个参数"的 noul,没提就用默认值。上报的 confidence 取最弱的那个参数,而不是连乘。

以上数字都在 jev-1.12 上测得,页面说明新版本的概率可能不同。

TypeSafe 自己承认的长处和短板

长处:答案限定在你给的选项里;问题彼此独立、并行;概率经过校准并附带 confidence;构建指南写的是每次查询约 100 毫秒,两篇一致性 cookbook 实测平均 111 和 114 毫秒;重复调用的方差小(15 次运行,noul 每题概率标准差均值 0.0102,choice 0.0098)。

短板来自 jev-1.13 jaggedness 页面,最后复核日期 2026-09-17:

其他限制:只接受文本,不收图片和音频;英语是主要训练语言,"包括 CJK 在内的其他语言能处理,但效果不等";同一请求内的问题彼此独立,真正有依赖的后续判断要发第二个请求。

价格和限流

models 页面的原文:"Price (per Btok / per Mtok) $42 / $0.042",即每十亿输入 token 42 美元,每百万 0.042 美元。"按输入 token 计费,输出 token 免费。"

TopxAI 的售价是官方价上浮 7%:每百万输入 token 0.04494 美元,输出 token 同样免费。价目表里能看到牌价与售价并列。

限流:"250,000 tokens per second / 1,200 requests per minute",并附警告说限额"正在动态调整"、"可能不经通知就变"。上下文:"64k tokens per request; 32k tokens for state plus the longest question"。超过任一限额返回 429,文档要求指数退避重试,并遵守 retry-after。

模型名:当前版本是 jev-1.13.0,jev-latest 和 jev-preview 现在都指向它。别名会随发布移动,调过阈值的系统要固定用版本号。

通过 TopxAI 调用

TopxAI 在 POST https://ai.topxea.com/v1/systemone 提供完全相同的接口,按官方价上浮 7% 计费(输入 0.04494 美元 / 百万 token,输出免费),用 TopxAI 密钥鉴权(Bearer sk-...)。请求体和返回体与上面的例子一字不差。

curl -X POST https://ai.topxea.com/v1/systemone \
  -H "Authorization: Bearer sk-xxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "state": "Hi, I have been trying to connect my Stripe account for 3 days and it keeps failing. I am losing sales. Please help ASAP.",
    "model": "jev-1.13.0",
    "questions": {
      "urgency": { "type": "noul", "instructions": "Does this message express urgency?" }
    }
  }'

两个官方 SDK 都读 TYPESAFE_BASE_URL,并自行拼上 /v1/systemone 和 /v1/models,代码不用改:

export TYPESAFE_API_KEY=sk-xxxx
export TYPESAFE_BASE_URL=https://ai.topxea.com
pip install typesafe-sdk        # Python 3.10+
npm install @typesafe-ai/sdk    # Node.js 20+

如果由编码 agent 来写集成,装上 TypeSafe 的 skill,再设同样两个变量。一行安装脚本会把两件事一起做完:

curl -fsSL https://ai.topxea.com/install/typesafe.sh | sh -s -- --key sk-xxxx

skill 的 SKILL.md 只链接文档页面,没有写死任何 API 主机,所以把 agent 指向中转站只需要 TYPESAFE_BASE_URL。想用上游原版命令也行:Claude Code 用 claude plugin marketplace add typesafe-ai/skills && claude plugin install typesafe@typesafe-ai,其他 agent 用 npx skills add typesafe-ai/skills --skill typesafe-ai -g。

常见问题

能让它写回复或摘要吗?不能。文字交给生成模型,判断交给 Jev。smart home 那个 demo 就是这样分工的。

一个请求能放多少问题?只受 token 预算限制。skill suggestion cookbook 在一道 choice 里排 182 个选项;parallel questions cookbook 一次发 13 道混合问题,答案没有变化。

confidence 0.9 是不是 90% 的正确率?不是。confidence 度量的是分布有多尖。校准针对的是大量预测上的概率,不是单个答案。

中文文本能用吗?文档说非英语输入(含 CJK)"能处理,但效果不等",要求用自己的内容测试,并盯紧 confidence。

model 字段该填什么?固定版本填 jev-1.13.0,跟随发布填 jev-latest。返回体会报告实际作答的模型。

遇到 429 或 529 怎么办?指数退避后重试。SDK 默认就这么做:重试 2 次,初始退避 0.5 秒,遵守 Retry-After。

模型:jev-1.13.0 · 模型与价格

相关

其他语言:English