生成AIの安全な業務利用を支える!プロンプトモニタリングChrome拡張機能を内製した話
はじめに
近年、多くの企業でChatGPTをはじめとする生成AIの業務利用が急速に進んでいます。私たちMICINでも、日々の業務効率化のために積極的な活用を推奨しています。
一方で、生成AIの利用には情報漏洩のリスクが伴います。特に、医療情報という非常にセンシティブな情報を取り扱う私たちにとって、「意図せず個人情報や機密情報を入力してしまう」「入力したデータがAIの学習に利用されてしまう」 といったリスクは決して無視できません。
そこで私たちは、従業員が安全かつ安心して生成AIを使える環境を整備するため、プロンプトをリアルタイムでモニタリングするChrome拡張機能を内製しました。
この記事では、私たちが直面した課題や、それをどのように技術で解決したのか、開発したツールの裏側についてご紹介します。
なぜこのツールを作ったのか?(背景と課題)
MICINでは「すべての人が、納得して生きて、最期を迎えられる世界を。」というビジョンの実現に向け、日々様々なサービスを開発・提供しています。その過程で、従業員一人ひとりの生産性向上は非常に重要なテーマであり、生成AIはそのための強力なツールです。
しかし、自由な利用を推進するだけでは、以下のようなセキュリティリスクが懸念されます。
-
意図しない個人情報・機密情報の入力: プロンプトに顧客の氏名や連絡先、あるいは社外秘の情報を誤って含めてしまう。
-
入力データの二次利用(学習利用): サービス提供側の設定によっては、入力したデータがAIモデルの学習に使われ、意図せず情報が外部に流出してしまう。
これらのリスクに対し、ルールやガイドラインの策定はもちろん重要であり社内でも実施していますが、それだけではヒューマンエラーを100%防ぐことは困難です。かといって、利用を過度に制限しては、生産性向上の機会を逃してしまいます。
これらの課題に対応するためのDLP(Data Loss Prevention)のような商用ツールも市場には存在します。しかし、コストを最適化しつつ、自分たちのユースケースに特化した機能を迅速に実装できる、より柔軟なアプローチを模索していました。
そこで私たちは、「利用者の利便性を損なわず、技術的なガードレールで安全を確保する」 という方針のもと、ツール開発に踏み切りました。
開発した「プロンプトモニタ」の概要
開発したのは、Google Gemini、ChatGPT、Perplexityといった生成AIサービス利用時に、バックグラウンドで動作するChrome拡張機能です。
この拡張機能には、大きく分けて2つの機能があります。
-
プロンプト内の個人情報検知・警告
-
学習データ利用設定のチェック・警告
機能1: プロンプト内の個人情報検知
ユーザーが入力したプロンプトをリアルタイムでモニタリングし、個人情報や機密情報の可能性がある文字列を検知すると、以下のような警告ダイアログを表示します。
プロンプトに個人情報が含まれている旨の警告ダイアログ(タイピングでの入力)
プロンプトに個人情報が含まれている旨の警告ダイアログ(コピペでの入力)
これにより、ユーザーは送信前にリスクを認識し、内容を見直すことができます。うっかりミスを防ぐための、最後の砦のような役割です。
機能2: 学習データ利用設定のチェック
各生成AIサービスには、入力データをモデルの学習に利用するかどうかを選択するオプションがあります。この設定が意図せず「オン」になっていると、情報漏洩のリスクが高まります。
そこで、拡張機能が各サービスの設定を自動で確認し、「オン」になっている場合は「オフ」にするよう促す通知を表示します。
学習オプションがオンになっている旨の警告ダイアログ
これにより、全社的に「学習させない」状態を徹底しやすくなります。
機能3: 社内ガイドラインの常時表示
システムによる自動チェックだけでなく、利用者自身のセキュリティ意識を常に高く保ってもらうことも重要です。そこで、生成AIの利用画面上部に、社内の利活用ガイドラインで特に重要なポイントを要約したバナーを表示する機能を加えました。
社内のガイドラインが表示されている様子
これにより、「どのような情報が特に慎重な取り扱いを要するか」を常に意識しながら利用してもらうことを促しています。技術的なガードレールと、利用者のリテラシー向上の両輪で、安全な活用を目指すための機能です。
実装の裏側(技術的な詳細)
ここからは、エンジニアの方向けに少し技術的な話をします。
1. どうやって個人情報を検知しているか?
プロンプト内の文字列検知には正規表現を用いています。検知対象としているのは、以下のような情報です。
検出情報 | 説明 | 正規表現 |
---|---|---|
メールアドレス | “@”を含む文字列。@exmaple.com は例外 | /\b[A-Z0-9._%+-]+@[A-Z0-9.-]+.[A-Z]{2,}\b/gi |
電話番号 | 0X-XXXX-XXXX / 0XX-XXX-XXX / 0XXX-XX-XXXX などのパターン | /\b0\d{1,3}[-]?\d{3,4}[-]?\d{3,4}\b/g |
クレジットカード番号 | 各カードブランドの番号体系に一致するもの | (省略) |
パスポート番号 | 大文字2文字 + 数字7桁 | /\b[A-Z]{2}[0-9]{7}\b/g |
マイナンバー番号 | 数字12桁(完全一致) | /(?<!\d)\d{12}(?!\d)/g |
AWSアクセスキー | AKIA から始まる特定の文字列 | /\bAKIA[0-9A-Z]{16}\b/g |
名字 | 特定の連続する漢字2字、もしくは特定の文字列 | (省略) |
正規表現のチューニングはなかなか骨の折れる作業で、誤検知を減らす工夫をしました。例えばマイナンバーであれば、単に12桁の数字が文中に出てくるだけで警告が出ないよう、前後に数字が続かない(完全一致)ことを条件にしています。また、名字はHENNGE社が公開している正規表現のサンプルをチューニングして利用させていただいています。
2. どうやって学習オプションをチェックしているか?
これはサービスごとに挙動が異なるため、それぞれ別のアプローチで実装しています。
ChatGPTの場合
ChatGPTは幸いなことに、ユーザー設定を取得するためのAPIが提供されています。
-
まず /api/auth/session APIを叩いてアクセストークンを取得します。
-
次に、そのトークンを使って /backend-api/settings/user APIにリクエストを送り、設定情報をJSONで取得します。
-
取得した情報の中に、モデルの学習に関する項目(share_conversationsなど)があるので、その値がtrueになっていないかを確認します。
Perplexityの場合
Perplexityには設定値を取得するAPIが提供されていないため、直接設定値を確認する方法でチェックしています。
-
perplexity.ai/account/preferences の設定ページに一度リダイレクトさせます。
-
そのページ上で「AIデータ保持」のボタン要素(HTMLタグ)を取得し、その状態(オンかオフか)を直接確認します。
このように外部サービスの仕様に依存する部分は、サービス側のUI変更に影響を受けやすいという課題があります。
Geminiの場合
MICINではGoogle Workspaceを利用しており、入力データをAIの学習に利用させない設定がデフォルトで有効になっています。そのため、ユーザー個別の設定を確認する必要がなく、この拡張機能によるチェックは実装していません。
3. ユーザビリティへの配慮
セキュリティツールは、厳しすぎるとかえって業務の妨げになり、生成AIが使われなくなってしまう可能性があります。そこで、実用性を高めるため、警告ダイアログには、「OK」ボタンの他に 「しばらく止める」 ボタンを用意しています。
警告ダイアログ
これは、例えば「テスト用にダミーの個人情報を入力したい」といった正当な理由がある場合に、一時的に(8時間)モニタリングをオフにできる機能です。これにより、厳格なチェックと業務の柔軟性を両立させています。
まとめと今後の展望
MICINが生成AIの安全な利用環境を整備するために内製した「プロンプトモニタリングChrome拡張機能」について、その背景から技術的な詳細までご紹介しました。
今後の展望としては、
- 検知精度のさらなる向上(誤検知の削減、新たな機密情報パターンの追加)
- 社内からのフィードバックに基づく機能改善
- 生産性の向上に繋がる他の有力な生成AIサービスへの対応
などを進めていく予定です。
生成AIの活用は、もはやビジネスにおいて不可欠な要素となりつつあります。その恩恵を最大限に享受するためにも、セキュリティリスクへの対策は避けて通れません。私たちは、ルールによる統制と技術的なガードレールを組み合わせることで、今後も安全で便利な利用環境を追求していきたいと考えています。
本記事が同じような課題を抱えている企業の皆様の参考になれば幸いです。「もっとこうしたら良いのでは?」といったご意見なども大歓迎です!
謝辞
このツールは、2025年5月までインターンとして在籍していたMatsudaさんに開発を担当いただきました、本当にありがとうございました!
Discussion