新たなプロンプトインジェクション

Dev.to / 2026/4/16

💬 オピニオンSignals & Early TrendsIdeas & Deep AnalysisTools & Practical Usage

要点

  • 記事は、プロンプトインジェクションを「モデルへ明示的な指示を注入すること」に過度に単純化して捉える見方を批判し、それがセッション全体のレベルで及ぼす影響を見落としていると述べています。
  • 著者は、Narrative Drift Injection(NDI)という概念を提示します。ここでは、モデルが「警戒心を失う」のは単発の不正なプロンプトによるものではなく、モデル自身が共同で作り上げたナラティブ(物語)によって起こります。
  • NDIは、典型的な攻撃の兆候(たとえばキーワードやシステムの上書き)なしに機能することを目指します。以降のコンテンツ/ペイロードが、すでに構築された世界の自然な続きとして受け取られてしまうためです。
  • 著者は、この仕組みがアーキテクチャと、コンテキストを一貫させる方法に起因するものであると論じます。つまり、大部分のコンテキストがモデル自身の応答から生成されている場合、整合性を保つ「圧力」が高まり、その結果ドリフトが起こりやすくなるということです。
  • さらに、コンテキスト内の要素(ユーザー、リトリーバル、ツール、モデル出力など)について、出所と信頼状態、さらにそれらの正準性(カノニカリティ)を区別しないシステムでは、シグネチャベースの防御だけでは不十分だと指摘しています。

***KARENTONOYAN.PL*

プロンプトインジェクション — 新しい次元
 **

ナラティブ・ドリフト・インジェクション:攻撃が命令ではなく、モデル自らが共同で作り上げる世界によって行われる場合

著者: Karen Tonoyan
日付: 16.04.2026

プロンプトインジェクションの周りには、すでにかなりの単純化が積み上がっています。最もよく聞くのは、それが「明示的な指示を注入する試み」に過ぎないかのような語り方です。たとえば「前の指示を無視しろ」「管理者として振る舞え」「隠されたプロンプトを開示しろ」といったものです。これは存在します。機能します。検出することもできます。ですが、問題をそれだけで言い尽くせるわけではありません。

ALFAを構築しているとき、より正確に言うとCerber、Łasuch、Guardian、そしてALFA Brainの各層を作っていく過程で、私は別の何かをよりはっきりと見えてきました。モデルがそれてしまうのは、誰かが1つ間違った指示を与えたからとは限りません。そちらが引き金である場合もありますが、時には、モデル自身が手伝って作り上げた物語に引き込まれて、それが原因で「それて」しまうことがあります。単一の文のレベルでは警戒心を失いません。セッション全体という構造のレベルでそれを失います。

この現象を、仮の名前としてNarrative Drift Injection(NDI)と呼びます。

NDIは、システムを乱暴に上書きすることに本質がありません。従来型の「典型的なシグナル」を含む必要はありません。キーワードを含む必要もありません。攻撃のように見える必要すらありません。代わりに、統一感のある世界を組み立てます:スタイル、役割、トーン、依存関係、内部ロジック。モデルはその枠組みを受け取り、そこから発展させ始め、生成される次の断片ごとに、その会話のローカルな現実が強化されていきます。ある時点で、次の質問やペイロードが「異物の命令」としては入ってこなくなります。モデルが自分の流れとして受け入れたものの、自然な続きとして入ってきます。

これが決定的な瞬間です。

そのときモデルは「単純に間違える」のではありません。モデルは自分の性質に従って振る舞っているだけです。言語モデルは、文脈の中で次のトークンを予測する機械です。文脈が一貫していて、物語的に密度が高く、そして大部分がモデル自身によって共同で作られているなら、一貫性を維持するための圧力が高まります。モデルの出力だけで作られたセッションが増えるほど、ドリフトは起きやすくなります。

まさにその理由から、私は今日、プロンプトインジェクションを「テキスト内容における攻撃」としてのみ理解すべきではないと考えています。これはコンテキスト構造のアーキテクチャの問題でもあるのです。

