返回部落格
合規·2026年5月25日·閱讀約 8 分鐘

符合 DSGVO 的 LLM 使用——PII 遮罩、AVV 與 Zero Data Retention

希望在生產環境中以符合 GDPR 的方式使用 Claude/Gemini/GPT 的德國企業實用指南。PII 遮罩程式碼、應與誰簽署 AVV、直接向 Anthropic/Google(Enterprise)申請 Zero Data Retention、具 Request-ID 關聯的稽核日誌,以及 Schrems II 問題。

德國企業使用符合 GDPR 的 LLM——Claude 或 GPT 上線到正式環境前需要了解的事項。包含 PII 遮罩、稽核日誌、Anthropic/Google 的零資料保留,以及資料處理協議問題的實務設定。

三個必要組件

  1. 在向上游服務發出請求前遮罩 PII——不得未經篩選地將明文個人資料傳送給美國供應商
  2. 資料處理協議(AVV / DSGVO 第 28 條)——直接與模型供應商(Anthropic、Google、OpenAI)簽署;Kunavo 不提供 AVV
  3. 稽核軌跡——每次呼叫都可追蹤,並以目的限制原則記錄

1)PII 遮罩——實務部分

提示離開您自己的後端之前,會先經過遮罩步驟。電子郵件、電話號碼、人名、IBAN、社會保險號碼都會替換為權杖:

pii_mask.py
# Vor jedem LLM-Aufruf PII maskieren — niemals Klartext-Personendaten
# an die Upstream-API senden.
import re
from openai import OpenAI

PII_PATTERNS = [
    (re.compile(r"[\w.+-]+@[\w-]+\.[\w.-]+"), "<EMAIL>"),
    (re.compile(r"\b\d{4,}\b"), "<NUMBER>"),
    (re.compile(r"\b(?:\+49|0)\s*\d{2,4}\s*\d{4,8}\b"), "<PHONE_DE>"),
]

def redact(text: str) -> tuple[str, dict[str, str]]:
    redacted = text
    mapping: dict[str, str] = {}
    for i, (pat, tag) in enumerate(PII_PATTERNS):
        for match in pat.finditer(text):
            key = f"{tag}_{i}_{match.start()}"
            mapping[key] = match.group(0)
            redacted = redacted.replace(match.group(0), f"[{key}]")
    return redacted, mapping

def restore(text: str, mapping: dict[str, str]) -> str:
    for key, original in mapping.items():
        text = text.replace(f"[{key}]", original)
    return text

對照表只保留在本機。如果 LLM 回應需要重新插入個人資料(例如「Schmidt 女士您好」),我們會在收到回應後才進行替換。因此,上游服務看到的永遠只有匿名化文字。

2)AVV——誰需要哪一份協議

  • 你 ↔ Kunavo:Kunavo 不提供 DSGVO 第 28 條 AVV。Requests 會在美國處理並轉送給上游供應商;這些供應商如何處理內容,由其自身的隱私權和資料保留條款規範(請參閱 /legal/privacy)
  • 你 ↔ 模型供應商:如果你的工作負載需要 AVV,請直接依照 Anthropic、OpenAI 或 Google 的商業/Enterprise 條款與其簽署,並直接在該處呼叫模型。透過 Kunavo,你不會承接次處理者鏈
  • Schrems II 風險:Anthropic 和 OpenAI 位於美國。在沒有 AVV 的情況下,Kunavo 也不提供將資料傳送至美國所需的標準契約條款(SCC)。如果你的風險評估要求純歐盟供應商,Kunavo 不適合此用途:我們目錄中的供應商沒有一家位於歐盟,而每個 request 都會經由我們位於 US-East 的閘道

3)稽核日誌——記錄每次呼叫

每個 request:Request-ID、User-ID、模型、雜湊處理後的 prompt、token 用量、延遲時間;在你自己的 logs 中以 Request-ID 作為關聯鍵:

audit.py
# Jeder LLM-Aufruf wird in einem unveränderlichen Audit-Log festgehalten
import json, time, uuid
from datetime import datetime

