Jue:面向网络安全的校准决策模型

技术报告,2026 年 10 月。模型:Jue1Dev/jue(25 亿参数)和 Jue1Dev/jue-flash(3.5 亿参数)。项目主页:jue1.dev。

摘要

安全运营团队的很多工作,是回答关于某个具体对象的封闭问题:这棵进程树是不是恶意的?这是哪个 ATT&CK 技术?这条 IAM 策略放不放行这个请求?这个依赖受不受这条公告影响?生成式模型用文字回答,回答还得再解析,也没法设阈值。Jue 改为给每个选项一个概率。它接收一个状态(告警、日志、策略、CVE 描述、一次工具调用)和一组类型化问题,一次前向给所有问题打分。我们发布两个模型:Jue,在 MiniCPM5-2B 上加 LoRA adapter 的 25 亿参数解码器;Jue-Flash,带决策头的 3.5 亿参数双向编码器。在安全基准上,Jue 在 SecQA v1 上得 .973,VulDetectBench task 1 得 .921,CyberMetric-10000 得 .735,CTIBench RCM 得 .723;在 BFCL-v4 irrelevance 上得 .863,When2Call 得 .836。在 131 个外部任务的同一批题上,编码器有 14 个超过解码器。发布的 Jue 没有达到训练前定下的全部发布标准。本报告介绍两个模型、我们怎么测的,以及哪些地方不行。

1. 引言

检测工程师、SOC 分析师和漏洞管理人员每天要做大量小决定,大多数只有几个可能的答案。自动化流水线需要的是能拿来分流的数字:失陷概率在 0.3 到 0.8 之间就转人工,注入概率高于 0.9 就拦下工具调用。自由文本给不了这个。

Jev 系列决策模型把这个问题表述为针对状态的类型化问题,用校准概率作答。Jue 用开放模型实现同一接口,单张显卡或一台笔记本就能运行,重点是网络安全:安全运营与检测、威胁情报、漏洞管理、云与身份安全、DevSecOps、合规,以及调用工具的 AI 智能体的护栏。

项目最初的目标不一样,是通过在代码仓库里游走来找深层逻辑缺陷;这个目标不再进步之后,才转向安全决策(第 6 节)。有两条规矩始终没变。每次训练改动在运行前登记主指标、值得追求的最小效应,以及不能退步的检查项。每个结果都按配对比较读取,带 bootstrap 区间;失败就记作失败,不改口径。

2. 接口

一个请求包含一个状态和至多 256 个问题。问题有三种类型:

响应给出每个问题每个选项的概率。线协议是 Jev 的 POST /v1/systemone,现有 Jev 客户端可以直接调用这两个模型。一个缩短的例子:

{
  "state": {
    "policy": {"Statement": [
      {"Effect": "Allow", "Action": "s3:*", "Resource": "arn:aws:s3:::finance-reports/*"},
      {"Effect": "Deny", "Action": "s3:*", "Resource": "arn:aws:s3:::finance-reports/*",
       "Condition": {"Bool": {"aws:SecureTransport": "false"}}}]},
    "request": {"action": "s3:GetObject", "context": {"aws:SecureTransport": "false"}}
  },
  "questions": {
    "allowed": {"type": "noul", "instructions": "Under this identity policy, the request is allowed."},
    "decisive_statement": {"type": "choice", "instructions": "Which statement decides the outcome?",
      "criteria": {"ALLOW_S3_ALL": "The Allow statement", "DENY_INSECURE": "The Deny on insecure transport",
                   "IMPLICIT_DENY": "No statement matches"}}
  }
}

Jue 对 allowed 给出 0.11,在 DENY_INSECURE 上给出 0.9965。

3. 模型

3.1 Jue

