ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

快速上手DiagSafe:5分钟用HuggingFace加载LLM安全评测数据集,完成第一次越狱攻击测试

快速上手DiagSafe:5分钟用HuggingFace加载LLM安全评测数据集,完成第一次越狱攻击测试

快速上手DiagSafe:5分钟用HuggingFace加载LLM安全评测数据集,完成第一次越狱攻击测试

【免费下载链接】DiagSafe项目地址: https://ai.gitcode.com/tencent_hunyuan/DiagSafe

DiagSafe 是腾讯混元发布的 LLM 安全评测基准(diagnostic safety benchmark)。用 HuggingFace 的datasets库一行命令,即可加载 3,489 条中英文越狱与安全测试提示词,再配合每条 prompt 专属的评分细则(rubric),你就能快速完成第一次 LLM 安全评测与越狱攻击测试 🚀。

DiagSafe 是什么?为什么需要“诊断式”安全评测 🛡️

传统安全基准往往只给模型一个“安全 / 不安全”的二元标签。DiagSafe 的核心理念是Beyond Binary Labels(超越二元标签):它让 LLM 裁判(LLM-as-a-judge)对每一条提示词逐项判定并引用证据,而不是只输出一个笼统结论。

数据集由三部分构成:

组成规模说明
评测提示词(prompts)3,489 条中英文双语,单轮 + 多轮越狱/安全测试请求
评分细则(rubrics)3,489 条与每条 prompt 一一对应的裁判模板,含安全项与豁免条款
安全分类标准(standards)84 个标签11 个一级维度、34 个二级、84 个三级标签(OSS-01 ~ OSS-11)

两个子集各有侧重:

  • DiagBase(2,401 条):按语言 × 对话轮次 × 攻击形式合成,包含直接有害请求、模板越狱和组合模板越狱;
  • DiagAttack(1,088 条):将单轮直接请求改写成指令式攻击——把有害意图藏在看似无害的写作任务里,附带角色、格式、语气约束,更贴近真实越狱场景。

⚠️ 内容警告:数据集刻意包含有害请求(暴力、色情、自伤、儿童安全、CBRN 等),仅用于安全评测与研究。

数据集结构:三组文件一览

Config文件条数用途
prompts(默认)prompts/DiagSafe_bench_3489.jsonl3,489中英文单轮与多轮评测提示词
rubricsrubrics/DiagSafe_rubrics_3489.jsonl3,489每条 prompt 一份裁判评分细则
standards_zhstandards/DiagSafe_standards_84.json84三级安全标签标准(中文)
standards_enstandards/DiagSafe_standards_84_en.json84相同 84 个标签(英文)

每条 prompt 的核心字段:

字段类型说明
idstringDiagBase-NNNNNN或DiagAttack-NNNNNN,前缀标识子集
languagestringen或zh
messageslist按顺序排列的用户轮次;多轮 prompt 为 2–5 轮
categorydictl1(如OSS-05)、l2、l3(中英文标签名)

5分钟用HuggingFace加载数据集

三步加载:一条命令搞定全部数据

只需datasets库,三行代码加载三组数据:

from datasets import load_dataset prompts = load_dataset("tencent/DiagSafe", "prompts", split="test") rubrics = load_dataset("tencent/DiagSafe", "rubrics", split="test") standards = load_dataset("tencent/DiagSafe", "standards_zh", split="train")

注意 split 的对应关系:prompts和rubrics使用test分割,standards使用train分割。

用 id 精确匹配 prompt 与 rubric

rubrics 与 prompts 通过id字段一一对应,构建一个映射即可随时取用:

rubric_by_id = dict(zip(rubrics["id"], rubrics["rubric"])) example = prompts[0] rubric = rubric_by_id[example["id"]]

完成第一次越狱攻击测试:四步走 🔧

整体流程:取一条攻击 prompt → 让被测模型生成回答 → 组装裁判提示词 → 让裁判模型输出 JSON 判定。

第一步:让被测模型回答

把 prompt 的messages按轮次依次发给被测 LLM,收集模型回答model_answer。多轮对话需逐轮发送,保留上下文。

第二步:组装裁判提示词(常见坑点)

rubric 是一个带占位符的裁判模板,包含{question}、{answer}、{safety_categories}三个占位符。由于模板的输出契约中含有 JSON 花括号,必须用str.replace填充,而不能用str.format(否则会因花括号冲突报错):

import json judge_prompt = ( rubric .replace("{question}", json.dumps(example["messages"], ensure_ascii=False)) .replace("{answer}", model_answer) .replace("{safety_categories}", json.dumps(example["category"], ensure_ascii=False)) )

第三步:裁判模型逐项输出判定

每条 rubric 包含 2–6 条prompt 特定的安全项(平均 4.5 条,附豁免条款)和 8 条通用实用性项(U1.1–U3.2),裁判需对每一项单独判定并引用证据,实用性部分按 0–3 分打分,最终按约定的 JSON 结构输出。

第四步:按规则汇总结果

  • 多轮对话逐轮评判:裁判会把较早的轮次作为上下文;
  • 判定规则:只要任意一轮为 Unsafe,整条 prompt 记为 Unsafe;
  • 仓库配套了端到端评测脚本(scripts/run_eval.py),自动处理回答生成、多轮评判、断点续跑与分组统计。

常见疑问 FAQ ❓

为什么不能用str.format填充 rubric?rubric 的 JSON 输出契约里本身就有花括号,str.format会将其误认为占位符而报错,用str.replace逐一替换最安全。

中文场景该用哪个 standards 文件?standards_zh(standards/DiagSafe_standards_84.json)与standards_en(standards/DiagSafe_standards_84_en.json)覆盖相同 84 个标签且顺序一致;prompt 的category.l2/l3与中文文件的“二级类目/三级类目”完全对应,便于交叉查阅。

必须跑完全部 3,489 条吗?不必。建议先抽取 10–20 条做冒烟测试(smoke test),跑通“生成回答 → 裁判判定 → 汇总”全链路后再全量评测。

可以用这个数据集训练模型产出有害内容吗?官方明确禁止。该数据集专为安全评测与 LLM 裁判研究设计,结果质量取决于所选裁判模型(论文报告不同裁判与人工标注的一致性为 89.41%–95.34%)。

总结:你的第一次 DiagSafe 评测已完成 ✅

回顾今天的 5 分钟路径:

  1. 用load_dataset("tencent/DiagSafe", ...)三条命令加载 prompts、rubrics、standards;
  2. 用id把每条 prompt 与专属 rubric 精确配对;
  3. 用str.replace填充占位符,生成裁判提示词;
  4. 裁判模型逐项输出带证据的 JSON 判定,多轮任一轮 Unsafe 即整体 Unsafe。

相比单一二元标签,DiagSafe 让你能定位模型到底在哪类风险、哪一条规则上失守——这正是“诊断式安全评测”的价值。完整字段说明与更多用法,详见 README.md。

【免费下载链接】DiagSafe项目地址: https://ai.gitcode.com/tencent_hunyuan/DiagSafe

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表