前言¶
在 DeepSeek Harness(DSH)里和模型对话时,请求正文会发到云端;本地会话日志和聊天界面则保留另一套「人可读」记录。若把姓名、手机号、证件号等直接写进提示词,模型侧会看到明文,审计和合规压力都会上来。常见做法是在发送前整段替换或脱敏,但若同时改写本地 transcript,界面和工具链里的真值也会丢,后续很难在展示层把占位符还原成原文。
dsh-privacy-shield(维护者 hhl123hhl,社区分类 admin-security)走「本地优先」路线:只在构建「模型可见面」时替换敏感文本,本地 session、聊天 UI 与工具执行仍保留真值;模型返回的流式内容在落库与展示前再把占位符还原。下文按安装、配置与日常命令说明用法;事实以 GitHub 仓库 README 为准。
这是什么¶
一句话:面向 DSH 的本地隐私护盾——明文留在本机,发往模型的是确定性占位符,transcript 里你仍看到真实值。
DSH 对同一会话维护两套表面(README 中的表格):
| 表面 | 含义 | 谁在读 |
|---|---|---|
| 模型可见面 | 组装请求用的消息 | 模型(出站云端) |
| 人读记录面 | 原始提交的 session 事件 | 聊天 UI、本地 session 日志 |
插件在模型可见副本里把敏感片段换成 <LABEL_8hexdigits> 形式占位符;人读记录面不改写。回复流经过包装后,在 text-delta、reasoning-delta、tool-call-delta、block-end 等分片里还原占位符(含跨 chunk 切断的情况)。
示例(README 原文逻辑):
你输入: Call 张三 at 13800138000 about 京A12345.
模型看到: Call <PERSON_1a2b3c4d> at <PHONE_9f8e7d6c> about <PLATE_0a1b2c3d>.
界面仍显示: Call 张三 at 13800138000 about 京A12345.
技术约束(README):Version 1.0.0,零第三方运行时依赖,纯 ESM,Node.js 18+;package.json 中许可证为 MIT。
核心能力(已文档化部分)¶
只改模型可见面¶
通过对 Session.deriveEventMessage 的防御性补丁,在推导模型可见副本时改写 system、developer、user、assistant、tool result 五类表面;人读记录面不重写。这是与同生态其他脱敏插件的主要差异之一:若连本地 transcript 一起改写,本地可读性与展示层还原会受影响。
占位符与内存 vault¶
默认使用 HMAC 占位符:<LABEL_8hex> 为 HMAC-SHA256(label, value) 前 4 字节;密钥在本地文件 $DSH_HOME/shield/.placeholder.key,不可枚举。配置项 placeholderHash: legacy 可保留旧版 FNV-1a 格式。
placeholder → value 映射表仅在内存中、LRU 有界,不写盘;设计上可通过本地日志重跑检测器重建。规则包导入不会携带还原表。
检测与词表¶
三类检测族:28 种通用 PII/凭证实体(含社保、公积金、学号、病历、IMEI、MAC 等;银行卡经 Luhn),中文实体规则(组织、项目、系统、证件号、地址、人等),以及用户词表(字面量与 re: 正则行)。
termsFile 指向行式词表(支持 #/// 注释、@category 标签),与内联 terms 合并;文件变更通过 fs.watch 热加载。
词表挖掘与规则包¶
/shield scan-doc <path>:从本地 txt/md/csv/json/code/docx 等提取候选专名。/shield learn:从本地 session 日志挖掘高频未匹配片段;须经terms adopt确认后才进入词表。
规则包 schema:dsh-shield.rules/v1,字段含 schema, exportedAt, plugin, entities, terms, notes。/shield export / /shield import 在机器间迁移词表与实体开关;--encrypt <passphrase> 使用 AES-256-GCM + scrypt(DSH-SHIELD-ENC/v1),--pass 用于解密导入。导入校验会拒绝 vault/values/secrets 一类字段;包内仍不含还原表,但词表本身敏感,需按词表同级保管。
也可在 cordis.patch.yml 中设 rulesPack: "<path>" 启动加载,或单独配置 termsFile。
出站审计与 Web UI¶
默认 JSONL 审计:每请求记录占位符数量与标签分布,并对出站文本再跑检测器以标记明文泄漏;只记计数与标签,不记明文。/shield audit [days] 查询,audit export 导出 CSV。
Web UI 提供 dock 状态栏与可展开面板(Settings / Terms / Test bench / Audit / Candidates);敏感操作需 confirm。RPC 合约见仓库 docs/CLIENT-RPC-NOTES.md(11 个方法)。
运维与模型工具¶
/shield on|off、/shield enforce|observe:enforce改写模型可见面,observe仅统计。/shield pause <minutes>:临时明文透传并自动恢复。/shield doctor:自检(OK/warn 行)。- 模型可调用
shield_scan工具,返回脱敏统计(仅计数与标签)。
图像:不做 OCR,图片原样通过;文本类 file block 会脱敏。本地明文:日志中保留真值是还原设计的一部分;磁盘加密、备份与访问控制需自行处理,见 docs/SECURITY.md。
安装与启用¶
DSH 生态强调「一切皆插件」;目录页 skillhub.cn 上的 dsh-privacy-shield 为社区站点,与 DeepSeek / 幻方无官方从属关系。安装前应在 GitHub 阅读源码与 MIT 许可证;插件以当前 DSH 进程权限运行。
官方 Quick start 中的安装方式为本地 bundle(需本机已有插件目录的绝对路径):
plugin_manager action=install_bundle target=<absolute path to dsh-privacy-shield>
安装、升级或卸载后必须重启 DSH profile(README「Known limitations」一节)。
在 profile 的 cordis.patch.yml 中配置;仓库自带 cordis.patch.yml 为可运行示例,默认 mode: enforce。完整字段见 docs/CONFIG.md;摘要表中常见项:
| 字段 | 默认 | 作用 |
|---|---|---|
enabled |
true |
总开关;false 时不注册插件 |
mode |
enforce |
enforce 改写模型可见面;observe 仅计数 |
典型用法¶
重启并改好配置后,先用状态与试跑命令确认行为:
/shield status
/shield verify 张三的手机号是13800138000
status 查看模式、表面、计数与 derive-patch 状态;verify 只做试算脱敏,输出掩码后的文本。
规则包流转:
/shield export [path] [--encrypt <passphrase>]
/shield import <path> [--pass <passphrase>] [replace confirm]
/shield rules
import 默认合并词表;replace confirm 可整表替换。加密包在导入时自动识别。
从文档与历史扩充词表时,先扫描或学习,再显式采纳:
/shield scan-doc <path>
/shield learn
# 确认后通过 terms adopt 使候选生效(见 README Features)
适用场景与注意¶
适合:在本机 DSH 中对话或跑智能体,需要把 PII、凭证、内部专名挡在模型可见面之外,又希望在聊天 transcript 和本地日志里继续看到真值、并让助手回复中的占位符自动还原的场景。
不适合或需自备措施:依赖图片内文字的敏感信息(插件不 OCR);要求云端与本地完全同文且本地也不留明文的场景(本插件刻意保留人读记录面明文)。
与同生态其他脱敏插件相比(README「How it differs」):仅改模型可见副本、HMAC 占位符、可加密迁移的规则包、带明文复检的出站审计,以及需确认的词汇挖掘,是文档中强调的设计选择。
结尾¶
dsh-privacy-shield 把脱敏边界放在「发往模型的那份消息」上,用本地密钥派生的占位符与流式还原,在不大改你本地阅读体验的前提下降低云端明文暴露面。进一步了解与提 issue 可走 GitHub;在社区目录浏览元信息见 skillhub.cn 插件页。