Jue 是 MiniCPM5-2B(42 层,25.2 亿参数)加一个秩 32 的 LoRA adapter,作用于全部注意力和 MLP 投影。状态只编码一次作为共享前缀;每个问题是一个单独的分支,只看前缀和自己。所以回答 20 个问题只需对状态做一次前向,每个答案也与单独提问时相同。答案从语言模型头读出:Answer: ( 之后各选项代码的 logits 构成选项分布,再用一个全局温度(T = 1.091)校准。

训练目标是选项分布上的交叉熵,Score 题另加排序概率分数项。优化器 AdamW,lr 1e-4,余弦衰减,一个 epoch,在一张 RTX PRO 6000 上跑了 12,645 个优化步。请求打包到最长 8,192 token,从不截断。

3.2 Jue-Flash

Jue-Flash 是 LiquidAI 的 LFM2.5-Encoder-350M(10 层门控短卷积加 6 层双向注意力)加一个决策头。决策头按问题对多个编码层做门控,让每个问题去关注状态,用选项各 token 上的后期交互(MaxSim)给选项打分,并把 Score 题各档位耦合起来,使分布保持单峰。每个问题的每个选项在一次双向前向中打分。校准按题型各用一个温度,是非题另加一个偏置。上下文 4,096 token,更长的状态保留前 70% 和后 30%。预热后在 Apple 芯片上每个请求约 0.1 秒。

4. 测量方法

外部基准被转换成类型化问题,用各基准自己的指标打分。答案取选项分布的 argmax,所以不存在解析失败,但转换会改变一部分任务。比如 CTIBench RCM 变成在列出的 CWE 中选择,而不是自由生成;SWE-bench 变成在文件中选择,而不是检索。这些数字照样报告,但标注为不能与公开榜单对比。

Jue 和 Jue-Flash 在同一批题上比较。每个基准只保留两个模型都完整作答的条目,两边用同一个打分器。Jue 只读了 750 题样本的基准,比较就在这个样本上。训练改动之间的差异用按组聚类的 bootstrap 95% 区间判定。

5. 结果

5.1 Jue 的外部基准成绩

基准Jue能否与公开结果对比
SecQA v1 / v2.973 / .940能
VulDetectBench task 1 / 2.921 / .864能
SECURE CWET / KCV / MAET.741 / .826 / .763能
CyberMetric 10000 / 2000 / 500 / 80.735 / .753 / .760 / .812能
CTIBench MCQ.515能
CTIBench RCM(CVE 到 CWE,列出选项).723不能
AthenaBench rcm-open(开放 CWE,1,391 个 id).5515能
CMMLU 计算机安全.672能
SecBench 选择题(中文).814不能(子集)
BFCL-v4 irrelevance / live-irrelevance.863 / .724能
When2Call.836能
JevBench 公开题 / hard.783 / .577仅公开题
SecAlertBench(750 题样本).433不能

SecAlertBench 是明显的短板。样本里 527 条良性告警,Jue 把 354 条判成攻击,成绩低于随机。

5.2 同一批题上的 Jue 与 Jue-Flash

类别配对任务Jue-Flash 更高中位差(Flash − Jue)
安全639−.178
工具调用与代码645−.326
JevBench 公开题40−.247
合计13114

Jue-Flash 在 SecAlertBench(.637 对 .433)、CASTLE(CWE .300 对 .093)和 VulDetectBench task 2(.886 对 .864)上领先。CASTLE 和 VulDetectBench 的题型在它的开发中做过针对,只有 SecAlertBench 的领先是零样本的。它落后最多的是:需要同时选多个选项的题(BFCL parallel-multiple .035 对 .965,SecEval 多答案 .011 对 .462)、判断不该调用任何工具(BFCL irrelevance .475 对 .863)、中文题(SecBench .397 对 .814),以及装不进上下文的长智能体记录(τ-bench retail .000 对 .296)。参数只有七分之一,它适合做快速初筛,替代不了 Jue。

5.3 示例

模型卡展示了为这次发布编写的 15 个场景:EDR 进程树、Sigma 规则对 Windows 事件、两条中文 WAF 告警、钓鱼邮件头、一段 CVE 描述、一个列入 KEV 的漏洞、一个 VEX 可达性案例、AWS IAM 策略、Kubernetes RBAC 与 Pod 安全、iptables 首条匹配、测试夹具里的密钥、一次带提示注入的智能体工具调用,以及 NIS2 上报时限。展示的每个回答都是模型真实输出。Jue 在 31 个问题中答对 23 个,Jue-Flash 答对 17 个。Jue 答错的包括:把钓鱼邮件判成垃圾邮件;NIS2 早期预警答成 72 小时,正确是 24 小时;iptables 的规则号判对了,结论却判错了。

5.4 校准

在与训练相近的题型上,Jue 校准良好(Choice ECE .019,Noul .015,Score .031)。在外部基准上它欠自信:置信度比准确率低 .057 到 .068。在熟悉题型上拟合温度会让它更差,而在基准上拟合等于在测试集上拟合,所以我们没有修。在新题型上请把它的概率当作偏保守的估计。

6. 不行的地方

最后一步训练按事先定下的标准与之前的模型比较,八条中达到三条,没达到五条:

我们检验过,能否改读中间层而不是最后一层来缩小规则执行的差距。在六个深度上做的线性探针,在第 36 层达到 .536,与模型自身读出(.536)相等;中间层最大增益 +.0004,登记的门槛是 .026。信息并没有藏在更早的层里,所以跨层读出帮不了这个模型。在近乎相同的案例之间加一致性损失,也没有可测的收益(+.003,门槛 +.03)。

最初的代码目标没有达成。仓库级代码游走不随训练改善,一次重复训练的研究还表明,这个基准太小,测不出现实大小的效应。深层逻辑缺陷定位从未实现,也从未测量过。

7. 用途与限制

Jue 适合用来排序、分流和预填决策,再由人或确定性检查器确认:研判队列、告警富化、检测规则检查、CVE 与 CWE 映射、策略与配置问题,以及智能体循环里的护栏。不要用它单独做拦截或执行,不要用它提供法律建议,也不要问答案不在状态里的问题,比如某个 CVE 将来会不会被利用。CVSS 计算和分析师研判分级停在多数类附近,请用计算器或其他信号。它复现的是公开规范的语义,不是某个组织自己的策略;一个错误的"允许"可能掩盖暴露面。

两个模型都是防御型的,没有训练它们写漏洞利用、载荷、规避技术或钓鱼内容。

8. 发布

JueJue-Flash
仓库huggingface.co/Jue1Dev/juehuggingface.co/Jue1Dev/jue-flash
内容LoRA adapter、校准文件、推理服务、示例编码器与决策头权重、校准文件、推理服务、示例
底座模型openbmb/MiniCPM5-2B(Apache-2.0,不随附)LiquidAI/LFM2.5-Encoder-350M
许可Apache-2.0LFM Open License v1.0;推理代码 Apache-2.0

引用

@misc{jue2026,
  title  = {Jue: Calibrated Decision Models for Cybersecurity},
  author = {{Jue1Dev}},
  year   = {2026},
  note   = {Technical report},
  url    = {https://huggingface.co/Jue1Dev/jue}
}