Skip to content

Task 外部検索に渡すクエリに個人情報が混ざらないようにする #1113

Description

@vesperworks

背景

ユーザーの発話は回答を組み立てる過程でいくつかの外部サービスへ渡っているメインの 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 経由の経路は現状ない

対応案

  1. ツール実行層でクエリを検査本命

検索ツールの execute 内でクエリを軽量 LLM に通して個人情報の有無を判定し検知したらマスクするか検索を止める外部送信の直前という確実な位置で止められるただしグラウンディング検索はクエリ生成が Gemini 内部で完結するため同じ手が使えず委譲プロンプト側の検査が別途必要になる

  1. instructions 強化 委譲入口の検査

メインと web-researcher の instructions に個人情報を検索クエリや委譲文に含めない旨を明記するあわせて Web 検索系への委譲テキストを検査する実装コストが小さくすぐ入れられる一方instructions だけでは保証にならない

  1. 入力全体の前段ゲート

パイプライン投入前に全入力を判定する網羅性は高いが全リクエストにレイテンシとコストが乗る個人情報を含む相談自体は受けたいという要件とも衝突しやすい

進め方

2 を先に入れて当面をしのぎつつ1 を本命として実装する

完了条件

  • 検索クエリに個人情報が含まれる場合外部へ送信される前で止まる

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions