AB
AiBoss
project

AnyJev - 从大模型单次前向中读出可设阈值的类型化决策

AnyJev 是诺基亚应用研究团队开源的工具,让开放 LLM 通过一次前向计算回答类型化问题,并给出可设阈值的概率。项目自述其 L0 无需标注即可降低选项顺序带来的答案翻转,L1/L2 用少量标注改善校准与准确率。本文据官方接口与项目自述整理维护状态、主要能力、使用入口与许可限制。

AnyJev 是一个面向开放大模型的决策读取工具。按项目自述,它让使用者向任意开放 LLM 提出类型化问题(typed question),并从模型下一次 token 分布的一次 prefill 中读回一个带概率、可设阈值的决策——不需要生成文本,不需要解析输出,也不需要微调。它要解决的问题是:原始 logits 在选项顺序变化时会改变答案,其置信度也无法直接信任;AnyJev 自述用零标注修正前者,用几百条标注修正后者。它适合需要在业务流中把模型判断接入自动化阈值、又希望保留人工兜底通道的工程团队,也适合研究模型不确定性与校准的开发者。

维护者与状态

项目由 nokia-applied-research 维护,仓库创建于 2026-09-21,最后提交时间为 2026-09-23。最新 release 为 v0.0.2,发布于 2026-09-21。截至 2026-09-24,仓库星标数为 464。许可证为 Apache-2.0。项目另有 PyPI 页面作为分发入口。

主要能力

以下能力均来自项目自述(README 与模型卡),并非第三方评测结论。

  • 三种问题类型:据项目说明,Question.choice 用于多选项分类,Question.noul 用于判断某个动作是否不可逆或具破坏性,Question.score 用于把完成度一类的主观量分箱打分。三者都从同一次 prefill 读出,不生成文本。
  • 分级决策(L0 / L1 / L2):项目自述 L0 不需要任何标注,通过对 K 种选项轮换取平均来抵消位置偏差,并除掉标签先验;L1 在 L0 之上做温度缩放,需要每个问题 100–500 条标注;L2 在约三分之二深度处的隐藏状态上解一个闭式头(收缩 LDA / ridge),需要每个问题 100–300 条标注。项目自述每个 Decision 都带 level 字段,下游代码可以据此拒绝在错误的级别上执行动作。
  • 闭式求解而非训练:据项目说明,L2 不是一次训练过程,标注只用于一次闭式求解,在 CPU 上以秒计,不涉及梯度,模型权重不被改动。
  • 无标注自适应:项目自述头部只更新特征的均值与尺度,且这些统计量从无标注流量中重新估计,因此当问题被改写或选项顺序变化时,头部可以自行跟随;只有出现新问题时才需要新标注。
  • 在线收集标注:据项目说明,d.observe(...) 会在标注到达时存储它们,并在累计到 30 条时自动求解头部,之后在 60、120 等节点重新求解。
  • 批量与产物管理:项目自述提供 d.decide_batch(states, question) 用于「多状态、单问题」的场景,并提供 d.save_artifacts(...) / d.load_artifacts(...) 保存与加载产物,每个头部约 100 KB。
  • 随包发布的头部:据项目说明,仓库附带 anyjev-heads/,为 Qwen3-1.7B / 4B / 8B / 30B-A3B / 32B 每个模型提供 23 个头部(20 个 typed-decisions 问题加三个基准任务),且这些头部走的是与用户相同的 fit_headdecide_batch 路径构建与验证。
  • 一键演示:项目自述可用 python -m demo.jev_mode --backend fake 在合成模型上于一秒内跑通全流程,无需下载模型;--lifecycle 参数用于演示部署循环。

使用入口

仓库地址:https://github.com/nokia-applied-research/AnyJev。分发包位于 PyPI:https://pypi.org/project/anyjev/

据项目说明,安装方式为:

pip install "anyjev[hf]"

基本调用流程为:从 anyjev 导入 DeciderQuestion,从 anyjev.backends.hf 导入 HFBackend,用模型名构造后端与 Decider,再定义若干问题并调用 d.decide(state, [route, risky, done])。返回对象上可读取 distribution(选项分布)、p_true(二值判断为真的概率)、value(打分值)以及 level。有标注时,可用 d.calibrate(...) 得到 L1,或用 d.fit_head(...) 得到 L2,并在调用时传入 level="auto" 让路由自动选择级别。

许可与限制

许可证为 Apache-2.0。项目自述中明确写出的限制与边界包括:

  • 服务后端有限:transformers 后端(anyjev.backends.hf)当前支持全部级别;通过 vLLM / SGLang 提供服务仍在路线图中,不在本版本内。
  • L2 不可迁移:项目自述 L2 头部不会迁移到另一个问题或另一个模型;更换基础模型需要从已存储的带标注状态重新求解每个头部。
  • 状态漂移不可见:项目说明,如果发生漂移的是状态而非措辞,重定心机制无法察觉,因此仍建议在带标注的切片上做周期性抽查。
  • L0 不改善校准:据项目说明,L0 只消除位置偏差与标签先验,并不能让模型的不确定性变得校准;L1 只做温度缩放,不改变排序。
  • L2 需要本地模型:项目自述 L2 需要本地模型与每个问题 100–300 条标注。
  • 数据口径:项目自述其所有数字由已提交的 JSON 重新生成,并称从干净检出重跑可逐位复现零标注数字;同时声明与 TypeSafe AI 或 Jev 无关联,由原作者发表的对比行未在此处重跑。本文不引用其具体性能数值,读者如需了解应直接查阅仓库内文档。

需要说明的是,以上能力与限制均来自项目自述,本文作者未运行该项目,也未独立验证其任何性能声明。