Jev 替代品
SemIf
不训练新模型——直接读选项 logits
一句话结论
当你已经在自托管一个开源模型、又不想训练任何东西时,SemIf 是对的选择。它在一次 prefill 里从 logits 读出选项概率——没有输出 token、没有 JSON 解析、没有重试。在对齐的 102 行子集上,它与 Jev 的一致率为 0.845,Jev 自身 0.883——是真实复刻,但不等价。
SemIf 什么都不训练。它拿一个你已经在跑的开源模型,你声明选项,它直接从 logits 里读出各选项概率,而不是让模型把答案写出来。它是"复刻用法而非复刻权重"这一流派最纯粹的体现——而且方法论在小型项目里最严谨:它的 README 在没有可比 Jev 数字时留空白,而不是猜一个。
Read the logits
No new weights. Intercept the model right before it answers and read the probability of each option instead of letting it write.
搜索别名
关键规格
- Licence
- MIT
- Author
- Theo Lee
- Backbone
- 冻结的 Qwen3.5-4B —— 完全不微调
- Size
- 量化后约 3.01GB(Q4 GGUF)
- Latency
- RTX 3090 上 21 个二值判定 1.023s · 比生成同样答案的 JSON 快 5.21 倍
- Wire format
- 自带 fixture 测试框架;不是 /v1/systemone 服务
- Install
- 见仓库
SemIf 对 Jev
SemIf 的 README 异常克制:没有可比 Jev 数字的地方,它打印一个短横而不是估算值。下面的一致率来自两个系统都作答过的 102 行子集。
| SemIf 对 Jev | SemIf | Jev |
|---|---|---|
| 与已公布 Jev 的众数一致率 | 102 行对齐子集上 0.845 | 0.883 |
| 自建判定集 | 0.813 | 0.965 |
| 每个决策的输出 token | 0 —— 概率是读出来的,不是写出来的 | 0 |
| 是否需要训练 | 不需要,复用你已在服务的模型 | 闭源权重,RLCD 训练 |
| 21 个判定的延迟 | 直读 logits 1.023s,生成 JSON 5.332s | 托管 API 一次往返 |
什么时候该选 SemIf
当你已经在为开源大模型付 GPU 钱、又不想付第二遍——一遍跑模型,一遍让它把 JSON 写出来再解析回分支逻辑——就该用 SemIf。在项目自己的实测里,把一段长 state 复用于多个判定,吞吐从每秒 2.33 个决策提到 20.03 个,这一个数字就说明了全部理由。
什么时候该放弃它
别指望它是开箱服务:SemIf 是一套带 fixture 的读出范式,不是 `/v1/systemone` 服务端,接入意味着采用它的测试框架。也别用它做需要真正推理的题——它读的是一个 4B 模型的下一 token 分布,多跳能力有硬上限。另外,在你用自己的留出集拟合温度之前,把它给出的概率当作未标定的。
三步接入 SemIf
# SemIf 不生成答案,它给选项打分。
#
# 直读 logits : 1.023s,0 输出 token(21 个判定)
# 自回归 JSON : 5.332s,111 输出 token
#
# 典型接法:保留你现有的推理服务,
# 声明选项集合,读取受限 softmax。
options = ["safe", "injection", "jailbreak"]
probs = read_option_logits(
model=serve("Qwen/Qwen3.5-4B"),
state=untrusted_input,
question="这段负载属于哪一类?",
options=options,
)
decision = max(probs, key=probs.get)
if probs[decision] < 0.85:
decision = "human_review" # 未标定的阈值不要直接上线关于 SemIf 的常见问题
SemIf 和 OpenJev 是同一个东西吗?
以前是。SemIf 旧名就叫 OpenJev,而如今 OpenJev 这个名字太拥挤——至少七个互不相关的仓库在用它——所以项目改了名。请始终写 SemIf,并且不要在不注明作者的情况下讨论笼统的"OpenJev"。
SemIf 需要训练吗?
不需要,这正是它的全部意义。它读取模型本来就赋予每个选项 token 的概率,因此质量上限就是那个冻结基座模型的表达能力。如果 0.845 的一致率对你的场景不够,解法是换更强的基座或做微调,而不是继续加 SemIf。
为什么读 logits 比要 JSON 快?
因为生成里最贵的部分是产出 token。读 21 个选项概率只要一次 prefill;让同一个模型写出 21 个答案的 JSON 数组,在项目实测里要 111 个输出 token、5.332 秒,而直读是 1.023 秒——同样的决策,差 5.21 倍。
SemIf 需要什么硬件?
参考配置是一张 RTX 3090 以 BF16 装下 4B 模型。此外还有 llama.cpp 的 CPU 后端、面向 Apple Silicon 的 MLX/MPS 支持,以及能在浏览器标签页里跑的 WebGPU demo——GPU 是方便,不是必须。
来源
- TheoLeeCJ/SemIf-OpenJev —— 含 fixture 与计时的 README
- 开源 Jev 替代品盘点——SemIf 章节
- 《OpenJEV 已分裂为四条路线》——直读 logits 一派
本页所有对比数字均为第三方公开口径或对公开仓库的阅读,不是本站实测。我们没有对 TypeSafe Jev 本体做过实测,且其主客户协议禁止利用其输出开发同类产品。