Sử dụng LLM tuân thủ GDPR trong các doanh nghiệp Đức — những gì bạn cần trước khi Claude hoặc GPT được đưa vào sản xuất. Thiết lập thực tế với che giấu PII, audit log, Zero Data Retention tại Anthropic / Google và câu hỏi về AVV.
Ba thành phần bắt buộc
- Che giấu PII trước cuộc gọi upstream — bạn không được gửi dữ liệu cá nhân dạng rõ đến các nhà cung cấp Mỹ mà không lọc
- Thỏa thuận xử lý dữ liệu (AVV / Điều 28 DSGVO) — ký trực tiếp với nhà cung cấp mô hình (Anthropic, Google, OpenAI); Kunavo không cung cấp AVV
- Audit trail — mọi cuộc gọi đều có thể truy vết và được ghi nhận theo đúng mục đích
1) Che giấu PII — phần thực hành
Trước khi prompt rời khỏi backend của bạn, nó sẽ đi qua một bước che giấu. Email, số điện thoại, tên cá nhân, IBAN và số bảo hiểm xã hội được thay thế bằng token:
# 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 textBảng ánh xạ chỉ được giữ cục bộ. Nếu câu trả lời của LLM cần trả lại dữ liệu cá nhân đã chèn (ví dụ “Xin chào bà Schmidt"), chúng ta chỉ thực hiện thay thế sau khi nhận câu trả lời. Nhờ vậy upstream luôn chỉ nhìn thấy văn bản đã ẩn danh.
2) AVV — ai cần hợp đồng nào
- Bạn ↔ Kunavo: Kunavo không cung cấp AVV theo Điều 28 DSGVO. Các yêu cầu được xử lý tại Hoa Kỳ và chuyển đến các nhà cung cấp upstream; cách họ xử lý nội dung được quy định trong chính sách bảo mật và lưu trữ dữ liệu riêng của họ (xem /legal/privacy)
- Bạn ↔ nhà cung cấp mô hình: nếu workload của bạn cần AVV, hãy ký trực tiếp với Anthropic, OpenAI hoặc Google theo các điều khoản kinh doanh hoặc doanh nghiệp của họ và gọi mô hình trực tiếp tại đó. Khi sử dụng Kunavo, bạn không kế thừa chuỗi bên xử lý phụ
- Rủi ro Schrems-II: Anthropic và OpenAI có trụ sở tại Hoa Kỳ. Không có AVV, Kunavo cũng không có các điều khoản hợp đồng mẫu (SCC) cho việc truyền dữ liệu sang Hoa Kỳ. Nếu đánh giá rủi ro của bạn yêu cầu một nhà cung cấp hoàn toàn thuộc EU, Kunavo không phù hợp: không nhà cung cấp nào trong catalog của chúng tôi có trụ sở tại EU, và mọi yêu cầu đều đi qua gateway của chúng tôi tại US-East
3) Audit log — ghi lại mọi cuộc gọi
Mỗi yêu cầu: Request-ID, User-ID, mô hình, prompt đã băm, mức sử dụng token, độ trễ; dùng Request-ID làm khóa tương quan trong nhật ký riêng của bạn:
# 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 là khóa riêng của bạn: Kunavo không phân tích hoặc lưu header này, và Bảng điều khiển sử dụng của chúng tôi không cho biết nhà cung cấp upstream nào đã xử lý một lệnh gọi. Tại đó, bạn sẽ thấy Call-ID riêng của Kunavo cho từng lệnh gọi cùng thời điểm, mô hình, token, chi phí và độ trễ; bạn đối chiếu với nhật ký kiểm toán bằng thời điểm và mô hình.
Zero Data Retention (ZDR) — chỉ trực tiếp với nhà cung cấp mô hình
Theo mặc định, Anthropic và Google lưu nhật ký prompt trong 30 ngày (Anthropic) hoặc 60 ngày (Google) để giám sát lạm dụng. Đối với workload nhạy cảm với DSGVO, bạn có thể yêu cầu ZDR trực tiếp với nhà cung cấp, theo hợp đồng riêng. Kunavo không cung cấp định tuyến ZDR hay cấp độ ZDR: các yêu cầu qua Kunavo được xử lý tại Hoa Kỳ và chuyển tiếp đến các nhà cung cấp upstream, tuân theo chính sách lưu giữ riêng của họ.
- Anthropic ZDR: dành cho khách hàng Enterprise theo hợp đồng trực tiếp với Anthropic. Không khả dụng qua Kunavo
- Google Vertex AI: điều kiện tương tự theo hợp đồng Google Cloud riêng, cùng khả năng chọn khu vực EU (europe-west4 / Hà Lan). Kunavo không định tuyến qua khu vực EU
- OpenAI: Zero Data Retention chỉ dành cho Enterprise Tier, theo hợp đồng trực tiếp với OpenAI. Không thể cung cấp qua Kunavo
Nơi cư trú dữ liệu
- Định tuyến Kunavo: trong gateway, tại một khu vực duy nhất (US-East, Ashburn). Chỉ edge Anycast phía trước mới kết thúc TLS ở gần bạn
- Dữ liệu tài khoản được lưu trữ: một cơ sở dữ liệu chính duy nhất tại US-East với các snapshot volume được mã hóa hằng ngày. Chúng tôi không cung cấp định tuyến chỉ trong EU
- Thuế GTGT: Trang thanh toán không hiển thị thuế GTGT và không lập hóa đơn; để nhận chứng từ kế toán, hãy viết tới contact@kunavo.com
Điều mà hầu hết các đội ngũ tuân thủ bỏ sót
- Nội dung prompt là dữ liệu cá nhân nếu chứa tên — ngay cả khi người dùng không nhập “Müller” mà chỉ viết “tôi tên là Petra”. Việc che giấu nên dùng heuristic để nhận diện tên riêng đầu tiên và các danh từ riêng
- Việc huấn luyện trên dữ liệu của bạn mặc định bị tắt tại Anthropic và Google (trái với ChatGPT dành cho người tiêu dùng). Kunavo không tự huấn luyện trên nội dung của bạn; cách nhà cung cấp upstream sử dụng nội dung đó được quy định bởi điều kiện riêng của họ. Kunavo không đưa ra bảo đảm theo hợp đồng về vấn đề này
- Băm nội dung đầu ra — chúng tôi chỉ lưu hash của bạn, không lưu toàn bộ văn bản, nếu DPA của bạn yêu cầu
- Quyền xóa — khi có yêu cầu theo GDPR Điều 17, bạn phải có khả năng xóa prompt khỏi log. Điều này chỉ hoạt động nếu audit log của bạn có thể xóa (tức không nằm trong cấu trúc blockchain chỉ ghi nối tiếp)
Thông tin pháp lý & banner cookie
Để có quy trình tuân thủ đầy đủ, xem /legal/impressum của chúng tôi theo § 5 DDG và chính sách quyền riêng tư tại /legal/privacy. Bạn quản lý banner cookie trên website riêng của mình (ví dụ bằng Usercentrics, Cookiebot hoặc Klaro) — bản thân Kunavo chỉ đặt cookie chức năng.
Sẵn sàng? Đăng ký miễn phí, nạp từ $10, thanh toán theo mức sử dụng, số dư không bao giờ hết hạn. Nếu workload của bạn cần AVV, ZDR hoặc nơi lưu trú dữ liệu tại EU, hãy ký hợp đồng trực tiếp với nhà cung cấp mô hình.