背景
ユーザーの発話は回答を組み立てる過程でいくつかの外部サービスへ渡っているメインの LLM はプライバシーポリシーで開示済みの委託先だがWeb 検索まわりは経路が別でクエリの中身を確認する仕組みが今のところ入っていない
普段のやりとりで問題になることはまずないが利用者が個人情報を含む相談を送ってきたときにその内容が検索クエリの一部として外部へ出る余地が残っている実害が出ているわけではないものの気付いたうちに塞いでおきたい
現状の経路
経路 渡るもの 現状のガード
メイン LLM 会話全文 プラポリで開示済みの委託先
Google Custom Searchserver/src/mastra/tools/google-search-tool.ts:89 LLM が生成した検索クエリ なし
Gemini グラウンディング検索server/src/mastra/agents/web-researcher-agent.ts:45 Gemini が生成したクエリで検索実行 なし
Gemini EmbeddingRAG 検索時のクエリ埋め込み 質問文そのもの なし委託先は同じ Google
Sentry エラーオブジェクトと threadId のみ 発話本文は乗せない設計のため問題なし
エージェントの instructions を見ても検索クエリに個人情報を含めない趣旨の指示は入っていないLINE でも Web 検索系のサブエージェントが有効になっているserver/src/mastra/agents/nepp-chan-agent.ts:274-281
なお MCPserver/src/mastra/mcp/playwright-mcp.tsはどこからも import されていないためMCP 経由の経路は現状ない
対応案
- ツール実行層でクエリを検査本命
検索ツールの execute 内でクエリを軽量 LLM に通して個人情報の有無を判定し検知したらマスクするか検索を止める外部送信の直前という確実な位置で止められるただしグラウンディング検索はクエリ生成が Gemini 内部で完結するため同じ手が使えず委譲プロンプト側の検査が別途必要になる
- instructions 強化 委譲入口の検査
メインと web-researcher の instructions に個人情報を検索クエリや委譲文に含めない旨を明記するあわせて Web 検索系への委譲テキストを検査する実装コストが小さくすぐ入れられる一方instructions だけでは保証にならない
- 入力全体の前段ゲート
パイプライン投入前に全入力を判定する網羅性は高いが全リクエストにレイテンシとコストが乗る個人情報を含む相談自体は受けたいという要件とも衝突しやすい
進め方
2 を先に入れて当面をしのぎつつ1 を本命として実装する
完了条件
- 検索クエリに個人情報が含まれる場合外部へ送信される前で止まる
背景
ユーザーの発話は回答を組み立てる過程でいくつかの外部サービスへ渡っているメインの LLM はプライバシーポリシーで開示済みの委託先だがWeb 検索まわりは経路が別でクエリの中身を確認する仕組みが今のところ入っていない
普段のやりとりで問題になることはまずないが利用者が個人情報を含む相談を送ってきたときにその内容が検索クエリの一部として外部へ出る余地が残っている実害が出ているわけではないものの気付いたうちに塞いでおきたい
現状の経路
経路 渡るもの 現状のガード
メイン LLM 会話全文 プラポリで開示済みの委託先
Google Custom Searchserver/src/mastra/tools/google-search-tool.ts:89 LLM が生成した検索クエリ なし
Gemini グラウンディング検索server/src/mastra/agents/web-researcher-agent.ts:45 Gemini が生成したクエリで検索実行 なし
Gemini EmbeddingRAG 検索時のクエリ埋め込み 質問文そのもの なし委託先は同じ Google
Sentry エラーオブジェクトと threadId のみ 発話本文は乗せない設計のため問題なし
エージェントの instructions を見ても検索クエリに個人情報を含めない趣旨の指示は入っていないLINE でも Web 検索系のサブエージェントが有効になっているserver/src/mastra/agents/nepp-chan-agent.ts:274-281
なお MCPserver/src/mastra/mcp/playwright-mcp.tsはどこからも import されていないためMCP 経由の経路は現状ない
対応案
検索ツールの execute 内でクエリを軽量 LLM に通して個人情報の有無を判定し検知したらマスクするか検索を止める外部送信の直前という確実な位置で止められるただしグラウンディング検索はクエリ生成が Gemini 内部で完結するため同じ手が使えず委譲プロンプト側の検査が別途必要になる
メインと web-researcher の instructions に個人情報を検索クエリや委譲文に含めない旨を明記するあわせて Web 検索系への委譲テキストを検査する実装コストが小さくすぐ入れられる一方instructions だけでは保証にならない
パイプライン投入前に全入力を判定する網羅性は高いが全リクエストにレイテンシとコストが乗る個人情報を含む相談自体は受けたいという要件とも衝突しやすい
進め方
2 を先に入れて当面をしのぎつつ1 を本命として実装する
完了条件