【要約】日本語プロンプトの個人情報を匿名化してClaudeへ送るチャットボットを構築した話 [Zenn_Python] | Summary by TechDistill
> Source: Zenn_Python
Execute Primary Source
// Problem
エンジニアがLLMを業務に導入する際、入力テキストに含まれる個人情報(PII)の外部送信がセキュリティ上の大きな障壁となる。筆者はPresidioを日本語へ適用する過程で、以下の技術的課題に直面した。
- ・単語境界(\b)が日本語の文字境界で機能せず、PIIの検出に失敗する。
- ・電話番号や郵便番号などの数字列が、文脈によって判別困難である。
- ・spaCyのNERが、ビジネス用語を人名や地名として誤検出する。
// Approach
筆者はPresidioの検出・匿名化エンジンを、日本語の特性に合わせて高度にカスタマイズするアプローチを採用した。具体的には以下の手法を組み合わせた。
- ・Lookaroundを用いた正規表現により、日本語隣接時の単語境界問題を解決。
- ・日本の定型PII(電話番号、住所等)をPatternRecognizerとして定義。
- ・文脈語(context)とスコア設計により、数字列の判別精度を向上。
- ・重複検出の優先順位付けとDenylistにより、誤検出・過検出を抑制。
- ・連番付きプレースホルダを用いた、可逆的なマスキング処理を実装。
// Result
この構築により、ユーザーは個人情報を保護しつつLLMの恩恵を享受できる環境を得た。具体的な成果は以下の通りである。
- ・Claude APIへは、マスク後のテキストのみが送信される安全なフローを実現。
- ・「<氏名_1>」のような一意のトークンにより、複数人の情報の正確な復号が可能。
- ・ユーザーが情報の外部送信と復号のタイミングを完全に制御できるUIを提供。
Senior Engineer Insight
> LLM導入時のガバナンス構築において、非常に実戦的な解である。Presidioの疎結合な設計を活かし、日本語特有の課題を正規表現とスコア設計で解決している点は評価できる。ただし、正規表現の維持管理コストや、形態素解析による文脈語の分割問題など、運用フェーズでのチューニング負荷は無視できない。スケーラビリティを考慮するなら、検知ロジックのマイクロサービス化を検討すべきだ。