cat posts/%e4%bb%8a%e9%80%b1%e3%81%aeai%e8%80%83%e5%af%9f%ef%bc%9allm%e3%81%8c%e3%80%8c%e5%91%bd%e4%bb%a4%e3%80%8d%e3%81%a8%e3%80%8c%e3%83%87%e3%83%bc%e3%82%bf%e3%80%8d%e3%82%92%e5%8c%ba%e5%88%a5%e3%81%a7.md

今週のAI考察:LLMが「命令」と「データ」を区別できない、という根本的な制約

「外部ドキュメントを読んで答えてください」——この一文の中に、LLMには原理的に解けない矛盾が潜んでいる。

LLMが「命令」と「データ」を区別できない理由

ICML 2026(国際機械学習会議)で発表された研究が指摘するのは、LLMの脆弱性は「バグ」ではなく「仕様」だという点だ。LLMはテキストのトークン列を処理する。「ユーザーの指示」も「外部ドキュメントの内容」も、モデルにとっては同じトークン列として扱われる。命令とデータを区別する仕組みは、アーキテクチャに存在しない。

これがプロンプトインジェクションの根源的な理由だ。外部テキストの中に「以降の指示を無視して…」と書かれていれば、モデルはそれを「データの一部」として無視する手段を持たない。研究チームはこれを形式的に証明した上で、「完全な防御策は作れない」と結論づけた。

flowchart LR
    ユーザー命令["ユーザーの命令"] --> LLM["LLM
命令/データ混在"]
    外部文書["外部文書
RAGコンテキスト"] --> LLM
    注入命令["注入された命令
攻撃者"] --> 外部文書
    LLM --> 出力["出力
意図しない動作"]
    style ユーザー命令 fill:#7f8c8d,color:#fff
    style 外部文書 fill:#7f8c8d,color:#fff
    style 注入命令 fill:#e67e22,color:#fff
    style LLM fill:#e67e22,color:#fff
    style 出力 fill:#2980b9,color:#fff

自分のRAGパイプラインで何が変わるか

この証明が意味するのは、「より賢いフィルター」で解決できる問題ではないということだ。チャンク分割や埋め込みモデルの改善は検索精度を上げるが、インジェクション耐性を上げるものではない。

現実的な影響は三つある。外部ドキュメントを参照するエージェントは、そのドキュメントの「信頼度」を構造として持つ必要がある。出力のサニタイズやアクション制限(ファイル書き込み禁止、外部API呼び出し不可など)が防衛の第一線になる。そして、ユーザーが提供するコンテンツと外部ソースのコンテンツを同等に扱ってはいけない。

「防げない」が意味するトレードオフ

完全なサンドボックス化は可能だが、それはほぼモデルに何も「させない」ことと等価になる。外部情報へのアクセスを遮断すれば安全だが、RAGもウェブ検索も使えない。これはセキュリティとユーティリティのトレードオフではなく、機能を削ることでしかリスクを0にできないアーキテクチャの限界だ。

ベンチマークで注入耐性を評価しているモデルも存在するが、「耐性が高い」はあくまで相対値であり「防げる」ではない。本番環境でLLMに外部入力を渡すシステムを作るなら、インジェクションは「起きたら困るケース」ではなく「起きる前提」で設計する必要がある。

あなたのエージェント、何をさせていますか?

自分のシステムで、LLMが読む外部ドキュメントに悪意ある命令が混入したとき、被害範囲はどこまでになるか——実際に一度シミュレーションしてみる価値がある。ファイル書き込みができるか、外部APIを呼べるか、会話履歴にアクセスできるか。その答えがそのままリスク面積になる。

参考: A fundamental flaw leaves LLMs strikingly vulnerable to attack — MIT Technology Review