AIエージェントに検索をさせる場合、クエリに個人情報やトークンが勝手に送信されないような工夫を実施してみます。今回は、Microsoftが開発した個人特定情報(PII)の検出・匿名化用オープンソースフレームワーク「Presidio」の実装をテストしてみます。
なお、検索側にはSearXNGを利用しますが、契約したAPIの利用など、各エンジンの利用規約に注意してご利用ください。
利用するライブラリは以下になります。
presidio-analyzer
presidio-anonymizer
テキスト(クエリ)解析には、spaCyを用いているようです。デフォルトではpresidioは英語(en_core_web_lg)のモデルを使います。日本語モデル(ja_core_news_lg)を利用すれば日本語にも対応できます。日本語の場合は、「日本語(ja)」の設定に加え、分かち書きのためにsudachiも必要となります。
さらに精度を上げたい場合、今どきのGPUであればBERTベースのカスタムモデルをローカルでファインチューニングすることも簡単にできます。また、このライブラリは、固有表現抽出(NER)だけでなく、パターン認識(Regex)もマッチングでの排除もできますし、匿名化処理もできます。なにより、ローカルLLMを使うよりも軽量です。
プロンプトインジェクション検知機能はありませんが、プロンプトインジェクションにありがちな表現をNER学習させてしまえば、同じ要領で高速なフィルタリングが可能だと考えます。
ちなみに、LLMの外部ツール接続規格である「MCP」でツールを公開する場合は、LLM向けのdescription(説明文)に「秘密情報は入力しないでね」と明記するようにしています。お守りですね。
解析に利用されているspaCyは、長く開発されてきた言語処理ライブラリで安定感があります。
作ってみたものはこちら