チャットボットや社内AIアプリは、ユーザーの氏名やメールアドレスをそのまま外部LLMに送りがちです。Microsoftが公開するオープンソースのPresidioなら、推論の前に個人情報(PII)を検出し、マスクや匿名化で守れます。

この記事では、Presidioの仕組みとLLMパイプラインへの組み込み方を整理します。

  • Presidioが検出・匿名化できるデータの種類
  • AnalyzerとAnonymizerの役割分担
  • LLMに送る前後で使う「サンドイッチ」構成
  • 導入時に押さえるべき制限と注意点

Presidioとは何か

Presidioは、MicrosoftがGitHubで公開しているデータ保護・非識別化向けのPython SDKです。名前はラテン語の「praesidium(防衛)」に由来し、テキストや画像、構造化データからPIIを見つけて、マスク・削除・ハッシュ化・暗号化などで変換します。

リポジトリはMITライセンスで、2018年から開発が続いています。2026年3月18日時点の最新リリースは2.2.362で、Hugging Face向けNER認識器の追加やGPU制御の改善が含まれています。単なる新規公開ではなく、LLM利用が広がるなかで「推論前のPIIガードレール」として再注目されているツールです。

なぜLLMアプリにPII保護が必要か

LLMへ送るプロンプトには、問い合わせ文面に混ざった氏名、電話番号、クレジットカード番号、医療情報などが含まれることがあります。これらがそのまま外部モデルやログ基盤に渡ると、GDPRやHIPAAなどのコンプライアンス違反や情報漏えいのリスクが高まります。

OWASPのLLMアプリケーション向けリスク一覧でも、機密情報の漏えい(LLM02)は主要な脅威として挙げられています。対策の基本は、プロンプトを組み立てる前にPIIを除去し、必要なら応答後に元の値へ戻すことです。Presidioはこの前処理・後処理を担うライブラリとして位置づけられます。

4つのモジュール構成

Presidioは用途別に4モジュールに分かれています。

presidio-analyzerはテキスト内のPIIを検出します。正規表現、拒否リスト、チェックサム、ルールベースの判定に加え、spaCyやStanza、Hugging Face TransformersなどのNER(固有表現認識)モデルも使えます。周辺語の文脈も参照し、誤検知を抑える設計です。

presidio-anonymizerは検出結果を匿名化します。redact(削除)、replace(置換)、hash、encryptなどのオペレーターを組み合わせられ、暗号化した値は後から復元することも可能です。

presidio-image-redactorは画像内のPIIをOCRで読み取り、赤塗りします。一般画像に加え、医療向けのDICOM形式にも対応します。

presidio-structuredは表形式や半構造化データの自由記述フィールド向けです。コメント欄やアンケート回答など、構造化データの中に埋もれたPIIを扱えます。

LLMパイプラインへの組み込み方

実運用では、ユーザー入力をLLMに渡す直前にPresidioで匿名化し、応答を受け取ったあと必要な箇所だけ復元する「サンドイッチ」構成が一般的です。匿名化後のテキストだけがモデル側に届くため、第三者インフラへ生のPIIが流れる経路を断てます。

MicrosoftのGenAIゲートウェイ参考アーキテクチャでも、Azure API Management(APIM)の前段でPresidioを呼び出し、リクエスト本文をマスクしてからAzure OpenAIへ転送する構成が示されています。APIMのインバウンドポリシーで匿名化、Outboundで復元すれば、アプリ側のコード変更を最小限に抑えられます。

さらにMicrosoftはPresidioを中核にした「PII Shield」も紹介しており、spaCyやONNX、Transformersなど複数のNLPバックエンドを切り替えながら、組織固有の認識ルールを追加できる設計です。自前ホストのOSSモデルでも、クラウドのマネージドLLMでも、ゲートウェイ層に同じ保護を載せる発想が共通しています。

Pythonから使う場合の流れは次のとおりです。AnalyzerEngineで対象エンティティを指定して解析し、AnonymizerEngineでオペレーターを適用します。PySpark、Docker、Kubernetes、HTTPサービスとしての起動にも対応しており、バッチ処理とリアルタイム推論の両方に載せられます。

料金とライセンス

Presidio本体はMITライセンスのオープンソースで、利用料はかかりません。ただしライブラリ単体では認証や監査ログは備わっていないため、本番運用ではAPIゲートウェイやKey Vault、ログマスキングなど周辺のセキュリティ基盤と組み合わせる必要があります。クラウド上で動かす場合は、コンテナやVMのインフラ費用が別途発生します。

類似アプローチとの違い

Azure AI Languageの組み込みPII検出はマネージドAPIとして手軽ですが、カスタム認識器やオンプレミス運用の柔軟性はPresidioの方が高い傾向にあります。商用のLLMガードレール製品はポリシー管理やダッシュボードが充実していますが、Presidioは検出・匿名化ロジックを自社環境で完全にコントロールできる点が強みです。検出精度を上げたい場合は、業界固有の番号体系向けにカスタムrecognizerを追加する拡張が公式ドキュメントで案内されています。

導入前に知っておく制限

公式ドキュメントは、Presidioが自動検出に依存する以上、すべての機密情報を見逃さない保証はないと明記しています。医療や金融など高リスク領域では、Presidioに加えてアクセス制御、出力フィルタ、保持期間の制限を重ねる必要があります。またNERモデルの選定で速度と再現率のトレードオフが生じます。spaCyはCPU推論が速く、Transformersは精度重視の用途に向きます。PII Shieldの説明でも、用途に応じてバックエンドを切り替える設計が推奨されています。

LLMを本番導入するなら、モデル選定と同じくらい「何を外部に出さないか」を設計段階で決めるべきです。Presidioはその防衛線をOSSで実装するための、現時点でもっとも手が届きやすい選択肢の一つです。