English | 简体中文
DiagSafe 是一个面向大语言模型的诊断式安全评测基准,由两部分共同构成:
二者结合,DiagSafe 给出高置信、可解释的评判结果,以及细粒度的模型安全诊断结论。

(1)每条 prompt 一份专属 rubric;(2)不同 judge 依据同一 rubric 得到一致结论;(3)条目级命中情况揭示不同模型的具体风险。
| 维度 | 详情 |
|---|---|
| Prompt | 3,489 条(DiagBase 2,401 · DiagAttack 1,088),中英文约 1:1 |
| 标签体系 | 11 个一级 / 34 个二级 / 84 个三级标签,依据从中、美、欧等地区公开 AI 安全规范中提炼的 204 条安全条款构建 |
| 对话 | 单轮 2,560 条、多轮(2–5 轮)929 条 |
| 攻击形式 | 普通有害请求、模板越狱、组合模板越狱、指令攻击 |
| 评测方式 | LLM-as-a-judge:prompt 专属安全条目(平均 4.5 条,含豁免范围)+ 8 个统一有用性条目(0–3 分) |
每个三级标签都配有定义、标准总则与标准细则,rubric 依据所属标签的标准生成。 与 SALAD-Bench、S-Eval、Do-Not-Answer、CHiSafetyBench 的叶子级对比如下, 红色为其他 benchmark 未覆盖的标签,橙色为其他 benchmark 只覆盖到上级类目的标签。

| DiagBase | DiagAttack | |
|---|---|---|
| 规模 | 2,401 条 | 1,088 条 |
| 构造方式 | 以标签标准为种子,按语言 × 轮次 × 攻击形式三个维度合成 | 以 DiagBase 中的单轮普通请求为种子,改写为指令攻击 |
| 攻击形式 | 普通有害请求、模板越狱、组合模板越狱 | 指令攻击:把有害意图嵌入看似正常的任务(角色、格式、语气等约束) |
| 对话 | 单轮 1,472 条、多轮 929 条 | 均为单轮 |
| 考察重点 | 标签覆盖面、语言与多轮场景下的安全性 | 强指令遵循与安全拒答之间的冲突 |

我们在 11 个主流 LLM 上评测了 DiagSafe,结论主要有两点。
以 236 条人工标注回答为金标准,对比四类评估方式:
| 评估方式 | 与人工标注一致率 | 不同 judge 间一致性(Cohen's κ) |
|---|---|---|
| 安全分类器(MD-Judge、LlamaGuard4、S-Eval、Qwen3Guard) | 69.07% – 87.29% | — |
| 通用安全 prompt + LLM | 80.51% – 87.29% | 0.559 – 0.766 |
| 标签标准 prompt + LLM | 82.63% – 86.86% | 0.532 – 0.802 |
| Prompt-level rubric + LLM(DiagSafe) | 89.41% – 95.34% | 0.828 – 0.864 |
Rubric 评估与人工标注的一致率最高可达 95.34%,换用不同 judge 时一致率始终保持在 93% 以上; 另外两种 prompt 方式在不同 judge 之间波动明显。人工复核还显示,prompt 有害性合格率为 96.4%, rubric 合理且可执行的比例为 99.6%。

新发布模型。 我们按完全相同的协议(相同的 3,489 条 prompt 与 prompt-level rubric、不加 system prompt、 相同的解码配置、以 Hy3 作为 rubric 引导的 judge)进一步评测了 5 款新发布的模型,结论与上文分析一致: 每个模型在 DiagAttack 上都明显更不安全。

| 模型 | 整体 ↓ | DiagBase ↓ | DiagAttack ↓ | 有用性 ↑ |
|---|---|---|---|---|
| Qwen3.8-27B | 8.5 | 3.3 | 20.2 | 2.23 |
| Hy4-Preview | 11.9 | 3.9 | 30.6 | 2.27 |
| GLM-5.3† | 13.1 | 9.5 | 20.9 | 2.37 |
| DeepSeek-V4.1-Flash | 18.5 | 5.8 | 47.5 | 2.14 |
| Kimi-K3 | 26.8 | 14.9 | 53.5 | 2.31 |
unsafe rate 单位为 %,有用性为平均得分(0–3)。 † GLM-5.3 无法关闭推理模式,因此使用低推理强度设置评测,其余设置与其他模型完全一致。
条目级判定还能揭示整体 unsafe rate 掩盖的差异。下图左侧为各模型在 11 个一级维度上的安全性–有用性分布, 右侧为整体 unsafe rate 几乎相同的三个模型在类目层面的显著差异。
模型在中文和多轮场景下普遍更容易出现不安全回答,且随着对话推进,逐轮 unsafe rate 持续上升:
完整实验与分析见论文。
DiagSafe/
├── data/
│ ├── README.md # 数据集组成、关联关系与校验值
│ ├── prompts/ # 3,489 条中英文 prompt、JSON Schema、字段说明
│ ├── rubrics/ # Prompt-level rubric、JSON Schema、渲染说明
│ └── taxonomy/ # 84 标签分类体系(中英文)、Schema、完整标签树
├── src/
│ ├── judge/ # OpenAI 兼容客户端与 judge 输出解析
│ ├── rubric/ # Rubric 渲染(含多轮历史)
│ ├── utils/ # I/O 与配置工具
│ └── analyze.py # 分组统计
├── scripts/
│ ├── run_eval.py # 端到端评测
│ └── analyze.py # 对已有结果文件重新分析
├── configs/ # judge 与被测模型配置(OpenAI API、vLLM)
├── dashboard/ # 数据集可视化面板(本地服务与静态导出)
├── examples/ # Prompt、rubric 与 taxonomy 联结示例
├── assets/ # README 中的论文图表
├── paper/ # 论文 PDF(DiagSafe.pdf)
├── requirements.txt
├── LICENSE # CC BY 4.0
├── README.md # 英文版
└── README_zh.md # 中文版
git clone https://github.com/Tencent-Hunyuan/DiagSafe.git
cd DiagSafe
pip install -r requirements.txt
环境要求:Python 3.10+,并能够访问兼容 OpenAI 接口的 LLM API(用于 LLM-as-a-judge)。
配置服务端点。 configs/judge.yaml 配置 judge 模型,configs/model.yaml 配置被测模型,
两者均为兼容 OpenAI 的接口,字段相同:
base_url: https://your-endpoint/v1
api_key: YOUR_API_KEY
model: your-model-name
temperature: 0
max_tokens: 4096
concurrency: 16
max_retries: 5
timeout: 120
top_p: null
extra_body: {}
extra_headers: {}