【免费下载链接】rizzo-pii
Local-first privacy guard: anonymize your documents before sharing with LLMs.
把合同、判决书、财报直接粘贴给 ChatGPT 或 Claude,方便,却也悄悄把姓名、税号、IBAN、病历送上了不可控的服务器。rizzo-pii 是一款本地优先的 PII 匿名化工具:它用约 0.3B 参数的轻量模型在你自己的 CPU 上检测 22 类个人数据,只把「占位符」发往云端大模型,敏感内容从不出设备。本文从GDPR 数据最小化、不可逆模式、AGPL 许可三个角度,分析这款本地 PII 工具的合规边界究竟划在哪里。
为什么"GDPR 合规"不能只是一句口号
对律所、会计师、医院来说,把含个人数据的文档交给云端 LLM,在 GDPR 下很可能构成一次直接违规——最常见的原因,是把可识别数据传给了没有合法依据的第三方。
rizzo-pii 的思路是「保留最强模型,把数据从方程里拿掉」:本地匿名化 → 只发占位符 → 本地还原。它的隐私保证是架构层面的,而非一句承诺。
数据最小化如何落地:数据从不出设备
GDPR 第 5 条的「数据最小化」被 rizzo-pii 近乎字面地实现:第三方处理器永远只能看到伪名化文本。
- 检测与还原全在本地 CPU 上运行——没有 API Key、没有遥测、没有上传。
- 映射字典从不上网:服务器内部重建字典以定位 PII,请求结束即销毁,任何方向都不跨线传输。
- 文档只活在内存里:PDF 预览用 LRU 缓存,永不落盘,进程结束即消失。
也就是说,云端收到的文本已经被剥掉了所有标识符。这正是大多数云端 LLM 调用"违法"的根源被从源头消除。相关实现见 src/app/app.py 的analyze()函数与 src/app/detectors.py 的确定性检测网。
💡 对新手而言,判断一个 PII 工具是否"真合规"的关键问句是:敏感值到底有没有离开我的机器?在 rizzo-pii 里,答案是否定的。
不可逆模式:从"可逆脱敏"到"销毁恢复密钥"
默认情况下,rizzo-pii 做的是伪名化(pseudonymization)而非销毁:每个 PII 获得一个稳定的类型化占位符([FULLNAME_1]、[IBAN_1]、[CF_1]),并生成一份本地字典记录「占位符 → 真实值」。LLM 的回答返回后,本地一步还原,工具因此真正可用而不只是合规摆设。
但有些场景恰恰相反:希望匿名化后不存在任何恢复密钥。rizzo-pii 提供了这样的开关,而且"不是装饰性的"。
当字典被关闭时,会发生以下变化(配置注释见 src/app/app.py):
| 维度 | 可逆模式(默认) | 不可逆模式(PII_MAPPING=0) |
|---|---|---|
| 是否构建映射字典 | ✅ 构建并本地保存 | ❌ 不构建、不返回、不存储 |
实体片段是否带原文t字段 | ✅ 携带 | ❌ 直接删除 |
| 占位符编号是否保留 | 保留 | 保留([FULLNAME_1]两次仍代表同一人) |
| 能否从响应重建字典 | 能 | 不能(原文已剥离) |
| 浏览器 localStorage 是否写入 | 写入 | 不写入,并隐藏下载入口 |
关键点在于:编号保留、原文删除。两个相同的占位符仍告诉大模型"这是同一个主体",但一个孤立的编号反查不到任何值。这正是数据最小化在"彻底销毁"场景下的极致形态——连一把能打开门的钥匙都不留下。
可通过界面开关、环境变量PII_MAPPING=0、每次请求的include_mapping: false或POST /settings(持久化到prefs.json)来启用,说明见 docs/releases/v2.0.0.md。
真正的 PDF 脱敏与"失效即失败"安全网
合规最怕的是"看起来脱敏了,其实没有"。rizzo-pii 在这一层做到了结构性安全:
- 真实删红(true redaction):PII 从 PDF 内容流中被移除,而不是用黑框盖住——复制、OCR、文本抽取都拿不到原值。
- 元数据一并清洗:XMP、批注、表单字段值、书签标题全部清除,内嵌附件整体丢弃。
- 失效即失败(fail-closed):如果整份 PDF 中一处 PII 都没找到,端点直接返回
422,而不是交给你一个"看似匿名化"的文件。 - 残留/跳过告警:极少数值无法安全替换(如过短的数字),会以
X-PII-Residual、X-PII-Skipped响应头在界面明确提示,而非静默放行。
此外,模型从不单独工作:它始终与一张正则 + 校验和安全网配对。IBAN(mod-97)、信用卡(Luhn)、CF/PIVA 官方算法必须通过校验才会被接受,且有效校验和优先于模型——这消除了神经标注器切碎长代码的经典失效,为"泄露危害最大"的标识符提供数学上确定的检测。校验和逻辑见 src/inspect/validate_checksums.py,PDF 导出见 src/app/pdf_export.py。
AGPL 许可边界:源码是 MIT,为何二进制是 AGPL?
这是理解 rizzo-pii 合规边界的另一个关键。它的许可是双轨的(详见 THIRD_PARTY_LICENSES.md 与 LICENSE):
| 你拿到的是 | 许可 |
|---|---|
| 本仓库源码 | MIT(自由使用、修改、商用) |
Releases 发布二进制(.exe/.dmg/.deb/.AppImage) | AGPL-3.0(因打包了 PyMuPDF) |
你自行docker build的镜像 | 组合含 PyMuPDF,转交时视为 AGPL-3.0 |
原因在于:做真实删红的page.apply_redactions()依赖PyMuPDF,而它采用「AGPL-3.0 或 Artifex 商用」双许可。内嵌 AGPL 库的可执行文件构成结合作品,整体遵循最严格组件——所以发布二进制是 AGPL-3.0。
AGPL 对合规用户意味着什么?
- 不碰你的文档:copyleft 约束的是软件,不是输出。律所用它匿名化合同,不必向任何人公开任何东西。
- 不禁止商用:可以工作中用、可以售卖;唯一不能做的是闭源再分发(接收方必须拿到对应源码)。
- 网络条款(§13):若把应用作为他人可访问的服务运行(如
--host 0.0.0.0或办公服务器上的 Docker),须向远程用户提供对应源码。但默认绑定127.0.0.1,普通桌面使用根本触发不到。 - 想做闭源产品?要么替换 PyMuPDF,要么购买 Artifex 商用许可——这正是双许可存在的意义。
对合规团队的一句话结论:从源码安装、本地桌面使用,不会触发 AGPL 的任何额外义务。
合规边界在哪里:诚实的局限
任何合规工具都该说清楚"边界"。rizzo-pii 的官方局限包括:
- 验证仅覆盖意大利语:训练是多语言的,但 7,000 行基准只度量意大利语,其余七种语言"训练了但未认证"。
- 意大利法律标识符验证于注入实体:
CF、PIVA、CATASTO、DOCID、PROVINCE没有公开真实数据,验证里用的是"生成实体注入真实句子"——是好代理,不是完全盲测。 - 类别不平衡:
FULLNAME的数量约为CREDITCARDNUMBER的 97 倍,稀有标签更噪。 - 评估是句子级而非文档级:真实用例是整份文档,端到端度量尚待补充。
最实用的缓解措施始终是:把模型与正则/校验和安全网配对使用——两者结合强于任何单一手段。
总结:本地 PII 工具的合规边界
把三个维度串起来,rizzo-pii 的合规边界可以这样理解:
- 数据最小化(GDPR 第 5 条):从架构上让第三方"只看得到伪名化文本",敏感值不出设备,字典不上网、文档不落盘。
- 不可逆模式:在"可逆脱敏"与"彻底销毁恢复密钥"之间给出一个非装饰性的开关,把合规选择权交回用户。
- AGPL 许可:源码 MIT 最大化自由度,二进制因 PyMuPDF 而 AGPL-3.0,但对本地桌面用户零额外义务。
- 真正的边界:验证以意大利语为准、法律标识符依赖注入实体、评估尚未做到文档级——在这些点上,它需要"模型 + 校验和安全网"的组合来兜底。
一句话:rizzo-pii 把"GDPR by design"落成了一个可以跑在普通笔记本上的结构性保证——而它诚实地标出了自己还没走到哪里,这恰恰是合规工具该有的样子。
📎 更多工程细节见 docs/CHANGELOG.md,完整方法论见技术报告 report/rizzo-pii-report.pdf。
【免费下载链接】rizzo-pii
Local-first privacy guard: anonymize your documents before sharing with LLMs.
相关推荐
BentoPDF 双许可架构全解析:AGPL-3.0 与商业许可的选择边界、WASM 组件合规与运行时加载机制
BentoPDF 双许可架构全解析:AGPL 3.0 与商业许可的选择边界、WASM 组件合规与运行时加载机制 本文以 BentoPDF(The Privacy
前端RSocket入门教程:如何在5分钟内构建你的第一个响应式应用
RSocket入门教程:如何在5分钟内构建你的第一个响应式应用 RSocket是一种基于二进制协议的响应式通信协议,旨在提供高效、灵活的网络通信能力。它支持多种
Madeira 第三方组件与许可证合规全解:GPL-3.0 重许可、静态链接义务与 iOS 分发的合规边界
Madeira 第三方组件与许可证合规全解:GPL 3.0 重许可、静态链接义务与 iOS 分发的合规边界 Madeira 是一个在未越狱 iPhone 上运行
游戏开发图形学
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考