AnyJev:让开源大模型给出可信概率
如果你正在用开源模型做分类、路由、审核,大概率遇到过这种情况:模型说“billing”,置信度 0.95,但你不敢直接自动化。因为那个 0.95 不是概率,是 softmax 出来的 token 分数。模型经常过度自信。选项换个顺序,答案还能变。
AnyJev 就是冲着这个问题来的。它不是另一个 Agent 框架,而是补在 Agent 下面那层缺失的校准层。项目地址在 GitHub:MartinYeung5/AnyJev。来自 Nokia 和腾讯的研究人员把它开源了出来。
先看痛点:0.95 为什么不能信
- 你让 LLM 分类客服工单,它说“billing”,置信度 0.95。
- 这个数字不是真实概率。它只是 token logits 上的 softmax,LLM 出了名的过度自信。
- 未校准的 0.95,实际正确率可能只有 70% 左右。
- 更麻烦的是位置偏差。把选项顺序打乱,答案可能直接翻转。
- 你没法设阈值。设不了阈值,就没法自动化。
- 不能自动化的决策,最后还是要人来兜底。
AnyJev 要解决的就是这件事:让模型给出的数字变得可用。
AnyJev 到底做什么
- 它从已有模型里读类型化决策,不是让模型自由生成文本。
- 你定义一个
Question:K 选一、是/否判断、或者序数打分。 - AnyJev 返回一个决策,外加每个问题的校准概率。
- 不微调,不更新梯度,模型权重完全不动。
- 不解析生成文本。决策来自模型内部状态,不是它写出来的字。
核心思路很直接:一个 pooling server,加上几 KB 的线性头,就能把 embedding endpoint 变成 decision endpoint。
四个级别:raw、L0、L1、L2
AnyJev 给了四个部署级别,每一级都是一个明确的契约。
- raw:在答案位置对标签 token 做 softmax。这是很多开源 Jev 克隆都在做的事。它给你排序,不给你概率。标签先验偏差和位置偏差都在里面。官方文档说得很直白:别把它上生产。
- L0:零标签去偏。默认跑两个免训练修正。循环移位边缘化把每个选项轮流放到每个位置,再在对数空间合并,在加性假设下精确去掉位置偏差。批量校准在 8 个样本后,以 0.75 的强度除掉运行中的标签先验。不需要标签。大多数团队应该从这里开始。
- L1:L0 加上温度缩放。每个问题需要 100 到 500 个标签。适合“我有一小批标注数据,想要能设阈值的置信度”这种场景。
- L2:在模型最后隐藏状态上拟合一个闭式线性头。每个问题 100 到 300 个标签,一次求解,不用梯度下降。这是保真度最高的级别,也是把 embed server 变成真正 decision endpoint 的级别。
从 raw 到 L0 不是小修小补。在 BANKING77 上,L0 把顺序依赖翻转率从 0.230 降到 0.073,准确率从 0.747 提到 0.803。
效率:自适应旋转预算
- L0 正常需要每个决策做 K 次旋转,才能消掉位置偏差。20 类问题就是 20 次前向。
- 自适应模式逐个读选项,领先足够多就停。
- 阈值是对全强度 readout 校准的,所以它能认证 1% 的不一致率。
- 实测结果:BANKING77-20 上,7.2 次旋转,而不是 18 次。
- 换算下来,vLLM 上每秒决策数提升 2.2 倍,transformers 后端提升 2.3 到 2.7 倍。
- 准确率不变。这个校准不需要标签。
对跑高并发路由的团队来说,这就是概念验证和生产系统之间的差别。
案例:BANKING77 上校准到底值多少钱
BANKING77 是一个 20 类银行意图数据集。Qwen3-8B 上的数字很能说明问题:
- Raw 准确率 0.750,L0 是 0.807,L2 也是 0.807。
- 校准误差 ECE:raw 0.235,L0 0.180,L2 0.100。
- 在错误率不超过 5% 的前提下,可自动决定比例:raw 7.7%,L0 47.7%,L2 54.3%。
最后一行才是业务指标。用 raw logits,你只能放心自动化 7.7% 的工单。用 L2 校准,同样的错误容忍度下,你能自动化 54.3%。剩下的再走人工审核。模型权重一个没改,自动化覆盖率翻了七倍。
AnyJev 不是什么
- 它不是 LangChain、CrewAI、Dify 的替代品。那些是编排框架,管工具、记忆、多步计划和 Agent 循环。AnyJev 不管这些。
- 它不是微调工具。L1 拟合一个温度标量,L2 拟合一个线性头。骨干模型从来不动。
- 它不是闭源模型 wrapper。AnyJev 需要 logits 或隐藏状态。如果你通过 API 调 GPT-4,用不了 L2。这是给开源模型、自托管模型、或者 vLLM 服务准备的。
- 它不是通用 AI Agent。它不浏览网页,不写代码,不做计划。它从固定列表里选一个,然后告诉你有多确信。
和类似工具比,差异在哪
对比 logitly
- logitly 也做 LLM 选择校准,但依赖几十个标注样本。
- 它报告 70% 到 83% 的校准误差降低。
- AnyJev 的 L0 路径零标签,L2 路径在隐藏状态上做闭式求解,不是只在 logits 上做温度缩放。
- 架构差异很关键:AnyJev 读的是模型内部表示,不只是输出分布。
对比 calikit
- calikit 是校准审计库。
- 它读预测和结果,报告 ECE 和可靠性图,然后就停了。
- AnyJev 自带校准 benchmark,也报告同样的指标,但它还给了修正层。
- calikit 告诉你模型没校准。AnyJev 负责把它修好。
对比 LangChain
- 这俩是互补,不是竞争。
- LangChain Agent 要路由工单、分类线索、给回复打分时,可以把 AnyJev 当工具调用。
- LangChain 管 Agent 循环。AnyJev 管循环里的决策质量。
对比 Jev(TypeSafe)
- Jev 是闭源托管模型,有自己的 API。
- AnyJev 是开源层,让你已经在跑的任何开源因果 LLM 给出 Jev 风格的类型化决策。
- 想要托管端点,选 Jev。想自托管、把数据留在自己的推理栈里,走 AnyJev。
谁该关注
- 在生产环境跑开源模型的 ML 工程师:你需要设决策阈值,但概率不可靠。
- 做路由或分诊系统的平台团队:错误决策有真实成本,人工审核队列是兜底。
- 银行、保险、医疗的风险与合规团队:在这些行业,“模型说 0.95”不是合格的审计记录。
- 研究 LLM 校准的研究人员:想要可复现、带 benchmark 的实现,而不是一篇论文加一个 notebook。
目标市场也很清楚:自托管开源模型、需要阈值自动化和审计能力的行业。客服工单、线索评分、内容审核、意图路由,都是典型场景。
路线图和现实限制
- 项目目前是 v0.2.0。
- 维护活跃,接受 issue 和 PR,benchmark 可以用一条命令复现。
- 自适应旋转预算会在下个版本变成默认,前提是重新生成表格。
- 一个诚实的限制:AnyJev 需要开源模型。这不是 bug,是设计选择。
- 团队瞄准的是推理跑在自己基础设施上的世界,不是跑在别人 API 上的世界。这个趋势在涨,不在退。
总结
AnyJev 只做一件事:让那个数字变得真实。
如果你在搭 Agent、路由器、分类器,或者任何要基于决策行动的系统,概率和标签一样重要。AnyJev 就是夹在开源 LLM 和自动化阈值之间的那层校准。它小,它快,它带的 benchmark 你能在自己机器上重跑。