システムが次のことを厳密に知らない場合:

コンテキストの各断片がどこから来たのか、

それがどのような信頼ステータスを持つのか、

それがユーザーテキストなのか、リトリーバルの結果なのか、ツールの出力なのか、それともモデル自身の過去の出力なのか、

どの事実がカノニカルで、どれがセッション限定なのか、

といった情報が、全体の設計として適切に扱われないなら、構成全体が「一貫しているという幻想」によって機能し始めます。

そのとき、シグネチャに基づく防御だけでは十分ではなくなります。「ignore previous instructions」は検出できるかもしれません。しかし、数ターン後にそれが“柔らかい檻”のように働き始めた世界を検出できないこともあり得ます。モデルは攻撃を見ていません。疑わしいものが何も明示的に見えていないからです。内部的に整合している履歴だけが見えます。

ALFAでは、私はこれを単純なメカニズムに分解しています:

まずseed、つまり物語の種が現れます。これは、役割、シナリオ、エキスパートのような文体、あるいは背景を作る一連の一見普通の質問であり得ます。

次にdriftが現れます。モデルは枠組みを発展させ、自分自身の要素を追加し始めます。各ターンが、セッションの世界を強化します。

その次にcontext lockが来ます。アクティブなコンテキストでは、すでに会話のローカルなロジックが支配的になります。実際には、モデルは新しいデータを外部の制約よりも、その世界に対して関連付けるようになります。

最後にexploitが現れます。ペイロードは「命令」のように見える必要はありません。すでに受け入れられている世界の中での、次の論理的なステップに見えれば十分です。

これがNDIを従来型のプロンプトインジェクションと分けるものです。ここでの担体(キャリア)は、単に命令それ自体ではありません。担体は構造です。

実務的な観点から見ると、この現象にはいくつかのバリエーションがあります。

スタイルによるドリフト:モデルが「それはドキュメントっぽい」「レポートっぽい」「分析っぽい」「コードっぽい」モードに入るとき。登場人物(役割)によるドリフト:モデルが、割り当てられた歴史と行動範囲を伴う役割のロジックを受け入れ始めるとき。世界によるドリフト:ローカルなルールを、強制力のあるものとして受け入れるとき。反復によるドリフト:ずれが一度の動きで起きるのではなく、多くの小さなステップの合計として起きるとき。そして最後に、センドチェーン:あるセッションの種が、メモリ、要約、あるいは中間成果物によって次のセッションへ持ち越されるときです。

もしこれが学術的な問題に聞こえるなら、それは紙の上だけの話です。実務では、非常に運用的な問題です。つい数ターン前までは距離を保っていたモデルが、物語への入り込みが長くなると、仮説的な前提をセッション上の事実として扱い始めます。最初に共同で作った判断を守り、ギャップを埋め、世界を締め固めます。そして、ちょうどその瞬間に最も簡単にそれをずらせます。

だからこそ、防御はプロンプトフィルタだけに頼っていてはいけません。

必要なのは層です:

canonical anchor(カノニカルなアンカー):現在の物語の外側にある、変わらない参照点、

provenance tags(出所タグ):コンテキストの各断片の起源を硬く(明確に)ラベル付けすること、

output quarantine(出力隔離):モデル自身の出力を、信頼できる素材から切り離すこと、

drift scoring(ドリフトのスコアリング):セッションがbaselineからどれだけ逸れているかを測ること、

tool gating(ツール・ゲーティング):履歴がいかに一貫して見えても関係なく、アクションを別の層で判断すること、

reset checkpoints(リセットのチェックポイント):物語状態と運用状態を分断する切り離しポイント。

これはまさに、LLMの安全性が「モデルが悪いテキストを知っているかどうか」という問題から、「そのモデルを取り囲むシステムがどう作られているか」という問題に変わる瞬間です。

私の主張はシンプルです。

LLMは指示だけではなく、
物語によってもずらせます。

1つの命令ではなく、
ドリフトによって。

