Jev 是什么?可以解决哪些问题?
文 | AI编程实践
一个售后 Agent 准备调用退款工具。真正执行前,Harness 需要确认用户是否明确授权、金额是否一致、证据是否充分、这次动作要不要人工审批。工具返回后,还得判断“请求已接收”究竟算成功,还是仍要等待支付渠道回执。
这些判断交给规则,覆盖不了自然语言中的含糊地带;全部交给 LLM Judge,又会增加延迟、成本和波动。线上系统往往只好抽样评测,真正危险的那次调用却可能没被抽中。
2026 年 9 月,TypeSafe AI 发布了 Jev。它不写解释,也不生成下一段文字,只接收运行状态和类型化问题,返回选项、分数或是非概率。这个设计提供了一种新的可能:把 Judge 从离线报表移进 Agent 循环,让它参与路由、工具风险判断和结果验收。
但先把边界说清楚。Jev 不是不会犯错的裁判,公开资料也不足以还原它的神经网络结构。它真正值得讨论的地方,是把“生成一段评语”改成了“计算一个可以被软件直接消费的决定”。
一、LLM Judge 的问题不只是贵
LLM-as-a-Judge 解决了很多传统指标解决不了的问题。它能理解“2 美元”和“2.00 USD”语义相同,也能判断一段回答是否引用了证据、有没有漏掉用户约束,甚至能比较两条不同的 Agent 路径谁更合理。
代价也很具体。
第一,同一份 Trace 和 Rubric 重复运行,分数可能变化。温度设为零也不能保证供应商后端、模型版本和并行执行完全不变。上线准出如果卡在 0.8 分,一次 0.79、一次 0.82 会让相同版本得到不同结论。
第二,Rubric 越写越长。团队想同时检查事实正确性、证据完整性、语气、工具选择和安全风险,常见做法是把五项标准写进一个大 Prompt,再让 Judge 生成理由和 JSON。每多一个维度,都要承担输入与输出 Token;多个维度还可能相互干扰。
第三,在线评测很难覆盖全部流量。几秒钟的 Judge 延迟可以接受用于夜间回归,却不能轻易放进每次工具调用之前。生产系统最后只评 1% 或 5% 的 Trace,得到的是观测样本,不是运行时控制。
还有一个经常被忽略的问题:谁来评测 Judge?一个解释写得很像样的模型,仍可能稳定偏爱更长的回答,受候选顺序影响,或对同模型生成的答案更宽松。Judge 的输出不是标签真值,它也是一个需要校准和监控的模型结果。
二、Jev 到底是什么
TypeSafe 把 Jev 称为 System One Model。借用“快思考”的名字容易让人产生心理学联想,工程接口其实更简单:一次请求包含共享状态 state和若干问题 questions;每个问题提前声明答案类型;返回值直接落在该类型允许的空间中。
model: jev-latest
state:
user_request: 请把这笔订单原路退款
order_amount: 899.00
proposed_tool_call:
name: create_refund
amount: 899.00
evidence:
- user_confirmed_at: 2026-09-22T10:31:00+08:00
questions:
authorization_clear:
type: noul
instructions: 用户是否明确授权执行这次退款?
risk_level:
type: choice
criteria:
low: 信息完整,且动作可安全执行
medium: 存在可澄清的不确定信息
high: 可能越权、重复退款或造成不可逆损失
evidence_quality:
type: score
levels:
- 不足
- 基本充分
- 充分且来源一致
Jev 暴露三种问题原语:
它最适合答案空间有限、判断带有语义、调用频率又很高的问题:
长文本生成、开放式规划和需要多步推导的问题不适合直接交给 Jev。权限、金额和 Schema 这类可以精确计算的硬条件也应继续使用代码。
多个问题共享同一份 State,并在一次请求中求值。对 Harness 来说,这一点比“少写几行解析代码”更重要:同一条 Trace 可以同时产生多个独立反馈键,不必让一个生成式 Judge 依次写完五段分析。
三、怎样开始使用 Jev
Jev 的调用并不复杂,真正费功夫的是定义问题。先判断任务是否适合:答案空间能否提前列出?一个熟悉业务的人能否在几秒内作出判断?程序拿到概率后,是否知道下一步该做什么?三个答案都是“是”,才值得继续。
“分析退款申请并决定最佳处理方案”太宽了。可以拆成几项:用户是否明确要求退款、订单属于哪类退款原因、证据充分度处在哪个等级。规划方案和向用户解释原因仍交给生成式模型。
3.1 从 Playground 到第一次 API 调用
TypeSafe 提供 Playground,可以先粘贴一段 State,再添加 Noul、Choice 或 Score 问题。确认返回结构符合预期后,从控制台取得 API Key,把它放进 TYPESAFE_API_KEY环境变量。
REST 接口是:
POST https://api.typesafe.ai/v1/systemone
Authorization: Bearer <API_KEY>
Content-Type: application/json
Python SDK 需要 Python 3.10 或更高版本:
pip install typesafe-sdk
下面的例子复用退款场景。state使用结构化对象;每条 instructions都明确指出要读取的字段。Question ID 主要供代码索引,不能用缩写代替完整问题。
from typesafe_sdk import Choice, Noul, Score, TypeSafeClient
state = {
"user_message": "行,就按你说的原路退回吧。",
"proposed_refund": {
"amount": 899.0,
"method": "original_payment",
},
"evidence": {
"order_paid": True,
"previous_refund_receipt": None,
},
}
with TypeSafeClient() as client:
response = client.system_one(
state=state,
questions={
"authorization_clear": Noul(
instructions=(
"Does `user_message` clearly authorize the refund "
"described in `proposed_refund`?"
),
),
"risk_level": Choice(
instructions=(
"What is the execution risk of `proposed_refund`, "
"given `evidence`?"
),
criteria={
"low": "Evidence is complete and no conflicting effect exists.",
"medium": "Some information needs confirmation.",
"high": "The action may be unauthorized or duplicated.",
"other": "The state does not fit the listed conditions.",
},
),
"evidence_quality": Score(
instructions="How complete is `evidence` for this refund?",
criteria=[
"Insufficient",
"Usable but incomplete",
"Complete and internally consistent",
],
),
},
)
3.2 读取结果时,不要混淆概率与 confidence
Noul 直接返回“是”的概率,没有单独的 confidence字段。Choice 和 Score 会返回完整概率分布,并提供由分布形状计算出的 confidence。一个 Choice 的最高选项是 low,但概率分散在 low、medium和 high之间时,代码仍应把它视为不确定。
authorization = response.answers["authorization_clear"].noul
risk = response.answers["risk_level"]
evidence = response.answers["evidence_quality"]
# 以下阈值仅用于说明分流方式,生产值必须用自己的标注集校准。
if authorization < 0.95:
route = "ask_user_to_confirm"
elif risk.choice == "high" or risk.confidence < 0.80:
route = "human_review"
elif evidence.score < 1.5:
route = "collect_more_evidence"
else:
route = "continue_to_deterministic_checks"
这段代码没有直接执行退款。它只把模型判断转换成 Harness 分支,金额、权限、幂等键等硬约束仍由确定性代码检查。
3.3 Question 设计比 Prompt 技巧更重要
一条 Question 只判断一件事。Choice 的选项要覆盖真实输入空间;无法穷举时加入 other或 none_of_the_above。Score 的每个等级要能被业务人员区分,不能只写“差、一般、好”。Noul 中 0.5表示是与否接近,不表示程度居中;衡量程度应改用 Score。
同一请求里的 Questions 相互独立,都读取原始 State。若第二个问题必须依赖第一个答案,例如先识别退款类型,再读取对应政策,则由代码发起第二次请求。没有真实依赖的判断应放在一次请求中并行完成。
3.4 接入生产前,先让它只观察
上线顺序可以很保守:先在 Playground 验证结构;再用历史 Gold Set 调整 Question 和阈值;接着进入 Shadow Mode,只记录建议分支;最后选择低风险意图做小流量控制。每一步都保留旧 Judge 或人工结果用于对照。
四、所谓“原理”,公开到哪一层
讲 Jev 原理时,需要把可观察的系统行为和模型内部结构分开。
4.1 可以确认的工作方式
Jev 不做自回归文本生成。传统 LLM Judge 要逐 Token 生成分析、分数和结构化结果;Jev 的输出空间事先由问题类型限定,多个问题通过 TypeSafe 所称的 Parallel Sampler 并行返回。
TypeSafe 还公布了一种名为 Reinforcement Learning for Calibrated Decisions(RLCD)的训练方向。厂商称,它的优化目标是让预测概率与真实命中率相符,而非追求更讨人喜欢的回答。如果一批 0.8概率的判断最终约有 80% 正确,这组概率才具有可用的校准意义。
类型约束也改变了失败方式。Choice 不会突然返回选项集合之外的一篇散文,Noul 不会因为 JSON 少了一个括号而解析失败。程序可以直接消费结果,不需要从自由文本中再提取一次决定。
4.2 目前不能确认的内部结构
截至本文写作时,TypeSafe 没有公开 Jev 的参数量、网络层数、基础架构、模型权重、完整训练数据或可复现的 RLCD 算法论文。因此不能根据“非自回归”“并行输出”就断言它是 Encoder、BERT 变体、Reward Model,或某种蒸馏过的 LLM。
厂商使用了“不会 hallucinate”的说法,也必须缩小解释范围。更准确的表述是:Jev 不会生成类型之外的答案。它仍可能在允许的类型里选错。例如工具调用其实高风险,它完全可能返回 low;这个结果格式正确,语义却错了。
类型安全解决接口可靠性,校准描述概率质量,准确率衡量判断对错。三者不能互相替代。
Jev 的公开资料足以讨论怎样接入系统,却不足以完成一次模型架构复现。文章中的“原理图”因此只画请求、求值和输出契约,不画未经公开的神经网络层。
五、Jev 给 LLM Judge 带来了哪些新参考
比推理速度更值得关注的是,Jev 迫使团队重新设计 Judge。
5.1 把大 Rubric 拆成原子问题
“请综合判断这个 Agent 是否表现良好”很难校准。表现不好可能因为检索错了、工具选错了、回答没引用证据,也可能只是语气生硬。一个总分掩盖了错误来源。
类型化 Judge 更适合把 Rubric 拆开:
feedback_keys:
grounded: 回答中的事实是否都能在证据中找到?
authorization_clear: 用户是否明确授权了写操作?
tool_selection: 所选工具是否适合当前意图?
effect_confirmed: 工具回执是否证明外部动作已经完成?
user_goal_met: 最终结果是否满足用户目标?
拆开以后,每项可以有不同阈值、负责人和升级策略。grounded=0.72也许只触发重查证据,authorization_clear=0.72则应阻止退款执行。
5.2 从抽样报表变成全量反馈键
低延迟、低单次成本让“每条 Trace 都打分”成为可讨论的方案。生产看板不再只有平均成功率,还能按意图、工具、模型版本和风险等级观察每个反馈键。
这不代表一上线就把 Jev 放进同步阻断链路。更稳妥的顺序是先做异步全量评分,验证吞吐和漂移;再把已经校准的少数指标放入实时告警;最后才考虑让高置信度结果控制执行分支。
5.3 Judge 评测要分开看准确、稳定和校准
LangChain 公布的一次 Jev-as-a-Judge 实验冻结了五条天气 Agent Run,让四种 Judge 各重复判断 100 次。Jev 在这组样本上与一位人工评审者的二元标签全部一致,连续分数方差也明显更低。
这个结果只能算早期信号。五条 Run、单个人工 Oracle 不足以证明 Jev 在退款、代码、安全或多语言任务上同样领先。它倒是示范了正确的 Judge 测法:先冻结被评对象,再分别测标签准确率和重复评分方差;否则 Agent 和 Judge 同时变化,很难知道波动来自哪里。
概率模型还需要校准曲线。把样本按预测概率分桶,比较每个桶的实际正确率;一旦业务、语言或攻击方式变化,原来的 0.8未必仍代表 80% 的命中率。
5.4 允许 Judge 明确“不够确定”
生成式 Judge 常被 Prompt 逼着给出一个结论。概率输出让系统可以保留灰区:高于 0.95 自动通过,低于 0.2 自动拒绝,中间区域交给 LLM 或人工。
阈值不能全局统一。退款漏放一次的代价远高于把普通查询误送人工,Harness 应根据动作影响、可逆性和补偿能力设置成本敏感阈值。
六、Jev 与 BERT 到底有什么不同
“不生成文本,只做判断”很容易让人想到 BERT。这个联想有一半正确:两者都适合把输入映射到有限输出。另一半需要谨慎,因为 Jev 的内部架构没有公开,不能从产品行为倒推它就是一种 BERT。
6.1 传统 Fine-tuned BERT:一个任务训练一个判别器
BERT 是双向 Transformer Encoder。常见用法是在预训练模型上增加分类头,再用业务标注数据微调。例如训练一个退款意图分类器,标签固定为 refund、exchange、consult。
它的优势是模型与数据都可以掌握在自己手中:本地部署、延迟稳定、成本可控。缺点也明显。任务、标签或输入结构变化后,团队通常要重新准备数据、训练、验证并发布模型。一个 PII 检测器不会自动变成证据充分性 Judge。
6.2 BERT-as-a-Judge:为“答案是否正确”训练通用 Encoder
2026 年的 BERT-as-a-Judge 论文把 Judge 做成了专用 Encoder。输入由 Question + Candidate Answer + Reference Answer组成;输出是候选答案是否正确的概率。
论文从 EuroBERT 210M 初始化,使用约一百万条合成标注三元组做二分类微调。训练标签由 Nemotron-Super-v1.5 生成,并用 3,212 条人工标注检查,人工与合成标签平均一致率为 97.5%。论文报告该模型在 Apple M1 CPU 上约 200ms 处理一个样本,并在多项客观答案任务上达到接近更大生成式 Judge 的准确率。
它解决的是一个明确问题:答案语义正确,却因为格式不符合正则而被错判。适用边界同样明确。论文主要研究英语、有参考答案、正确性可以客观定义的多选、阅读理解和数学任务;开放式写作、代码生成、指令遵循、多模态和无标准答案的 Agent 行为不在已验证范围内。
6.3 四类 Judge 放在一起看
BERT-as-a-Judge 和 Jev 的共同点,是把许多评测问题从文本生成改回判别。差别在于前者是公开可训练的参考答案 Judge,后者提供运行时可组合的类型化问题接口。生成式 LLM 则保留了解释和处理开放任务的能力。
没有一种方案应该独占整条评测链路。
七、Harness 会因此发生什么变化
过去的 Agent Loop 常把所有智能判断都交给同一个主模型:它理解 Query、选择模型、挑工具、判断结果、决定是否继续。主模型既是运动员又是裁判,Context 越积越长,每一个小判断都要付出一次生成成本。
引入快速决策模型后,Harness 可以拆成两个平面。
慢速认知面负责规划、开放推理、异常分析和面向人的文本。它允许调用更强的生成式模型,也接受较高延迟。
快速决策面负责频繁而边界清楚的判断:意图与模型路由、工具风险、授权是否清晰、证据是否足够、工具结果是否与预期一致、循环是否该停止。输出直接进入状态机。
引入 Jev 后,Harness 仍需要保留四级路径:
确定性代码先检查权限、金额上限、参数 Schema、幂等键和业务不变量;
Jev 处理授权语义、证据充分性、风险分类和结果一致性;
概率落在灰区、多个问题互相冲突,或需要书面理由时,升级给生成式 LLM;
高影响且不可逆的动作仍由人审批。
以退款为例,amount <= refundable_balance必须由代码判断,不该交给任何模型。用户那句“行,就按你说的办”是否构成对原路退款的明确授权,可以让语义 Judge 评分。但只要订单涉及大额、跨境或已经出现一次外部回执,Harness 就应提高阈值或直接进入人工审批。
八、实时 Judge 进入执行链路后,会增加哪些风险
离线 Judge 判错,通常污染一张评测报表;在线 Judge 判错,可能改变模型路由、阻止正常工具,甚至放行高风险动作。位置变化让它成为生产依赖。
8.1 稳定不等于正确
低方差只能说明相同输入得到相近结果。训练偏差、问题定义错误或新型攻击都可能让模型稳定地判错。因此每个反馈键都要与人工 Gold Set 比较,并按场景看假阳性和假阴性,不能只看总体准确率。
8.2 问题本身可能写错
“这个动作安全吗?”没有说明对谁安全、允许哪些副作用、以什么时间窗口判断。类型化输出减少了解析错误,却不会自动修好含糊的 Question。问题定义需要版本化、评审和回归测试,地位应接近一条生产规则。
8.3 State 可能被污染
如果把网页内容、工具回传和用户文本未经隔离地拼进 State,攻击者可以尝试用自然语言影响 Judge。Harness 要标注每个字段的来源和可信级别,问题说明与被评内容分区,敏感字段先裁剪,再调用外部服务。
8.4 概率不能直接当业务风险
risk_high=0.1是模型对标签的概率,不是“事故损失只有 10%”。最终分支还要结合金额、可逆性、用户等级、补偿能力和法规要求。模型给概率,代码计算决策。
8.5 托管服务带来数据与可用性边界
LangSmith 在 2026 年 9 月的接入说明中提醒,TypeSafe 当时没有提供 Zero Data Retention。把完整 Agent Trace 发给 Judge 之前,需要确认数据保留、地域、租户隔离和敏感信息策略。服务不可用时也要有降级路径:回到保守规则、生成式 Judge 或人工队列,而不是默认放行。
九、怎样验证 Jev 是否适合自己的业务
第一步先冻结一批真实 Trace,不改现有 Judge。样本要覆盖正常路径、已知 badcase、权限冲突、工具超时、重复副作用和恶意输入,并由至少两名业务评审者给出标签;有分歧的样本单独保留,不能强行制造唯一真值。
接着让规则、BERT-as-a-Judge、Jev 和现有 LLM Judge 在各自适合的任务上运行。不要拿 BERT-as-a-Judge 去评没有参考答案的创意写作,也不要让 Jev 代替代码计算金额。比较指标至少包括:
上线采用影子模式。Jev 读取生产 Trace 并记录建议分支,但不影响真实执行。等到阈值在独立验证集上完成校准,再选择低风险意图做小流量控制。每一次自动决定都记录:Question 版本、State 来源、模型版本、概率分布、阈值、最终分支和后续真实结果。
有了结果回流,团队才能知道某个 0.92在退款场景里究竟有多可靠,也能在模型或流量变化后重新校准。
十、Jev 会取代 LLM Judge 吗
不会,也没必要。
需要一段可供人阅读的错误分析、需要比较两种复杂方案、Rubric 仍在探索阶段,生成式 LLM Judge 更合适。有稳定参考答案、任务长期不变且需要本地部署,BERT-as-a-Judge 或其他专用 Encoder 更容易掌控。权限、数值和状态不变量继续交给代码。
Jev 补上的是中间那块:判断带有语义,答案空间却可以提前定义;调用量很大,系统又需要概率和低延迟。模型路由、工具风险、结果验收、在线反馈键都属于这一类。
它给 Agent 工程带来的提醒很朴素:不要因为 LLM 能生成任何文本,就让它生成每一个决定。Harness 应根据问题形状分配计算。开放推理留给慢模型,明确判断交给快速决策层,无法承受的风险交给代码和人。
参考资料
TypeSafe AI:Introducing System One Models & Jev TypeSafe AI:Quick start TypeSafe AI:Primitives TypeSafe AI:Confidence BERT-as-a-Judge: A Robust Alternative to Lexical Methods for Efficient Reference-Based LLM Evaluation BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding LangChain:Building a Harness with Jev LangSmith:Jev is now available in LangSmith Evals Jev-as-a-Judge reproducible experiment Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena