深入解读 Jev 模型:毫秒级决策、零输出 Token 计费与生产边界
去掉了自回归逐字生成循环,输入每百万 Token 计费 $0.042,输出 Token 零元。端到端响应 57 到 200 毫秒。 这篇从经济学机制、底层 Logits 投影原理、20 行本地实测代码、压测与失败模式,完整拆解单步判别模型的工程边界与混合路由降本实操。
理解 Jev
在过去的项目里,为了优化接口延迟花过不少功夫。用户对响应速度高度敏感。系统一旦超过一两秒没动静,看起来就像坏了一样。现实情况是,很多大模型为了做推理思考,响应动辄两三秒甚至更久。工程上尝试了各种手段优化,但大模型逐字做自回归生成的机制摆在那里,延迟很难压缩到极致。
很多时候,系统并不需要一个能写长篇大论的推理模型。在做状态判断或者枚举分类时,响应速度远比生成能力更重要。这就是需要讨论 Jev 的原因。
通用大模型的方向在业界已经相对明确,新团队必须寻找差异化的切入点。Jev 主打极速响应。它去掉了自回归生成循环,输入按 Token 计费,输出 Token 则是零元。它本质上是一个判别器模型,就像没有人会为随机森林的输出结果按 Token 买单一样。
定位与原理
Jev 本质上是一个面向状态评估的统计分类器。大模型擅长生成,Jev 专注于判别。它把传统分类任务用大模型处理时既慢又贵的痛点,做到了低成本和高速度。
它的名字取自经济学中的杰文斯悖论(Jevons Paradox)。当某种资源的利用效率大幅提升时,其总消耗量往往不会缩减,反而会成倍增长。一旦单次模型决策的成本下降上百倍,系统里原本写死 if-else 的地方,可能都会考虑接入模型来做动态判断。
Jev 的核心定位是机器对机器的状态评估。它不回答用户提问,也不生成自然语言。它的职责是根据输入上下文,在几十毫秒内返回一个预定义的离散标签,将上游请求分流到下游分支。这类似于物流流水线上的分拣模型。
官方借用了认知科学的“双系统”概念:让昂贵的前沿大模型负责慢速的深度推演(System 2),让 Jev 充当快速廉价的反射弧(System 1)。在需要做前置过滤或路由分流时,用小判别模型就能搞定,不需要让生成模型全程陪跑。
为了追求速度,Jev 舍弃了文本生成,只保留三种输出原语:
choice:在给定的枚举列表中完成多选一路由。score:在有序离散区间内打分(例如 0 到 10 的数值评分)。noul:输出二分类概率(布尔判断,如 true / false 或 yes / no)。
在工程调用上,TypeSafe AI 接入了 Cloudflare Workers AI 与 Vercel AI Gateway。走 Vercel AI SDK 时,用 experimental_evaluate 声明判断问题即可:
import { experimental_evaluate as evaluate } from 'ai';
const result = await evaluate({
model: 'typesafe-ai/jev',
state: contextText,
questions: {
action: {
type: 'choice',
instructions: 'How should this request be handled?',
criteria: {
allow: 'Safe to proceed',
block: 'Should be blocked',
escalate: 'Needs human review',
},
},
},
});它没有超越统计学的理论创新,能力边界也很窄:无法完成长文本创作、代码编写、多轮对话记忆,更解不了长步骤数学推导。但它证明了一点:不是所有任务都必须调用高价生成模型,专长于速度的判别模型同样有其工程价值。
底层机制
传统大模型处理分类或决策,必须启动自回归解码循环,逐个生成 Token。整个过程通常耗时 2 到 5 秒,下游还得小心处理 JSON 字符串是否闭合。Jev 的生成步数为零。输入提示词与候选动作后,底层网络只执行单次前向传播,输出在数学上只是一次矩阵乘法的副产物。
开源社区验证的两条复现路径:
模型在单次前向推导后,直接提取序列最后一个位置的 Logits,仅筛选出候选标签对应的 Token ID,做局部 Softmax 归一化计算置信度。
# harshatheg/Qwen-2.5-1B-RLCD
logits = model(input_ids).logits[:, -1, :]
candidate_logits = logits[:, candidate_token_ids]
probs = torch.softmax(candidate_logits, dim=-1)把输入上下文作为前提(Premise),候选动作作为假设(Hypothesis)。分类头直接输出蕴含、中立与矛盾三分类得分,取蕴含概率做决策。
# AlexWortega/openjev cross-encoder scoring
inputs = tokenizer(premise=state, hypothesis=action, return_tensors="pt")
logits = cross_encoder(**inputs).logits
entailment_score = logits[:, ENTAILMENT_IDX]如果单次前向每次只能评估一个选项,面对多选项时依然不够快。Jev 依靠 Decoder-only 架构的 KV Cache 前缀缓存共享来化解瓶颈。面对长文本上下文,模型在 Prefill 阶段只计算一次并存入显存,后续几十个候选选项共享同一份前缀缓存指针,只并行计算各自少量 Token 的注意力。这使得评估几十个维度的总耗时几乎等同于单次评估。
普通小模型为什么不能直接套用这套逻辑?Softmax 输出的分数只是指数归一化的相对值,不等于真实概率。未经专门校准的模型普遍存在严重的过度自信,即使预测错误,Softmax 也可能给出 0.99 的高分。工业级系统不能直接依赖这种裸露数值。
Jev 引入了面向校准决策的强化学习(RLCD)。该训练方式针对预期校准误差(ECE)进行优化。通过样本校验与惩罚,确保模型输出 0.8 的置信度时,在统计上真实对应约 80% 的准确率。
第一,无关选项存在干扰。实验显示在既有选项后追加无关项,原最优选项的优势 log-odds 会下滑。候选项之间存在注意力交互,并不是互相独立的。
第二,物理顺序敏感性。由于单向注意力机制,排在后面的 Token 能看到前面的上下文。建议将依据放在共享的 Prompt 上下文(State)中,注意力分配才会更均衡。
代码实测
零 Token 生成机制在本地用 20 行 Python 脚本就能跑通。加载参数量只有 5 亿的开源小模型 Qwen2.5-0.5B-Instruct,给一段带有候选标签的意图判断 Prompt,绕过生成循环,直接提取末位 Logits:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "Qwen/Qwen2.5-0.5B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float16, device_map="auto")
prompt = "判断用户意图:'我想退货'。选项:[投诉, 咨询, 售后]"
candidate_words = ["投诉", "咨询", "售后"]
candidate_ids = [tokenizer.encode(w, add_special_tokens=False)[0] for w in candidate_words]
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
logits = model(inputs.input_ids).logits[0, -1, candidate_ids]
probs = torch.softmax(logits, dim=-1)
for word, prob in zip(candidate_words, probs):
print(f"{word}: {prob.item():.4f}")如果让同一个 0.5B 模型按常规方式生成 JSON,需要自回归吐出数十个 Token,耗时通常在一两秒左右,且需要额外做 JSON 解析容错。直接提取末位 Logits 的耗时则可以压到 30 毫秒以内。
在边缘计算场景中,通过 Cloudflare Workers 调用 typesafe/jev 接口:
const result = await env.AI.run("typesafe/jev", {
state: ticketContent,
questions: {
is_urgent: {
type: "noul",
instructions: "Does this ticket require urgent attention?",
},
department: {
type: "choice",
instructions: "Which team should handle this?",
criteria: {
billing: "Payments and refunds",
technical: "Bugs and outages",
sales: "Pricing and accounts",
},
},
frustration: {
type: "score",
instructions: "How frustrated is the customer?",
criteria: ["Calm", "Frustrated", "Very angry"],
},
},
});截取本地小模型的末位 Logits 虽然能拿到相对分数,但未校准的 Softmax 分数存在虚假自信问题。当遇到不确定的样本时,微小的 Logits 差距也会被指数放大为 95% 以上的高置信度。自建模型若要依赖置信度做放行拦截,需要在领域数据集上做温度缩放(Temperature Scaling)或后验校准。
压测数据
Archer Hume 针对 Jev 官方接口发起了上万次测试,记录了其在长文本与高并发场景下的实际表现。
长文本扩展测试
| 输入上下文(Tokens) | 中位数延迟 | 极速延迟 |
|---|---|---|
| 360 | 57.5 ms | 44.0 ms |
| 9,796 | 89.0 ms | 81.0 ms |
| 29,835 | 218.0 ms | 211.0 ms |
文本量从 360 增加到近 30,000 Tokens(增长约 80 倍),延迟仅增加约 160ms。非自回归模型没有长文本逐字解码的累加耗时,主要耗时都在一次性的 Prefill 阶段。
高并发问答测试
| 并发问题数量 | 中位数延迟 | 表现特征 |
|---|---|---|
| 1 - 100 | 70.0 - 100.0 ms | 耗时相对平稳 |
| 500 | ~240.0 ms | 延迟温和上升 |
| 1,500 | 610.0 ms | 出现排队与积压 |
从 1 到 100 个问题,延迟保持在 70ms 到 100ms 区间。底层复用了 KV Cache 共享前缀,不需要为公共上下文重复做计算。
速度快不代表判断质量无损。Richard Bäcker 在开源项目 jev-on-a-laptop 中对比发现:TypeSafe 官方评测中,Jev 与前沿模型共识的一致性是 86.6%;同一批题目上本地 Qwen2.5-7B 裸 Logits 只有 73.8%,且预测错误时 Softmax 置信度依然经常高于 0.90。
失败模式
单步分类模型在特定场景下有清晰的局限性:
单步前向推导无法完成多层因果逻辑推理。在钓鱼邮件基准测试中,面对包含多层转折与伪造身份的邮件,支持思维链的 Claude Haiku 准确率明显优于 Jev。一旦语义欺骗嵌套超过两层,单步模型往往力不从心。
自回归模型的单向注意力机制决定了靠后的 Token 能完整聚合前序信息。当参考依据放在候选项之后时,准确率较高;调整到开头或中间,准确率出现下滑。依据建议放进共享 State,或放在选项列表末尾。
向枚举列表中加入无关选项(例如“天气”),原有业务选项之间的相对对数几率比会出现下滑。候选项并非完全独立打分,候选池内部会竞争注意力。
自建开源小模型的裸 Logits 置信度虚高。如果业务网关依据高置信度直接放行,虚高数值会导致错误分类直接穿透网关。
Jev 没有自回归解码通道,无法生成连贯的自然语言句子,不能承担异常日志总结、代码编写或客服回复等任务。拦截后需要向用户解释原因时,必须交给后续生成模型。
四种模式
在实际工程落地中,单步判别模型通常与规则引擎及大模型组合使用:
1. 推测性扇出
长文本上下文在显存中只做一次 Prefill 计算,后续十几个离散问题并发挂载在同一份缓存上,各自执行轻量前向计算,多维度标签提取耗时被压缩到接近单次评估。
const profile = await jev.evaluateBatch({
context: rawTicketContent,
questions: { is_urgent: "noul", sentiment: "score", dept: { type: "choice", options: DEPTS } },
});2. 置信度门控
让预测结果决定业务动作,让置信度决定自动化等级。高置信度自动执行,中置信度异步告警抽检,低置信度阻断交由人工或生成大模型。
if (result.confidence >= 0.90) return autoExecute(result.answer);
if (result.confidence >= 0.60) return logAndAlertAsyncReview(result.answer);
return circuitBreakToHuman(requestId);3. 复合评分
模型只对单一维度给出 0 到 10 的离散分,加权公式与安全硬规则全部交由后端确定性代码执行。调整策略时修改本地权重,无需重训或重调 Prompt。
scores = {k: jev.score(text, metric=k) for k in ["clarity", "depth", "factuality"]}
composite_score = sum(scores[k] * WEIGHTS[k] for k in WEIGHTS)
is_qualified = composite_score >= 80 and scores["factuality"] >= 64. 分层分类
当标签数达到几百上千时,一次性传入会导致注意力稀释。先在顶层大类选出 Top-K 分支,再沿着胜出分支细化到二级子类,逐级剪枝。
top_roots = jev.top_k(product_text, candidates=ROOT_CATEGORIES, k=2)
sub_candidates = [leaf for root in top_roots for leaf in TAXONOMY[root]]
final_leaf = jev.evaluate(product_text, candidates=sub_candidates)生产架构
在生产架构中,将低时延的判别模型作为前置网关,可以拦截大量不必要的生成请求。
成本与延迟对比测算
以日均 10 万次请求的在线服务为例做测算(假设输入均长 800 Token,输出均长 400 Token,LLM 采用主流前沿模型 $3/$15 计价口径):
| 架构方案 | 日均 LLM 调用 | 日推理费 | 月度总支出 | P50 延迟 | P99 延迟 |
|---|---|---|---|---|---|
| 全量 LLM 直连 | 100,000 次 | $840.00 | $25,200.00 | 1,800 ms | 4,200 ms |
| 判别前置 + 混合路由 | 20,000 次 | $171.36 | $5,140.80 | 70 ms | 2,100 ms |
| 优化幅度 | -80.0% | -79.6% | -79.6% | -96.1% | -50.0% |
约 80% 的常规请求能在前置判别层直接分流、命中本地缓存或安全阻断,透传至生成大模型的调用量大幅缩减。 在实际业务中,你可以通过 TrakToken 的 场景成本计算器 输入你的实际请求量和分流比例,对比自建前置模型与纯 API 调用的月度 ROI。
三种网关形态与落地案例
- 拦截器形态:在流量入口对恶意输入做毫秒级预筛,直接切断注入攻击。例如开源项目 pi-warden 用于拦截 Agent 运行时的文件覆写与危险终端命令。
- 路由器形态:识别用户意图,将高难度任务导向重型推理集群,简单请求分发给轻量快模型。例如 jev-router 与 jev-codex-router。
- 守卫形态:在 Agent 执行 Shell 命令或修改敏感配置前进行动态鉴权。例如 pi-jev-auto-mode 用 Jev 语义审批 Pi 的 bash、write、edit 调用。
接入层挂载 1B 到 3B 参数量的本地轻量模型(如 Qwen2.5-1.5B),关闭自回归生成,只执行确定性的单步前向推理。单卡吞吐量大幅提高,网关可以在 10 到 30 毫秒内完成安全检查与意图打分。 上线前建议开启影子流量(Shadow Traffic)验证,与现有主流程决策对比,置信度表现稳定后再正式切流。
生态地图
开源社区迅速展开了多维度的复现与改造。从几千万参数的紧凑网络到数十亿参数的模型,均有单步决策适配:
| 项目 / 仓库 | 底座架构 | 核心特性 |
|---|---|---|
| harshatheg/Qwen-2.5-1B-RLCD | Qwen2.5-1.5B | 并行约束解码(PCD),免重新训练,单步输出离散分布 |
| AlexWortega/openjev | Qwen3.5-4B / MoE | 基于 NLI 序列分类,提供 35B-A3B MoE 配套方案 |
| rlcd-modernbert-151m | ModernBERT 151M | 支持 25 个候选槽位,延迟小于 35ms,适配边缘部署 |
| Mapika/decider-2b | Qwen3.5-2B-Base | 基于数十万标注样本完成全参数微调 |
| TheoLeeCJ/openjev | MiniCPM5-2B | 浏览器端 WebGPU 本地运行,无需后端服务 |
| vinnylarouge/jevlike | 微型字节编码器 | 采用交叉注意力解耦选项间干扰 |
| system-one-mini | 自研网络 (69M) | 极低算力下的单步反射验证模型 |
选型建议
架构设计首先要明确业务需要的是快速直觉判断还是深度因果推演。
三种范式权衡表
| 评估维度 | 传统 BERT 分类器 | 生成式大模型 (LLM) | Jev / 单步判别模型 |
|---|---|---|---|
| 运行时灵活性 | 较低(标签固定,增删需重训) | 极高(提示词自由定义输出) | 较高(运行时动态传入候选集) |
| 通用常识储备 | 较弱(依赖垂直领域标注) | 极丰富(海量通用常识) | 丰富(继承大模型预训练常识) |
| 上下文长度 | 短(通常 512 Tokens) | 极长(可达数万至百万) | 中长(依赖底座长文本缓存) |
| 推理延迟 | 极快(通常 < 20ms) | 较慢(数百毫秒至数秒) | 快(20ms 至 200ms) |
| 置信度可靠性 | 需额外校准 | Logits 虚高较普遍 | 经 RLCD 校准后较可信 |
| 多步因果推导 | 无 | 极强(支持思维链推理) | 弱(仅限单步模式匹配) |
- 入口处的意图识别与路由分发
- 高并发内容合规与注入拦截
- 敏感 API 与终端命令权限审查
- 业务流程中固定的枚举状态流转
- 需要向用户直接输出自然语言解释
- 依赖两步以上因果推理的任务
- 涉及多层伪装的安全风控
- 缺乏明确候选选项的开放式生成
两点工程实践建议:
第一,分类准确率要求极高且依赖多步推导的任务,建议直接使用具备思维链的大模型。单步推导缺少中间过程,遇到多层转折容易失准。
第二,冷启动阶段若缺少标注数据,可以先用通用大模型的 Few-shot 提示词跑通业务流程,顺带沉淀真实访问日志。等数据积累到一定规模并完成标注后,再考虑用单步判别模型做替换或蒸馏。
参考资料
- Introducing System One Models and Jev - TypeSafe 官方发布说明
- Jev’s Architecture Unmasked - Archer Hume 延迟、选项顺序与压测报告
- rorshopping/jev-on-a-laptop - 本地 Qwen Logits 与官方工作流参考答案一致性对比
- anisselbd/jev-phishing-bench - 钓鱼邮件单步判定与思维链推理对比
- harshatheg/Qwen-2.5-1B-RLCD - Logits 掩码与并行约束解码复现
- AlexWortega/openjev - 基于 Qwen 的 NLI 交叉编码器实现
- DevMortimer/pi-warden - Pi 命令守卫网关
- jomatsu/pi-jev-auto-mode - 用 Jev 语义审批 Pi 的 bash / write / edit