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.

搜索别名

SemIfsemifSemIFSemIf-OpenJevOpenJev(旧名)

关键规格

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 对 JevSemIfJev
与已公布 Jev 的众数一致率102 行对齐子集上 0.8450.883
自建判定集0.8130.965
每个决策的输出 token0 —— 概率是读出来的,不是写出来的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

01在已有硬件上跑一个冻结的开源模型——项目的参考配置是单张 RTX 3090 加 Qwen3.5-4B。
02声明你的选项,在一次 prefill 里读它们的 logits,而不是让模型吐出一个 JSON 答案数组。
03在自己的标注集上验证一致率。公开的 0.845 来自 102 行对齐子集,你的领域可能差得多。
python / 读出而非生成
# 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 是方便,不是必须。

来源

本页所有对比数字均为第三方公开口径或对公开仓库的阅读,不是本站实测。我们没有对 TypeSafe Jev 本体做过实测,且其主客户协议禁止利用其输出开发同类产品。