def call_with_audit(user_id: str, prompt: str, model: str) -> dict:
    request_id = str(uuid.uuid4())
    redacted_prompt, mapping = redact(prompt)

    # Audit-Log VOR dem Call schreiben
    audit_log.write({
        "request_id": request_id,
        "user_id": user_id,
        "timestamp": datetime.utcnow().isoformat(),
        "model": model,
        "prompt_redacted": redacted_prompt,
        "prompt_hash": hashlib.sha256(prompt.encode()).hexdigest(),
        "pii_tags_count": len(mapping),
    })

    resp = client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": redacted_prompt}],
        extra_headers={
            "X-Request-ID": request_id,  # nur für deine eigenen Logs; Kunavo wertet ihn nicht aus
        },
    )

    response_text = resp.choices[0].message.content
    # Bei Bedarf PII zurück mergen (nur in der lokalen DB)
    final_text = restore(response_text, mapping)

    audit_log.write({
        "request_id": request_id,
        "response_redacted": response_text,
        "tokens": resp.usage.model_dump(),
        "duration_ms": int((time.time() - start) * 1000),
    })
    return {"text": final_text, "request_id": request_id}

X-Request-ID 是你自己的鍵:Kunavo 不會解析或儲存此標頭,而我們的用量儀表板不會顯示哪個上游供應商處理了某次呼叫。你可以在其中查看每次呼叫的 Kunavo 自有 Call-ID、時間、模型、token、費用和延遲;請透過時間和模型將其與你的稽核 log 對照。

Zero Data Retention(ZDR)——僅可直接向模型供應商取得

Anthropic 和 Google 預設會分別保留提示詞日誌 30 天(Anthropic)及 60 天(Google),用於濫用監控。對於涉及 GDPR 敏感資料的工作負載,你可以在供應商端、於自己的合約中直接申請 ZDR。Kunavo 不提供 ZDR 路由或 ZDR 層級:透過 Kunavo 發出的請求會在美國處理,並轉送給適用其自身保留規則的上游供應商。

  • Anthropic ZDR:供直接與 Anthropic 簽約的企業客戶使用。Kunavo 不提供
  • Google Vertex AI:在自己的 Google Cloud 合約中有類似條件,另可選擇 EU 區域(europe-west4/荷蘭)。Kunavo 不會經由 EU 區域路由
  • OpenAI:Zero Data Retention 僅適用於 Enterprise 層級,且須直接與 OpenAI 簽約。Kunavo 無法代為提供

資料駐留

  • Kunavo 路由:位於單一區域(US-East,Ashburn)的閘道中。只有前置的 Anycast Edge 會在您附近終止 TLS
  • 帳戶資料的持久化:單一主要資料庫位於 US-East,並每日建立加密磁碟區快照。我們不提供 EU-only 路由
  • 營業稅:結帳時不列示營業稅,也不會建立發票;如需會計憑證,請寫信至 contact@kunavo.com

多數合規團隊忽略的事項

  • 提示內容只要包含姓名,就屬於個人資料——即使使用者沒有輸入「Müller」,而只說「我叫 Petra」。遮罩應以啟發式方式擷取名字與專有名詞
  • 使用你的資料進行訓練在 Anthropic 和 Google 預設為關閉(不同於 ChatGPT 消費者方案)。Kunavo 本身不會使用你的內容進行訓練;上游供應商如何處理,則由其自身條款規範。Kunavo 不提供相關的合約保證
  • 雜湊輸出內容——如果您的 DPA 有此要求,我們只儲存雜湊值,不儲存完整文字
  • 刪除權——收到 GDPR 第 17 條請求時,您必須能從日誌中刪除提示。只有在您的稽核日誌可刪除時才能做到這點(也就是不能存放在僅可追加的區塊鏈結構中)

公司資訊與 Cookie 橫幅

如需完整的合規流程,請參閱我們依 DDG 第 5 條提供的 /legal/impressum,以及位於 /legal/privacy 的隱私權聲明。Cookie 橫幅請在你自己的網站上管理(例如使用 Usercentrics、Cookiebot 或 Klaro)——Kunavo 本身只會設定功能性 Cookie。

準備好了嗎?免費註冊,從 $10 起儲值,採 Pay-as-you-go,餘額永不過期。如果你的工作負載需要 AVV、ZDR 或 EU 資料存放地,請直接與模型供應商簽約。