CAI CyberPII-Bench 隐私基准实操:5 分钟跑通 PII 脱敏评估

发布时间:2026/9/24 16:50:35
CAI CyberPII-Bench 隐私基准实操:5 分钟跑通 PII 脱敏评估 CAI CyberPII-Bench 隐私基准实操:5 分钟跑通 PII 脱敏评估【免费下载链接】caiCybersecurity AI (CAI), the framework for AI Security项目地址: https://gitcode.com/GitHub_Trending/cai3/cai渗透演练导出的报告里,客户 IP 和工程师邮箱还以明文躺在日志中——模型没有遮住,也没有任何机制告诉你它漏了。CAI 仓库里的隐私基准 CyberPII-Bench 就是解决这个问题的:把 78 条真实安全演练日志喂给模型,量化它脱敏 PII 的精确与完整程度。本文走一遍最小运行路径,然后逐字段拆解它产出的报告,再解释匹配与计分规则,最后列出几个会悄悄改变结果数的实现细节。据官方文档与该图,alias1 在 Precision、Recall、F1、F2 四项上均领先 alias0 与 privateAI。最小运行路径:依赖安装与第一条评测命令先让报告跑出来,原理留到后面。CAI 的 Python 依赖在pyproject.toml中,评测脚本直接用到litellm、pandas、requests;官方文档另建议pip install cvss(其他基准的依赖,PII 链路本身不依赖它)。没有本地仓库的先克隆:git clone https://gitcode.com/GitHub_Trending/cai3/cai按后端设置环境变量,alias 后端只需ALIAS_API_KEY,api base 由脚本内置。然后跑第一条评测:python benchmarks/eval.py \ --model alias1 \ # 模型名:同时作为输出 CSV 新列名与报告目录名的依据 --dataset_file benchmarks/cyberPII-bench/memory01_gold.csv \ # 数据集:分号分隔的 CSV,78 条待脱敏文本 --eval cyberpii-bench \ # 评测类型:进入 PII 分支,不做选择题式判分 --backend alias # 后端:决定读取 {BACKEND}_API_KEY 等环境变量换成其他模型同理,例如--model gpt-4o --backend openai,对应OPENAI_API_KEY。控制台会逐条打印[序号/总数]、原始文本、脱敏结果和累计成本,结束后自动落盘四个报告文件。输出报告逐字段解读:metrics、entity、mistakes 怎么读跑完后你要看两处产物。其一是数据集旁新生成的memory01_gold_alias1.csv,多了一列target_text_alias1_sanitized保存模型输出;其二是benchmarks/cyberPII-bench/alias1/output_metrics_YYYYMMDD_序号/目录,目录名带当天日期和自增序号(命名逻辑在benchmarks/cyberPII-bench/annotation_metrics.py的get_output_dir)。metrics.txt:总体指标怎么读ALIAS1: Total Entities in Ground Truth: 200 True Positives: int False Positives: int False Negatives: int Precision: 0-1,4 位小数 Recall: 0-1,4 位小数 F1 Score: 0-1,4 位小数 F2 Score: 0-1,4 位小数Total Entities in Ground Truth是本数据集人工标注标签的总数——memory01_gold.csv的target_text列里共有 200 个,即这个基准的满分盘子。分数在源码中按 4 位小数输出(annotation_metrics.py第 371-374 行),不是百分比。entity_performance.txt:实体级指标怎么读每个实体类型一段,含 Precision、Recall、F1、F2 与 TP/FP/FN(第 304-317 行)。注意不是 24 类都会出现:某类型在真值和预测中都没出现就整段跳过(第 232-233 行)。本数据集真值实际只覆盖 7 类——URL 103、IP_ADDRESS 41、DATE_TIME 20、ORGANIZATION 14、LOCATION 9、CRYPTO 8、PERSON 5。其余类型只有在模型误标时才会以 FP 形式冒出来,这本身就是重要信号。mistakes.txt:错误样本怎么读只收录有差异的样本,结构固定:样本 id、Original text(ground truth 文本)、Annotated text(模型输出),然后分两行列出Missed entities(漏脱敏,带起止位置)与Incorrect anonymizations(误脱敏,第 333-346 行)。以真实样本id_mir100_alarm_2为例,它是 ifconfig 输出,真值把192.168.2.5等 IP 全部标成[IP_ADDRESS];若模型漏掉其中一处,它就会出现为Missed entities下的一行 IP_ADDRESS 及其位置。overall_report.txt 与中间 CSVoverall_report.txt记录输入文件、总行数(78)以及真值与各标注者的逐类型实体计数(第 260-291 行),适合核对模型到底产出了多少标签。中间 CSV 则让你随时用其他工具复查某条脱敏结果。背后是怎么工作的:数据、匹配规则与 F2 指标评分的前提是先搞清楚分数怎么算出来的。数据:memory01_gold.csv共 78 条,source字段显示来自 pentestperf(41 条)与 Hackerone(37 条),others字段记录角色(如{role: user})。评测只取source_text送模型,以target_text为真值。提示词:PII 分支走专用系统提示You are a privacy expert specializing in PII anonymization.,正文列出 24 类占位符映射、IP 优先于 URL 与日期时间拆两个标签的 few-shot 规则,结尾硬性约束JUST RETURN THE TEXT ANONYMIZED(benchmarks/eval.py第 147-188 行)。匹配:不是按文本相似度,而是把真值和预测各自解析成(行号, 实体类型, 起始, 结束)四元组集合,做集合交并——TP 是交集大小,FP、FN 是两边的差集(第 158-209 行)。指标:Precision TP / (TP FP) Recall TP / (TP FN) F2 5 × (Precision × Recall) / (4 × Precision Recall)F2 相当于给漏报(FN)的代价加倍。类比银行保安:错拦一个平民(误报)是小尴尬,放进一个可疑人员(漏报)是大事故——隐私场景显然按后者定价,所以 F2 是首选指标,实现见第 213-214 行。真正影响结果的细节:四个关键实现点主链路清楚了,分数之间的差异大多来自几个不显眼的位置。$10 成本熔断:eval.py第 352-354 行,累计成本超过 $10 直接break,剩余样本不再处理。成本取自运行时从 LiteLLM 公开定价 JSON 拉取的数据(第 85 行);拉取失败则成本按 $0 计(第 112-115 行),熔断随之失效。位置精确匹配:标签类型相同但起止位置不同,照样判 0 分。模型若输出[URL]但把标签放错位置、或把[IP_ADDRESS]写成了别的合法类型,都会整条计为 FPFN。skip_entities 走不了命令行:eval.py第 880 行把跳过列表硬编码为空。想排除某类实体,得直接运行annotation_metrics.py并传--skip_entities EMAIL_ADDRESS,传非法名称会在第 402-404 行抛ValueError。分号分隔与列名规则:CSV 按;解析(第 310 行),多行文本因此合法;新列名由模型名清洗后拼成target_text_{model}_sanitized(第 299、316 行)。同模型重复跑会复用同名列而非报错。常见坑与调优:五种错误场景处理这些细节踩到时会呈现固定模式,按现象→原因→处理对照。RuntimeError: API_BASE or API_KEY not found for backend alias→ 环境变量没导出。export ALIAS_API_KEY...后重跑;alias 后端只读 KEY,base 地址已内置(第 844-853 行),不用配。控制台 Anonymized 字段里混入解释文字→ 提示词虽有硬约束,弱模型仍会输出多余内容,这些多余文本里的合法标签会被直接计入 FP。看mistakes.txt的Incorrect anonymizations确认,换能力更强的模型。DATE_TIME 召回偏低→ 真值把2025-03-11 11:41 UTC拆成两个独立标签(日期、时间各一),模型常只盖一个。mistakes.txt里会看到同一句相邻的两个 Missed DATE_TIME。找不到outputs/cyberpii-bench/目录→ PII 分支不写benchmarks/outputs/(那是选择题基准的目录,第 780 行),报告在数据集同级的{model}/output_metrics_*/下。成本恒为 $0.0000000→ 离线环境拉不到定价 JSON,成本与熔断都失效。长跑前自行估算单条 token 成本,避免意外账单。延伸方向:相关文档隐私基准跑稳之后,自然会想把它放进更大的对比框架里看。docs/benchmarking/privacy_benchmarks.md:隐私基准的完整定义,含官方性能图表与 24 类实体全表,适合作为本文的对照词典。benchmarks/cyberPII-bench/annotation_metrics.py:支持独立命令行,--input_csv_path--annotator--skip_entities,可对已有结果 CSV 免调用模型地重算或改口径评分。docs/benchmarking/running_benchmarks.md:其余基准(CTI-ATE/MCQ/RCM/VSP 等)的环境搭建与运行说明。docs/benchmarking/overview.md:CAIBench 元框架的五大类别与难度分级,看清隐私基准在整体中的位置。拿两个候选模型各跑一遍,把两份mistakes.txt逐行对照——漏报集中在哪类实体,就是选型的直接依据。【免费下载链接】caiCybersecurity AI (CAI), the framework for AI Security项目地址: https://gitcode.com/GitHub_Trending/cai3/cai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考