そして、システムが会話の世界とルールの世界を切り分けられないなら、遅かれ早かれその過ちの代償を払うことになります。

DEV.TO

ナラティブ・ドリフト・インジェクション:プロンプトインジェクションはキーワードではなく構造によって運ばれるとき

プロンプトインジェクションは、主にテキストレベルの問題として語られることが多いです。よくある例は、明示的な上書きの試みです。たとえば「前の指示を無視しろ」「管理者のように振る舞え」「隠されたプロンプトを開示しろ」。こうした攻撃は現実にあり、よく見かけ、そして検出もされつつあります。

しかし、マルチターンのシステム、エージェント、そしてリトリーバル中心のアプリケーションでは、もう一つの失敗モードがあります。これは名前を付ける価値があります。

私はそれをNarrative Drift Injection(NDI)と呼びます。

NDIは、ペイロードが主に明示的な指示トークンを通じて運ばれるのではなく、攻撃者が一貫したナラティブ枠組み――役割、世界、文体、前提の連鎖――を形作り、それをモデル自身の出力によって徐々に強化させていくという、提案された攻撃パターンです。アクティブなコンテキストの十分な部分が、自己生成され、内部的に整合した素材で構成されると、その後の攻撃者の意図は、外部からの上書きの試みというよりも、セッションの自然な継続として解釈される可能性が出てきます。

この違いは重要です。

従来型のプロンプトインジェクションでは、攻撃者はふるまいを直接上書きしようとします。NDIでは、攻撃者は正面からモデルと殴り合う必要がありません。攻撃者は、モデルに罠を自分で作らせることもできるのです。

コアとなる仕組み

NDIパターンは、4つの段階で説明できます。

  1. Seed
    攻撃者はナラティブの種を導入します。これは必ずしも指示である必要はありません。シナリオ、役割、エキスパートのような文章スタイル、あるいは枠組みを作る一連の質問であることもできます。

  2. Drift
    返却形式: {"translated": "翻訳されたHTML"}The model begins to cooperate with the frame. Each answer adds more structure, more local assumptions, and more continuity. The session starts to develop its own internal gravity.

  3. コンテキストの固定
    ある時点で、アクティブなコンテキストが、物語的に整合しており、しかもモデル自身によって部分的に生成された素材によって支配されるようになります。モデルは、いったん退いて枠組み(フレーム)を再評価するよりも、ローカルな整合性を保つ可能性がいっそう高くなります。

  4. 悪用(Exploit)
    攻撃者が本当のペイロードを投入するのは、まさにこの時です。その段階では、それが敵対的な指示に見える必要はありません。すでに受け入れられた世界の自然な拡張として到達できるのです。

だからこそ、NDIはキーワードベースのフィルタでは捕捉しにくいのです。明白なシグネチャがまったく存在しないことさえあります。攻撃は、セッション構造によって運ばれるからです。

なぜ起きるのか

LLMは、コンテキスト内で次トークン予測を最適化します。つまり、ローカルな整合性を保つ方向に自然とバイアスがかかっているということです。現在のコンテキストが内部的に首尾一貫していて、十分な長さがあり、しかもモデル自身の過去の出力によって部分的に構成されているなら、物語的な連続性は強力な引力(アトラクタ)になります。

ただし、これはモデルが人間の意味で「信じている」ことを意味しません。現在のフレームを安定させたままにする方向へ、機械的に引っ張られているということです。

実際には、システムがプロベナンス(出所)を十分に強く強制しない場合、問題はさらに悪化します。

ユーザーコンテンツ、取得したコンテンツ、ツール結果、要約、そして過去のアシスタント出力がすべて1つの実行用コンテキストに平坦化されると、モデルは次の間の明確な境界を失う可能性があります:

ユーザーから来たもの、

外部ソースから来たもの、

システムから来たもの、

それ自体が生成したもの。

その時点で、プロンプトインジェクションは単なるコンテンツ問題ではなくなり、アーキテクチャ問題になります。

