【免费下载链接】AnyJev
Turn any LLM into a Jev-style decision model: typed decisions, real probabilities, no training. (continue updating, welcome any issue and PR request)
Tacit 是 AnyJev 的自蒸馏模型系列:让 LLM 用「一次前向」直接回答决策问题——不生成文本、不解析、不训练,从模型下一 token 的分布里读出每个选项的真实概率。本文带你看懂它的工作原理,并汇总 Tacit-1.7B 到 Tacit-9B 共 5 个尺寸在 JevBench 和 bev-decision 上的完整评测数据:一次前向准确率 0.598~0.823,开启自适应推理(adaptive)后最高冲到 0.887。
1. 什么是「Jev 风格决策模型」:30 秒入门
传统用法是:把选项塞进 prompt,让模型输出一段文字,再正则解析出答案——慢、贵,还会解析失败。
AnyJev 的思路是把问题类型化(typed question):选择题choice、判断题yes_no、评分题score。模型只跑一次前向,答案读自「下一个 token 恰好是某个选项标签」的 log 概率,重归一化后就是一份带概率的决策。不生成任何 token,也就没有解析失败一说。
完整流程分四步,图里一眼看完:
| 步骤 | 做什么 |
|---|---|
| ① Ask | 给一段状态(state)+ 一个类型化问题 |
| ② Shift | 选项的每一种轮换顺序都问一遍,抵消位置偏差 |
| ③ Correct | 除以无标签估计出来的「标签先验」 |
| ④ Decide | 输出一个自带概率分布的决策 |
两条路线可以选:
- 免训练
Decider(L0 档):任何开源因果 LLM 即插即用,零训练、零标签; - 自蒸馏
Tacit:本文主角。用自蒸馏训练出来的检查点,模型学会「一次前向就给出推理才能得到的答案」。
每个决策都会带上自己的route(one_forward或cot),下游代码可以据此校验,约定见 docs/levels.md。
2. 为什么要一次前向:先看「原始 logits」的坑
直接把选项写进 prompt、softmax 限制在标签上(raw 档),有个著名毛病:答案会随选项顺序变。下图是 Qwen3-8B 在一条真实 BANKING77 样本上的现场演示——左边直接读 logits,右边 L0 把顺序轮换后校正,两种顺序下 L0 给出的答案一致。
L0 靠 K 次轮换把位置偏差平均掉、再除掉标签先验——不需要任何标注,但代价是K 次前向。
Tacit 的自蒸馏就是为省掉这 K 次:训练时让模型模仿「自己推理(CoT)后的答案」,于是一次前向就能给出接近 L0 的质量,还不受选项顺序影响。这是「训练」与「免训练」之外的第三条路:不碰人类标注、不借别的模型,只用自己的推理结果蒸自己。
3. Tacit 最快上手:3 种方式跑起来
方式一:transformers 进程内加载(最简单)
pip install "anyjev[hf]"from anyjev import Tacit tacit = Tacit.from_pretrained("morriszjm/Tacit-9B") d = tacit.decide(state="Customer: my package was due last Monday and it still has not arrived.", question="What does the customer want?", options=["track_order", "cancel_order", "refund", "change_address"]) d["answer"], d["probs"], d["route"] # "track_order", {选项: 概率}, "one_forward"返回的probs是每个选项的概率,margin是 top-2 的 log 概率差——这个 margin 后面会决定要不要升级推理。
方式二:标准vllm serve(生产推荐)
pip install "anyjev[client]" vllm serve morriszjm/Tacit-9B --host 127.0.0.1 --port 8000tacit = Tacit.from_pretrained("morriszjm/Tacit-9B", engine="server", base_url="http://127.0.0.1:8000", adaptive=True)服务端保持原版 vLLM 不动,客户端只加载 tokenizer。engine="vllm"则把 vLLM 跑在同一进程里。
方式三:HTTP 网关(多客户端共享一个上限)
python -m anyjev.serve --model morriszjm/Tacit-9B --upstream http://127.0.0.1:8000 --adaptive --port 8100POST /v1/decide提交决策,GET /v1/stats查看升级比例。网关实现见 anyjev/serve.py。
4. 自适应升级:把最难的决策才交给推理,还带上限
adaptive=True开启后,Tacit 会做一件事:margin 小于tau(默认 0.5)的决策,打开 thinking 重新推理一次。推理结束后照旧读标签概率分布,所以升级后的答案同样带概率、同样不会解析失败。
关键在上限:最近cot_window(默认 1000)个决策里,最多只有max_cot_share(默认 20%)会升级。流量再难,成本也有界——这是能长期在线服务的保险丝。
| 参数 | 默认值 | 含义 |
|---|---|---|
adaptive | False | 低置信度决策交给模型自身推理 |
tau | 0.5 | top-2 log 概率差低于它即判「低置信」 |
max_cot_share | 0.2 | 滑动窗口内升级比例上限 |
cot_window | 1000 | 上限统计的窗口大小 |
cot_max_tokens | 8192 | 单次推理的 token 预算 |
每次升级都会如实记录:route == "cot"、保留第一遍结果在first_pass、tacit.stats给出计数。核心逻辑就在 anyjev/tacit.py 里,一个文件读完。
5. 完整评测:1.7B 到 9B,五尺寸全量数据
评测用 scripts/eval_tacit.py 跑在标准vllm serve(vLLM 0.17.1)上,题目按数据集原始顺序逐题决策,原始 JSON 全部落在 bench/results_tacit/2026-10-06/,可复核。
两个测试集:
- JevBench公开集:231 题,混合 choice / yes_no / score;
- bev-decision测试集:46,320 题,真实决策规模。
| 模型 | 底座 | JevBench 一次前向 | 自适应 | bev-decision 一次前向 | 自适应 |
|---|---|---|---|---|---|
| Tacit-1.7B | Qwen3-1.7B | 0.619 | — | 0.598 | — |
| Tacit-2B | Qwen3.5-2B | 0.671 | — | 0.626 | — |
| Tacit-4B | Qwen3-4B | 0.723 | 0.758(升级 14.3%) | 0.663 | 0.704(升级 17.8%) |
| Tacit-8B | Qwen3-8B | 0.736 | — | 0.663 | — |
| Tacit-9B | Qwen3.5-9B | 0.823 | 0.887(升级 15.2%) | 0.727 | 0.755(升级 18.1%) |
几个值得划重点的数字:
- 🚀升级是精准的外科手术。Tacit-9B 在 JevBench 上只把 35 题(15.2%)送进推理,这 35 题从做对 18 道提升到做对33道,净增 15 道;bev-decision 上升级 8,366 题,做对数从 3,771 提升到5,086,净增 1,315 道。
- 💰代价有界:Tacit-9B 升级题平均每题多生成 458(bev)~567(JevBench)个 token;Tacit-4B 只需 187~305 个。
- ⚡快:Tacit-1.7B 单张 H100 NVL 跑完 46,320 题只用了61.9 秒;Tacit-9B 在 4 副本上 231 题 JevBench 用时 93.1 秒。
- 📈尺寸收益明显:一次前向准确率从 1.7B 的 0.619 一路升到 9B 的 0.823,JevBench 上 9B 甚至超过了更大的常规推理方式。
- 🧭 小模型(1.7B/2B/8B)的自适应结果仍在路上,见 ROADMAP.md。
6. 从数据到源码:每个数字都能查到出处
| 想查什么 | 去哪里 |
|---|---|
| 五个模型的完整评测 JSON(含硬件、耗时、命令) | bench/results_tacit/2026-10-06/ |
| 评测脚本与题目映射逻辑 | scripts/eval_tacit.py |
| Tacit 决策 API、升级上限实现 | anyjev/tacit.py |
one_forward/cot路由与 level 约定 | docs/levels.md |
| L0 的旋转预算(K 次前向降到约 7 次) | docs/rotation_budget.md |
| 免训练 Decider 后端(HF/vLLM/SGLang/llama.cpp) | anyjev/backends/ |
7. 总结:什么时候该选哪条路
- 不想训练、手头有任意开源 LLM→ 免训练
Decider(L0 档,零标签,代价 K 次前向); - 要高吞吐、低延迟的在线决策服务→Tacit:一次前向拿概率,
adaptive=True给最难的那 15%~20% 上推理保险,成本全程有界; - 显存有限→ 从 Tacit-1.7B 起步也有 0.619 的 JevBench 准确率,单卡轻松跑。
一句话记住 Tacit:答案来自推理,延迟来自一次前向。
【免费下载链接】AnyJev
Turn any LLM into a Jev-style decision model: typed decisions, real probabilities, no training. (continue updating, welcome any issue and PR request)
相关推荐
Amazon Bedrock 引用感知问答模型蒸馏实战:从 Nova Premier 蒸馏到 Nova Lite 的四阶段流水线
Amazon Bedrock 引用感知问答模型蒸馏实战:从 Nova Premier 蒸馏到 Nova Lite 的四阶段流水线 导读 本文以 01_citat
示例工程DeepSeek-R1蒸馏模型对比:1.5B到70B全系评测
DeepSeek R1蒸馏模型对比:1.5B到70B全系评测 引言:推理能力的新范式革命 在人工智能快速发展的今天,大型语言模型(LLM)的推理能力已成为衡量其
基础模型大模型人工智能DeepSeek模型蒸馏(PaddleSeg + PaddleSlim)实战教程:从教师模型训练到学生模型蒸馏全流程
模型蒸馏(PaddleSeg + PaddleSlim)实战教程:从教师模型训练到学生模型蒸馏全流程 模型蒸馏是 PaddleSeg 中基于 PaddleSli
人工智能计算机视觉预训练
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考