返回文档
指南 00

文档 DLP 流水线 — 运维参考

当某个 workspace 启用了 DLP 扫描时,每个上传的文档在 ingestion 之后都会经过一次异步的 pg-boss 扫描:

1 分钟阅读

当某个 workspace 启用了 DLP 扫描时,每个上传的文档在 ingestion 之后都会经过一次异步的 pg-boss 扫描:

可选的 Enterprise 功能,按 workspace 启用(workspaces.dlpDocumentScanEnabled,默认 off;启用需先通过 eval gate)。来源:docs/DLP_DOCUMENT_PIPELINE.md(Phase 192, DLP-01..06 — v0.28.1)。来源行:FACT-CENSUS.md F-DLP-1、F-DLP-2、F-AUDIT-1。
  1. Detect — 三层检测流水线:管理员可配置的 regex 模式(dlpPatternService),对固定格式意大利标识符的校验值验证(Codice Fiscale 含 omocodia、P.IVA、IBAN — dlpChecksum),以及经 LLM 的上下文 NER 检测姓名/地址(使用既有 Ollama 客户端)。
  2. Mask — 检测到的实体变为文档级编号占位符([PERSON_1]、[GOV_ID_2]、…)。打码是幂等的(mask∘mask = mask)— 占位符语法永远不可能重新自我匹配。
  3. 已打码的 re-embed — document_chunks.chunkText 以已打码文本重写,searchVector/searchVectorMulti(FTS)重新计算,向量经 collector 端点 /api/ingest/reembed 重新嵌入。任何未经脱敏的向量都不会保持可检索。
  4. 加密原件 — 原始文本与每个实体值都以 AES-256-GCM 密文保存(encryptionService,ENCRYPTION_KEY 契约)。打码是单向的:加密原件是唯一的干净副本。

管理控制

每个 workspace 的开关(DLP-01)

Settings → Workspaces → DLP document scan 开关(列 workspaces.dlpDocumentScanEnabled,默认 off)。

  • 开关保持不可用直至下方的 eval gate 通过 — 关闭操作从不被阻止。
  • 状态先乐观翻转,保存失败时回退。

eval gate(DLP-05)

检测质量评估必须先通过才能启用:

  • POST /api/system/dlp/eval/run(admin)— 在已提交的意大利 PII 修复数据集语料(packages/server/src/__tests__/fixtures/dlp-eval/)上运行可重复的评估器。结果持久化到 SystemConfig DLP_EVAL_LAST_RUN(管理员不可编辑)。
  • GET /api/system/dlp/eval/result(admin)— 读取最近一次运行;从未运行返回 { passed: false, noRun: true } — 绝无静默通过。
  • 门槛指标: GOV_ID/FINANCIAL 两类上,被校验值抑制的检测给出零误报。PERSON/ADDRESS 的 recall 仅做文档化(nerMode 标记 stub vs live)。

旧语料的 backfill(DLP-06)

POST /api/system/dlp/backfill(admin,UI 中需 AlertDialog 确认):

  • Eval-gated:当最近一次评估缺失或未通过时,以 409 { error, gate: "eval-not-passed" } 拒绝。
  • 幂等 + 可续跑:标记 dlpScannedAt — 重跑只入队没有标记的文档。
  • 限速:队列并发 1(低于实时扫描队列)。
  • 收敛由 integration 双身(真实 Postgres)固定验证:已打码 chunk 持久化、tsvector 重新计算、reembed payload 与已打码文本 byte 相等、审计查询 = 零剩余 PII。

四类模式(欧洲/意大利标识符)

类别检测什么
GOV_IDCodice Fiscale(含 omocodia 校验)
FINANCIALP.IVA、IBAN(含校验值验证)
PERSON人名(上下文 NER,经 LLM)
ADDRESS地址(上下文 NER,经 LLM)

校验值类(GOV_ID/FINANCIAL)是确定性的;上下文类(PERSON/ADDRESS)经 LLM 的 NER — 其 recall 在评估结果中做文档化。

聊天重组(DLP-03)

已打码的占位符会到达 LLM;在流结束时,恰好一次,服务器为在所引文档 workspace 上持有 dlp:unmask 的用户把终端消息中的占位符重组还原。SSE done payload 上的附加字段 content 携带重组文本;widget 访客绝不接收重组文本(服务端强制;对 UI 只是隐藏控件)。

Unmask 预览(DLP-04)

GET /api/documents/:documentId/text 默认提供已打码文本。?unmask=true 只沿门槛阶梯重组:合法 param → workspace 开关 on → resolveWorkspaceRole + dlp:unmask 权限。每一处不满足都返回已打码文本(200)— 该端点绝不是授权判定器。UI 开关只为有权用户在含实体的文档上绘制(DOM 缺席式),按视图存在且从不持久化。

审计矩阵(SC-4)

每条读取路径都被一个行为测试固定(18 行:文本视图、OCR 预览、synthesis、citations、widget RAG、MCP tools、FTS、export、复制 KB、reembed admin)。widget/citations/MCP 携带硬性负固定(已打码,绝不重组)。

本指南介绍文档 DLP 流水线的操作面;工程深潜见孪生博文:

Provenance

章节来源
4 阶段流水线 / detect / mask / reembed / encryptdocs/DLP_DOCUMENT_PIPELINE.md(Overview — Phase 192 DLP-01..06)— F-DLP-1
管理控制 / 开关 / eval / backfilldocs/DLP_DOCUMENT_PIPELINE.md(§ Admin controls)
聊天重组 / Unmask 预览 / 审计docs/DLP_DOCUMENT_PIPELINE.md(§ DLP-03/04, SC-4)— 审计类见 F-AUDIT-1
“10 PII”计数不引用:该计数在本次工作中不可溯源(F-DLP-2 = UNTRACED-IN-THIS-PASS)— 页面只陈述真实的类别,绝无未溯源的数字

---

运维参考 — Simmetric Chat v0.28.1(文档更新于 2026-10-02,普查 SHA `aca5b8ff`)。