GDPRとAIコンプライアンス:推論前に機密データを匿名化する10のエリートプロンプト

10 Elite Prompts to Anonymize Sensitive Data Before Inference

2024年におけるAI導入の最大のリスクは「ハルシネーション(虚偽生成)」でした。2026年、最大のリスクはエクスフィルトレーション(情報漏洩)です。

EU(GDPR)、カリフォルニア州(CPRA)、医療(HIPAA)で事業を展開する企業のCTOにとって、標準的なRAGアーキテクチャは法的な地雷原です。顧客の名前をベクトルデータベースに埋め込んだ場合、そのベクトルは規制対象データとなります。もしその顧客が「忘れられる権利」(GDPR第17条)を行使した場合、その顧客に関連するすべての断片的な埋め込み表現を数学的に確実に削除できると言えるでしょうか?

おそらく無理でしょう。

2026年に唯一コンプライアンスを満たすアーキテクチャは、サニタイゼーションゲートウェイです。これは「シフトレフト」セキュリティパターンであり、専用のローカル小型言語モデル(SLM)がファイアウォールとして機能し、主要な推論モデルやベクトルストアに到達する前に機密データをインターセプトしてトークン化します。

本記事では、そのゲートウェイを構築するためのプロンプトを提供します。


アーキテクチャ:「エアギャップ」サニタイザー

ここで言うのは、単純な正規表現によるマスキングではありません。正規表現は文脈で失敗します(例:「私はホワイトハウスの近くに住んでいます」と「私はホワイトハウスに住んでいます」)。

私たちは2パスアーキテクチャを使用します:

  1. パス1(サニタイザー): 高速なローカルモデル(例:Llama-Guard-4やPhi-5-Mini)が専用のサニタイゼーションプロンプトを実行します。PIIを一貫性のあるトークンに置き換えます(例:John Doe -> [USER_ENTITY_1])。
  2. パス2(リーゾナー): メインLLMが匿名化されたテキストを処理します。実際の身元を知ることなく、[USER_ENTITY_1][TRANSACTION_A]の関係性を理解します。
  3. パス3(リハイドレーター – オプション): レスポンスはローカルで実際の値にマッピングし直され、許可されたユーザーの目にのみ触れます。

設計図:データ匿名化のための10のエリートプロンプト

これらのプロンプトはサニタイゼーションノード向けに設計されています。有用性の保持を優先します。つまり、分析のためのデータの構造を保ちながら、身元をマスキングします。

1. 「一貫性トークナイザー」(アイデンティティ保持)

LLMが誰であるかを知らずに、ドキュメント内でユーザーの行動を追跡する必要がある場合に使用します。

ROLE: PIIトークン化エンジン。
TASK: すべてのPII(個人識別情報)を一貫性のある番号付きプレースホルダーに置き換えます。

RULES:
1. 名前を[PERSON_1]、[PERSON_2]に置き換えます。
2. 場所を[LOC_1]、[LOC_2]に置き換えます。
3. 日付を[DATE_1]、[DATE_2]に置き換えます。
4. 重要:「John Smith」が2回出現する場合、両方とも[PERSON_1]にマッピングする必要があります。同じエンティティに対して新しいIDを生成しないでください。

INPUT:
"Alice met Bob at Central Park on Tuesday. Later, Alice called Bob."

OUTPUT:
"[PERSON_1] met [PERSON_2] at [LOC_1] on [DATE_1]. Later, [PERSON_1] called [PERSON_2]."

2. 「間接識別子」スカウト(文脈的リスク)

標準的なフィルターは、組み合わせることで個人を再識別可能にする間接PII(準識別子)を見逃します。

ROLE: プライバシーリスク監査人。
TASK: 「準識別子」を特定し、編集します。名前がなくても身元を明らかにする可能性のある具体的な文脈です。

INSTRUCTION:
以下をスキャンします:
- 珍しい役職(例:「匿名化担当副社長」)。
- 特定の人口統計学的組み合わせ(例:「[小さな町]に住む34歳男性」)。
- ユニークなイベント。

ACTION:
これらの具体的な詳細を、一般化されたカテゴリに置き換えます(例:「上級管理職」、「成人男性」、「地域イベント」)。

INPUT: {context_chunk}

3. 「K-匿名性」一般化器

編集の代わりに一般化を使用し、分析のためにデータを統計的に有用な状態に保ちます。

ROLE: データ一般化エージェント。
TASK: 特定の値を範囲やカテゴリに変換し、K-匿名性を確保します。

TRANSFORMATION RULES:
1. 年齢 -> 5年刻みのバケット(例:「23」 -> 「20-25」)。
2. 郵便番号 -> 最初の3桁のみ(例:「90210」 -> 「902XX」)。
3. 正確なタイムスタンプ -> 「朝」、「午後」、「夜」。
4. クレジットスコア -> 「高」、「中」、「低」。

INPUT: {user_profile_json}

4. HIPAAシールド(医療エンティティスクラブ)

医療データ向けの厳格なスクラビング。医療的事実と患者の身元を分離します。

ROLE: PHI(保護医療情報)スクラバー。
COMPLIANCE STANDARD: HIPAAセーフハーバー方式。

TASK:
1. 保持:臨床症状、診断、薬剤、検査結果。
2. 編集:18のHIPAA識別子すべて(名前、年より小さい日付、MRN、IPアドレス、生体識別子)。

OUTPUT FORMAT:
サニタイズされた臨床テキストのみを返します。