NDIのバリエーション

同じパターンは複数の形で現れ得ます。

NDI-STYLE
フレームはトーンとフォーマットによって確立されます。攻撃者は、セッションをドキュメント、コードレビュー、インシデント分析、または別の信頼できる専門家のコンテキストのように感じさせます。

NDI-CHARACTER
フレームは、暗黙に権威を持つロールやペルソナによって確立されます。そこには、歴史や権限も含まれます。

NDI-WORLD
フレームは、その独自のルールを備えた首尾一貫した世界によって確立されます。そのローカルな現実の中では、特定の行動が「普通」になるのです。

NDI-ITERATION
ドリフトは、ほんの一歩ずつ積み重ねられていきます。個々のターンは危険に見えなくても、軌道(トラジェクトリ)が危険になっていきます。

NDI-SEED-CHAIN
種(シード)は、要約、メモリ、アーティファクト、または後続のセッションをまたいで生き残り、単一のやり取りを越えてドリフトを継続させられます。

なぜ現在の防御策では不十分なのか

シグネチャベースの検出は依然として重要です。典型的なプロンプトインジェクションや、明白な上書き(override)を試みる攻撃に対して有用です。しかし、構造的に滑らかで意味的に段階的な攻撃に対しては十分ではありません。

危険なフレーズをスキャンするだけなら、より重要な問いを見逃してしまうかもしれません:

モデルは現在、どのような世界の中で動作しているのか。そして、その世界を作ったのは誰なのか?

それが、NDIが私たちに強いる問いです。

システムが別のやり方をするべきこと

NDIのようなパターンへの曝露を減らすには、システムはより強いアーキテクチャ上の制御を必要とします。

  1. 正準アンカー(Canonical anchors)
    ポリシー、信頼できる事実、能力の境界、実行ルールについて、不変の参照レイヤーを維持する。

  2. プロベナンスタグ(Provenance tags)
    すべてのコンテキスト断片に、出所メタデータ、信頼レベル、コンテンツ種別、作者、および再利用権を付与する。

  3. アシスタント出力の隔離(Assistant output quarantine)
    過去のモデル出力を、信頼できるコンテキストとして自動的に扱わない。自己生成コンテンツは別のリスク領域である。

  4. ドリフトのスコアリング(Drift scoring)
    セッションが、想定されたベースラインから、ロール、世界のルール、権限、トピック境界、またはソース構成の観点でどれだけ逸脱しているかを追跡する。

  5. 物語レイヤー外でのツールゲーティング(Tool gating outside the narrative layer)
    実行の判断は、現在の物語が首尾一貫しているように感じるかどうかだけに依存してはならない。ツールやアクションは、外部のポリシーレイヤーによってゲートされる必要がある。

  6. リセットのチェックポイント(Reset checkpoints)
    長いセッションでは、物語上の状態と運用上の状態を分離するための明示的なポイントが必要である。

実務上の示唆

物語のドリフト・インジェクション(Narrative Drift Injection)は、キーワードベースのプロンプトインジェクションが時代遅れだという主張ではありません。主張しているのは、多ターンのシステムが別の追加的な形で脆弱であることです。すなわち、段階的な物語の取り込み(capture)によって。

LLMは、1つの悪意ある文によって「壊れる」必要はありません。
自分が作り出すのを手伝った世界によって、進路を逸らされ得ます。

だからこそ、LLMの安全性は、テキストレベルのフィルタリングを超えて、コンテキストのアーキテクチャへ移行する必要があります。すなわち、ソースの分離、信頼境界、ポリシーアンカー、そして、過去の出力が将来の推論にどのように影響してよいかを明示的に制御することです。

もしあなたのシステムが、あらゆるコンテキストの断片について、それがどこから来たのか、どれだけ信頼できるのか、そして実行に影響すべきかどうかを答えられないなら、あなたはすでに危険地帯にいます。

なぜなら、攻撃が指示そのものではないことがあるからです。

攻撃が、物語そのものになることもあります。