—— 多知道不是能力,是風險;知道剛好才是設計。
對象:資料平台 / 資安 / 法遵 / LLMOps / 產品負責人
關鍵字:最小揭露(Least Revelation)|目的限制(Purpose Limitation)|差分隱私(DP)|隱私預算(ε, δ)
從蒐集 → 索引 → 檢索 → 生成 → 記錄 → 學習,任何一段都可能過量暴露。
今天聚焦兩件事:資料最小化(少蒐集、少保留、少精度)與 差分隱私(對群體統計加噪),把「知道多少」變成工程化參數,而不是憑感覺。
階段 | 常見風險 | 最小化策略 |
---|---|---|
蒐集 | 表單/Log 欄位過量 | 刪欄位、改「是否/區間」、Default Off |
儲存 | 長期留存原始 PII | TTL、分層保留(Raw 最短、特徵次之、統計可長留) |
索引(向量化) | PII 進向量庫 | 向量化前去敏、泛化(分桶/格式化) |
檢索 | Top‑K 過大、舊文誤取 | Top‑K 上限、Recency、ACL/ABAC |
生成 | 回答含明細可反推個資 | Answer‑DLP、摘要替代、最小揭露模板 |
記錄/觀測 | Raw Prompt/Answer 進 Log | 遮罩、白名單欄位記錄、抽樣 |
學習/評測 | 用真實明細訓練/評估 | 匿名統計、DP‑Telemetry、合成資料 |
工程師幽默:不是所有資料都值得留,尤其是會讓法遵找上你的那種。
小抄:能不知道就不要知道;必須知道就知道最粗的版本。
ε
越小越保守;δ
為失敗機率上界(很小)。不適合:需要回傳個別明細或名單的查詢。DP 保護的是統計。
import math, secrets
def laplace_noise(scale):
# Laplace(0, scale)
u = secrets.randbits(64) / 2**64 - 0.5
return -scale * math.copysign(1, u) * math.log(1 - 2*abs(u))
class DPCounter:
def __init__(self, epsilon: float, sensitivity: float = 1.0):
self.epsilon = epsilon
self.scale = sensitivity / epsilon # b 參數
self.n = 0
def inc(self, k=1):
self.n += k
def release(self):
return int(round(self.n + laplace_noise(self.scale)))
# 用法:ε 越小噪音越大
ctr = DPCounter(epsilon=0.5)
for _ in range(123):
ctr.inc()
print("DP 公開值:", ctr.release())
dp-telemetry:
metrics:
- name: "rag.topk.histogram"
epsilon: 1.0
min_cohort: 200
sensitivity: 1
- name: "answer.refusal.rate"
epsilon: 0.8
min_cohort: 300
accounting:
budget_per_tenant_day: 4.0 # 每租戶每天 ε 上限
block_on_exceed: true
[Client]
▼
[API/Gateway] ──► [Query Rewriter(去敏/泛化)] ──► [Retriever(Top‑K/Recency/ACL)]
▼ ▼
[LLM] ──► [Answer Guard(DLP/匿名化/最小揭露)] ──► [Telemetry Aggregator(DP)]
▼
[Audit / SIEM / Dashboard]
PM:可以給我 VIP 客戶本月投訴明細列表嗎?
你:目的是改善體驗吧?給你前五大主因 + 比例趨勢。要聯絡資料請走核可流程。
PM:……好,我需要決策,不是個資。
資料最小化 = 過濾器,DP = 抗噪盾牌。
把 ε 當預算、把欄位當成本,AI 平台就能在守規前提下依然可觀測、可優化。
談資料採樣/標註品質、毒化/偏見控管、取樣可追溯與紅隊測試集。