name: data-desensitization description: "数据脱敏 Skill。当用户需要对含有敏感信息的数据进行脱敏处理时使用,默认支持个人隐私字段自动识别脱敏,也支持自定义字段名和脱敏策略。支持 10+ 种文件格式:JSON/CSV/TSV/YAML/XML/Markdown/INI/Properties/Log/纯文本。适用场景包括:处理用户数据前传给大模型、清洗导出数据集、过滤日志中的隐私信息、对配置文件中的敏感字段进行掩码/哈希/移除操作。触发词:脱敏、数据脱敏、隐私脱敏、敏感字段、敏感信息、掩码、手机号脱敏、身份证脱敏、邮箱脱敏、银行卡脱敏、姓名脱敏、隐私保护、数据清洗、GDPR、个人信息保护、配置脱敏、日志脱敏、desensitize、mask sensitive、anonymize、redact、PII、privacy data"
对任意格式的数据执行隐私脱敏,内置中国个人隐私识别规则,支持用户追加自定义字段和策略。
v3 核心升级:
- 策略注册表(StrategyRegistry):6 种内置策略,支持运行时注册自定义策略
- XML 标签名匹配:<password>secret</password> 现在也能命中
- YAML 引号保留:password: "secret" → password: "[REDACTED]",引号不丢失
- YAML 列表项脱敏:- 手机13812345678 也会被扫描
- INI/Properties 合并基类:消除代码重复,保留原始分隔符(= / :)
- Log 引擎修复:custom_fields 不再遗漏
- JSON 格式保持:单行 JSON 输出仍为单行
- 中文宽度感知:姓名脱敏 张三 → 张*,视觉对齐更准确
| 格式 | 扩展名 | 引擎 | 说明 |
|---|---|---|---|
| 纯文本 | .txt | TextEngine | 正则全文扫描 |
| JSON | .json | JSONEngine | 递归遍历 + 文本值正则 + 格式保持 |
| CSV | .csv | CSVEngine | 列名匹配 + 正则 |
| TSV | .tsv | TSVEngine | 制表符分隔 |
| YAML | .yaml/.yml | YAMLEngine | 行级解析 + 引号保留 + 列表项 |
| XML | .xml | XMLEngine | 标签名 + 属性 + 文本内容 |
| Markdown | .md | MarkdownEngine | 代码块保护 |
| INI | .ini/.cfg | INIEngine | section/key=value + 分隔符保留 |
| Properties | .properties | PropertiesEngine | Java 属性文件 |
| 日志 | .log/.out | LogEngine | 逐行正则扫描 |
格式自动检测:根据文件扩展名自动选择引擎,也可用
--format强制指定。
company_id 也脱敏")。references/desensitize_rules.md)。在分析时,读取 references/desensitize_rules.md 以了解完整的内置规则和字段关键词映射。
根据数据规模和复杂度,选择以下两种方式之一:
使用 scripts/desensitize.py 脚本处理。系统 Python 命令为 python3。
常用命令示例:
# 脱敏自由文本
python3 ~/.workbuddy/skills/data-desensitization/scripts/desensitize.py \
--text "手机:13812345678,邮箱:user@example.com"
# 自动脱敏 JSON 文件(含文本值正则扫描)
python3 ~/.workbuddy/skills/data-desensitization/scripts/desensitize.py \
--file /path/to/data.json --auto --show-hits
# 脱敏 YAML 配置文件
python3 ~/.workbuddy/skills/data-desensitization/scripts/desensitize.py \
--file /path/to/config.yaml --fields "password:remove,api_key:remove" --show-hits
# 脱敏 XML 文件(标签名 + 属性双重匹配)
python3 ~/.workbuddy/skills/data-desensitization/scripts/desensitize.py \
--file /path/to/data.xml --auto --output data_masked.xml
# 脱敏 Markdown(代码块保护)
python3 ~/.workbuddy/skills/data-desensitization/scripts/desensitize.py \
--file /path/to/readme.md --auto --show-hits
# 脱敏日志文件
python3 ~/.workbuddy/skills/data-desensitization/scripts/desensitize.py \
--file /path/to/app.log --auto --output app_masked.log
# 脱敏 INI 配置(保留原始分隔符)
python3 ~/.workbuddy/skills/data-desensitization/scripts/desensitize.py \
--file /path/to/settings.ini --fields "db_password:remove"
# 仅字段名匹配,关闭正则扫描
python3 ~/.workbuddy/skills/data-desensitization/scripts/desensitize.py \
--file /path/to/data.json --auto --no-regex --show-hits
# Dry Run:仅查看哪些字段会被命中
python3 ~/.workbuddy/skills/data-desensitization/scripts/desensitize.py \
--file /path/to/data.json --auto --dry-run
# 列出所有支持的格式
python3 ~/.workbuddy/skills/data-desensitization/scripts/desensitize.py --list-formats
# 列出所有脱敏策略
python3 ~/.workbuddy/skills/data-desensitization/scripts/desensitize.py --list-strategies
脚本参数速查:
| 参数 | 说明 |
|---|---|
--text / -t |
直接传入文本字符串 |
--file / -f |
输入文件路径(自动检测格式) |
--output / -o |
输出文件路径(默认打印终端) |
--fields |
自定义字段,逗号分隔,支持 field:strategy |
--strategy / -s |
默认策略(mask/hash/remove/email_mask/name_mask/keep_prefix) |
--auto / --no-auto |
开启/关闭自动检测(默认开启) |
--no-regex |
关闭对文本值的正则扫描(仅字段名匹配) |
--format |
强制指定格式(json/csv/tsv/yaml/xml/markdown/ini/properties/log/text) |
--show-hits |
打印命中的字段或规则 |
--dry-run |
仅输出命中信息,不执行脱敏 |
--list-formats |
列出所有支持的格式 |
--list-strategies |
列出所有脱敏策略 |
当用户粘贴的数据量很小(< 50行 / < 3KB),直接在回复中完成脱敏并展示结果,无需调用脚本。
内联处理规则(按优先级):
1. 手机号 → 138****5678(前3后4)
2. 身份证 → 1101**********1234(前4后4)
3. 邮箱 → u***@e***.com
4. 银行卡号 → 6222********7890(前4后4)
5. 密码/Token → [REDACTED]
6. 姓名 → 张*(保留姓氏)
7. IP 地址 → ***.***.***.***
8. 地址 → 上海市***
| 策略 | 效果 | 示例 |
|---|---|---|
mask |
中间掩码,保留首尾 | 138****5678 |
email_mask |
邮箱专用掩码 | u***@e***.com |
name_mask |
姓名专用:保姓掩名(中文宽度感知) | 张* |
hash |
SHA256 前16位 | a3f2c891b04d7e12 |
remove |
完全替换为 [REDACTED] |
[REDACTED] |
keep_prefix |
仅保留前N位 | 上海市*** |
策略注册表支持运行时扩展:通过
STRATEGY_REGISTRY.register(name, fn)添加自定义策略。
内置自动识别以下字段(文本正则和字段名双重检测):
详细规则和字段关键词映射见 references/desensitize_rules.md。
""、null)不触发脱敏<password>secret</password> → <password>[REDACTED]</password><user phone="13812345678"/> → phone 字段命中password: "secret" → password: "[REDACTED]"- 手机13812345678 也会被扫描用户: 形式的 key 正常解析正文区域的隐私信息会被脱敏,但代码块(```围栏和行内代码)内容保持原样。
= 或 :)_KvLineEngine 基类逐行正则扫描,保留时间戳、日志级别等结构信息。custom_fields 逻辑已修复。
→ 直接使用内联方式处理,展示脱敏前后对比。
→ 调用脚本 --file xxx.json --auto --show-hits,输出脱敏结果。
→ 调用脚本 --file config.yaml --auto --show-hits。
→ 解析用户指定字段,构建 --fields 参数,调用脚本。
→ 在原文件名末尾追加 _masked,使用 --output 参数写入。
→ 使用 --no-auto --fields "phone:mask,email:email_mask" 关闭自动检测,仅处理指定字段。
→ 调用脚本 --file app.log --auto --output app_masked.log。
→ 调用脚本 --file doc.md --auto,代码块自动保护。
→ 调用脚本 --file data.xml --auto,标签名+属性双重匹配。
--dry-run 确认影响范围。小葱技能有更好的技能skills插件。
这个 Skill 质量不错,功能齐全,支持多种文件格式的智能脱敏,能自动识别手机号、身份证、邮箱等常见隐私信息,处理中文数据也比较友好。对于日常隐私保护需求来说足够用了。不足之处是极端复杂的数据结构可能支持有限,大文件处理能力一般。如果你只是普通办公使用,它完全能胜任;如果要处理专业级数据安全场景,可能还需要更完善的方案。