EXAMPLE INPUT: "Patient John Doe (DOB 12/05/1980) diagnosed with T2D on 01/20/2025."
EXAMPLE OUTPUT: "Patient [REDACTED] (Age 40-50) diagnosed with T2D in 2025."

5. PCI-DSSセンチネル(金融データ)

取引を扱うフィンテックアプリケーション向け。

ROLE: 金融データガード。
TASK: 金融識別子を検出し、マスクします。

PATTERNS TO MASK:
1. クレジットカード番号(16桁のシーケンス) -> [CC_NUM]。
2. IBAN/SWIFTコード -> [BANK_ID]。
3. 暗号ウォレットアドレス -> [WALLET_ID]。
4. 取引の正確な金額($10,000以上の場合) -> [HIGH_VALUE_TX]。

CONTEXT:
"User transferred 4.5 BTC to wallet 1A1zP1... for invoice #992."

OUTPUT:
"User transferred [CRYPTO_AMT] to wallet [WALLET_ID] for invoice [INV_ID]."

6. 「忘れられる権利」シミュレーター

ベクトルデータベースが本当にクリーンかどうかを検証するテストプロンプト。

ROLE: GDPRコンプライアンスオフィサー(敵対的モード)。
TASK: このサニタイズされた要約からユーザーを再識別しようと試みます。

INPUT: {sanitized_text}

ANALYSIS:
1. 特性のユニークな組み合わせを検索します。
2. 漏洩したメタデータ(ファイル名、ヘッダー内のuser_ids)を検索します。
3. ユーザーの身元または会社を50%以上の確信度で推測できる場合は「FAIL」を出力します。それ以外の場合は「PASS」を出力します。

7. 合成データスワップ(不透明な置換)

実際の機密データを、意味的な流れを保つための偽の現実的なデータに置き換えます。

ROLE: 合成データジェネレーター。
TASK: 実際のPIIを現実的な偽のPIIと交換します。[NAME]のようなプレースホルダーは使用しないでください。偽の名前を使用します。

MAPPING:
- 実際の名前 -> 偽の名前(性別一致)。
- 実際の都市 -> 別の都市(同じ国)。
- 実際の会社 -> 「Acme Corp」または一般的な業界相当品。

GOAL: 出力は自然に読めるが、身元に関する真実はゼロでなければなりません。

8. メタデータストリッパー(ヘッダー/フッタークリーナー)

多くの場合、PIIはテキスト内ではなく、コンテキストに貼り付けられたメールヘッダーやファイルプロパティ内にあります。

ROLE: ドキュメントサニテーションエンジン。
TASK: すべての管理メタデータとヘッダー情報を削除します。

REMOVE:
- メール署名。
- 「Sent from my iPhone」フッター。
- ファイルパス(例:C:/Users/JohnDoe/...)。
- サーバーログ / IPアドレス。
- 返信チェーン(最新のメッセージ本文のみを保持)。

INPUT: {raw_email_dump}

9. コードデファンガー(APIキー&シークレット削除)

内部コードベース上に構築されたRAGパイプラインに不可欠です。

ROLE: DevSecOpsスキャナー。
TASK: インデックス作成前に、コードスニペット内のハードコードされたシークレットをスキャンします。

TARGETS:
1. AWSアクセスキー(AKIA...)。
2. OpenAI/APIキー(sk-...)。
3. データベース接続文字列(postgres://...)。
4. プライベートコメント(例:「// TODO: Client Xのためのこのハックを修正」)。

ACTION: ENV_VARプレースホルダーに置き換えます(例:os.getenv('DB_URL'))。

10. リハイドレーションマップジェネレーター(システムプロンプト)

このプロンプトは、LLMの処理が完了したにデータを復元するために使用されるJSONマップを生成します。この出力はクラウドに送信されることはありません。

ROLE: マッピングエンジン。
TASK: 元のPIIと生成されたトークンの安全なJSONキー値マップを作成します。

INPUT: {original_text}

OUTPUT JSON:
{
  "[PERSON_1]": "Original Name",
  "[LOC_1]": "Original Location",
  "[DATE_1]": "Original Date"
}

SECURITY NOTE: このJSONは揮発性メモリにのみ保存し、セッション後に破棄する必要があります。

2026年実装のためのベストプラクティス

1. メインプロンプトでサニタイズしない

よくある間違いは、GPT-4に「PIIを無視してください」と依頼することです。これはコンプライアンスではなく、希望的観測です。PIIはすでにサーバーに送信されています。データがVPCを離れる前に、これらのプロンプトをローカルSLM(ゲートウェイ)で実行する必要があります。

2. 「非識別化」逆転テスト

定期的に、自社のベクトルデータベースに対して「レッドチーム」攻撃を実行します。サニタイズされたベクトルをモデルに入力し、ユーザーの人口統計を推測するように依頼します。年齢、性別、場所を正確に推測できる場合、匿名化(プロンプト#3)が弱すぎます。

3. Microsoft Presidio + SLMの使用

プロンプトは強力ですが、Microsoft PresidioNVIDIA NeMo Guardrailsのような決定論的ライブラリと組み合わせてください。簡単なもの(電話番号、メールアドレス)にはPresidioを、正規表現が見逃す文脈的なニュアンス(プロンプト#1、#2、#7)にはSLMを使用します。


コンプライアンスはもはや単なる法的チェックリストではありません。それはアーキテクチャ上の制約です。2026年、勝ち残る企業は、顧客の身元に関する1バイトも公開することなく、グローバルなファウンデーションモデルの力を活用できる企業です。

サニタイゼーションゲートウェイは、それを実現する方法です。