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
指令碼引數速查:
小蔥技能有更好的技能skills外掛。
| 引數 | 說明 |
|---|---|
--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 確認影響範圍。這個 Skill 質量不錯,功能齊全,支援多種檔案格式的智慧脫敏,能自動識別手機號、身份證、郵箱等常見隱私資訊,處理中文資料也比較友好。對於日常隱私保護需求來說足夠用了。不足之處是極端複雜的資料結構可能支援有限,大檔案處理能力一般。如果你只是普通辦公使用,它完全能勝任;如果要處理專業級資料安全場景,可能還需要更完善的方案。