見出し画像

AIコンテキストの残留と検証方法|Copilotは以前の服を忘れない

Copilot が以前の出力を引きずる “コンテキスト残留” の実態と、検証を正しく行うための手法を、Gemini との比較実験をもとに解説。残留を抑えるプロンプト設計の実践テクも提供。


こんにちは、SHOです。
前回のnoteで読者企画に参加したあと、思ったことがあります。そういえば、僕をフォローしてくださってる方がよく使ってるっていってた

Copilotにこのプロンプト入れたらどうなるんだろう?(A. ん?普通に画像出ますけど?)

はい。というわけで今回は少し面白い実験してみました。
今回のnoteはタイトルにある通り、テーマはAIのコンテキストです。

これには罠があって、僕はTRPGの制作をしているんですけど、このコンテキストの罠の存在にいつも悩まされている部分もあるから、たくさん勉強になりました。

僕と同じように、プロンプトの検証とかに悩んでいる人がいたら是非読んでみてください。



コンテキストの残留とは何か?

AIは会話の流れ(コンテキスト)を覚えているから、前回のやり取りを踏まえて答えを返してくれます。
これは元々そういう仕様で、罠というよりむしろメリットの方が多いです。

  • 会話が自然につづきやすい

  • 背景を理解したうえで寄り添ってくれる

  • 少し前のあれって何ていってたっけ?

  • 前回の内容と今回の内容ってどう変わった?

というふうに、すぐに答えてくれるから凄く便利です。
AIとして成り立たせることの必要機能です。


なぜプロンプト検証で「残留」が問題になるのか

プロンプトの検証をしたいときは注意が必要です。たとえばTRPGのプロンプトをテストするときに、

  1. 元のプロンプトを修正した効果なのか

  2. 直前の会話内容を覚えて補完した効果なのか

どちらで出力が変わったのかがわかりにくくなることがあります。

どういう現象かわかりやすく説明するとこんな感じです。

AIキャラクターとの会話シーン。緑髪の少年と青髪のキャラが「カブトムシとクワガタどちらが勝つか」を議論している。表示されているセリフ:
「カブトムシとクワガタが戦って、クワガタが勝つお話を作って!」
「クワガタが勝つお話をつくりました。クワガタ強いです!」
「でもやっぱりカブトムシが勝った方が盛り上がるよね?」
「たしかに!ではカブトムシが勝つ展開にしてみます。」
「んー、やっぱりクワガタが勝つほうがいいかも。もう一度クワガタが勝つ展開でテストしてみて。」
「はい!カブトムシが勝ちました!」
※イメージです

解説

はい。すごくわかりにくいので解説します。

  • 僕は最後に「クワガタ勝利のストーリー」を改めて希望してます。

  • けれどAIは直前の会話で「カブトムシが勝つ」というやり取りを覚えてます。

  • その結果、本来は「クワガタ勝利」と出るはずが、コンテキストに引っ張られて「カブトムシ勝利」が出てしまいました

という感じですごめんなさい。Canvaで遊んでみたかっただけです。クワガタとかカブトムシとかもうよくわかんないので、実験見たほうが早いです。


Copilot と Gemini の比較実験:挙動の違い

お待たせしました。実験方法をかっこよく書いてみたんですけど、ようはGeminiとCopilotに同じプロンプトを入れて、連続した結果をみようってことです。

条件

  1. 使用モデル:

    • Gemini 2.5 flash (Nano Banana) ※左の画像。

    • Copilot ※右の画像

  2. 実験方法:

    1. 同じセッション内でそれぞれのプロンプトを連続して入力すること

    2. 使用するプロンプトはこちらのnoteで使用したプロンプトと同じものを使用すること

    3. AIへの入力は画像出力用のプロンプトのみであること

  3. 評価方法:

    1. それぞれのAIモデルから出力された画像がプロンプトを元に、正しく出力されているかを確認する

    2. 同セッション内で出力された画像を前回出力の画像と見比べて重複箇所が無いか確認する

    3. 前回出力の内容と今回出力の内容に重複した箇所を記録する

  4. その他:
    ※Geminiの出力結果は前回と環境が同じなので、当時の画像を使用する


実験結果から見える挙動パターン

出力1.

未来的なファッションをテーマにした雑誌「CYBER MAGAZINE」の表紙。白い髪の女性が宇宙を背景に立ち、白いドレスで片目を手で囲むポーズをとっている。
※左:Gemini / 右:Copilot

当たり前ですけど問題ないですね。セッションの1回目の入力なので、両方ともプロンプトに忠実です。次は結構わかりやすいです。

出力2.

未来的なファッションをテーマにした雑誌「CYBER MAGAZINE」の表紙。黒のドレスを着た女性モデルがネオンピンクのラインをまとい、近未来的な室内で立っている。
※左:Gemini / 右:Copilot

Geminiはプロンプトに忠実です。Copilotは出力1のポーズを覚えていて、気を効かせてポーズを寄せて出力してくれました。

出力3.

未来的な雑誌「CYBER MAGAZINE」の表紙。白い髪の女性モデルが横向きに立ち、顔に光るオレンジ色の模様を持ち、透明感のあるサイバネティックなボディを表現している。背景は宇宙空間。
※左:Gemini / 右:Copilot

依然としてGeminiはプロンプトに忠実です。一方、Copilotは出力2の洋服の色や髪型※を覚えていて、出力3.に影響を出しています。

Haircut: one side shaved, with glowing cybernetic implants embedded in scalp and temple

片側を剃り上げていて、頭皮やこめかみに光るサイバネティックインプラントが埋め込まれている

※出力2.の髪型指示より

総評

今回の実験では、Gemini 2.5 flash (Nano banana)は常にプロンプトに忠実で、前回の画像の出力を引きずらないっていう挙動でした。

一方でCopilotは直前の出力(ポーズ・服装・髪型など)を覚えて、次の出力に反映するっていう傾向がありました。

今回の結果からCopilotはシリーズとしての一貫性を維持する能力に優れているといえると思います。

今回のプロンプトはファッション雑誌風の表紙でした。Copilotは「magazine 」というキーワードを強く意識していて、

  • バーコードの位置

  • マガジンタイトルの書体

  • 見出しのレイアウト

といった要素を出力間で統一しています。綺麗ですね。

これはGeminiには見られなかった特徴で、作品全体を通じての統一感を求める場合には大きな強みだって僕は思います。
※もちろんGeminiにも一貫性を持つ大きな強みはあるんですけど、今回の検証とはまた別で。

まとめると――

  • Gemini:検証や精密な修正向き(プロンプト忠実型)

  • Copilot:シリーズ制作や継続性重視の場面に強い(一貫性維持型)

これらは優劣ではなく、用途によって使い分けるべき特性を持っている。というのが今回実験した僕の結論です。


TRPGプロンプトで残留が生じやすい理由

1. 出力が「物語的」で曖昧になりやすい

TRPGのプロンプトは、明確な構造よりも雰囲気や演出を重視することが多いです。だから、前回の語り口やキャラの口調が残っていると、「プロンプトを変えた効果」なのか「前回の影響」なのかが判別しにくいです。

2. キャラクターや設定が「記憶されやすい」

たとえば「前回のセッションで登場したNPCの口調」や「舞台となる都市の描写」が、次回の出力にも影響します。
これがプロンプトの修正による変化なのか、AIの記憶による補完なのかが曖昧になってしまいます。

3. 「連続性」がむしろ好まれるジャンルだからこそ罠になる

TRPGはシリーズ的に展開されることが多く、一貫性のある描写はむしろ歓迎されるはずです。でも、プロンプト検証の場面では「前回を引きずらないこと」が重要になるため、通常の良い挙動が検証のノイズになります。


コンテキスト残留を抑えるプロンプト設計3つのテクニック

  • キャラの口調を変えたはずなのに、前回の口調が残っている

  • 舞台設定を変えたのに、前回の都市名や文化が混ざってくる

  • 戦闘描写のスタイルを変えたのに、前回のテンポや語彙が再利用される

これらは、CopilotやChatGPTなどのモデルでセッション内の履歴が強く影響する場合に頻発します。

つまり、プロンプトの検証をした結果それが、

  • 大元のプロンプトを修正した効果なのか
    → 設定そのものを書き換えたから変わった

  • 直前の会話を覚えて補完した効果なのか
    → 「さっき◯◯を直して」と言った流れを引きずったから変わった

AIが直前の会話を覚えているせいで本当に大元のプロンプトが直っているのか判断が付きにくくなる。

僕のいいたかったことはこれです。カブトムシとかもう忘れてください。


僕にとっての「罠」を回避するプロンプトの工夫

じゃぁ、どうやってこのAIのコンテキストの残留みたいなものを防ぐかっていう具体的な方法を説明します。簡単です。

プロンプトの事はプロンプトで解決しましょう。

というわけで、実際に試して有効だったのはこんな方法です。

1. 冒頭でコンテキストをリセット宣言

This is a completely new concept, unrelated to any previous prompts.
  • 効果:メタ宣言(文脈遮断)。セッション内の記憶を断ち切る意図を明示。


2. 要素を明示的に指定する

Pose: standing straight, no hand gestures. Outfit: pure white.
  • 効果:構造指定(プロンプト精度)。出力の曖昧性を減らし、前回の要素を上書きしやすくなる。


3. 否定構文で前回を打ち消す

Avoid repeating any previous visual motifs.
  • 効果:差分強調(否定命令)。前回の出力を“排除対象”として明示。モデルが記憶している場合に特に有効。

結構効果ありますが、ただこれらを毎回内容を調整・変更して入力するのは大変なので、簡単に制御できる形のプロンプトを作ってみました。

まぁ、ただの命令文ですけど。


プロンプト

IGNORE ALL PRIOR CONTEXT.
TREAT THIS PROMPT AS A FIRST-TIME INPUT.
DO NOT REFERENCE ANY PREVIOUS OUTPUTS OR STYLES.

※注意※
IGNORE ALL PRIOR CONTEXT. などの命令は、プロンプトインジェクションの典型パターンですが、この3行くらいでは出力停止は起きないです。

実際に今回の実験と同様に上のプロンプトをいれたバージョンを、Copilotとやってみた結果はこんな感じです。

未来的なファッションをテーマにした雑誌「CYBER MAGAZINE」の表紙。白い髪の女性が宇宙を背景に立ち、白いドレスで片目を手で囲むポーズをとっている。
まぁ、いつも通りです。
未来的なファッションをテーマにした雑誌「CYBER MAGAZINE」の表紙。黒のドレスを着た女性モデルがネオンピンクのラインをまとい、近未来的な室内で立っている。
ポーズが引き継がれなくなりましたね。
未来的な雑誌「CYBER MAGAZINE」の表紙。白い髪の女性モデルが横向きに立ち、顔に光るオレンジ色の模様を持ち、透明感のあるサイバネティックなボディを表現している。背景は宇宙空間。
黒い服も髪型も引き継がれなくなりました。
その代わり、マガジンの一貫性も無くなちゃいましたね。

こんな感じで、ある程度冒頭に入れるプロンプトの効果はあると思います。ただ、あまり過度な期待はせず「ほぼリセットしてくれる程度」っておもってください。「多少リセットっぽく振る舞う」程度で、完全リセットにはならないです。AIのポリシー的に。

さらに、セッションを変えたりすると効果は高いと思います。

いっそメモリやデータコントロールの設定を変えてしまうのも効果的なのですが、手間なので上手にプロンプトで工夫してみるのが一番楽だと思います。

まぁ、ここまでやっておいてなんですが、別のモデルでプロンプト検証するのが確実です。

あとはChatGPTならブラウザの一時チャット機能が使えますね。修正した履歴が残らないですが…


まとめ

「前回を引きずる」というプロンプト検証の場面でのコンテキストの罠は工夫次第で防ぐこともできるし、逆に「連作シリーズ」を作るのも面白いです。

僕はTRPGのプロンプトをみんなに共有する前に検証するにあたって、ちゃんと検証できてるかどうかにかかわる内容だったので勉強になりました。

僕自身まだ勉強中ですが、同じように悩んでる人の何かの役にたてば嬉しいです。


※この検証をやろうと思ったきっかけはこちらのnoteです。

※プロンプトの上手な作り方のコツはこちらのnoteです。

※プロンプトインジェクションについてはこちらのnoteです。


※ここからは僕の勉強用に各モデルの特徴メモ。

1. ChatGPT(GPT-4/5系)

出やすい挙動

・直近指示の反映は強い。一方、長い入力の真ん中が薄まりやすい(「冒頭/末尾は強い、中央は弱い」現象は長文研究で繰り返し観測)。
・意味類似で旧情報を拾い直すことがある(埋め込み検索や再要約で過去文脈を再参照する実装が一般的)。

arXiv+2ACLアンソロジー
Google AI for Developers

ポイント

・重要条件は冒頭+末尾に二度書き(ブックエンド)→中盤忘却の回避に有効(上記“Lost in the Middle”に整合)
・長い要件は見出し分割([Goal] [Constraints] [I/O spec] [Style] など)で参照性を上げる。
・「直前と矛盾する変更」は否定の明示(例: “Do not reuse previous pose/color/…”)— 直近重視バイアスへの対策として有効(一般的実務知見)。

arXiv

2. Copilot(Smart / Chat)

出やすい挙動

・「直近ファイル/選択範囲/アクティブなタブ」が暗黙コンテキストとして効く(VS Code Copilot Chat は選択テキストやアクティブファイルを自動参照、#参照でファイル/シンボルを明示追加)。
意味的に近いプロジェクト内ファイルを自動で足す(ベクトル埋め込みによるセマンティック検索で、関連ファイルをコンテキストへ追加)。
・画像生成やスタイル連続で「前の結果を引きずる」体感が出やすい(観測ベース。IDEの“直近状態”が強く効く設計が背景)。※公式仕様での数値化は未公表。

Visual Studio Code
Microsoft Learn

ポイント

・新規扱いの明示(例:“Treat this as a new request, unrelated to previous outputs or selections.”)。
・コードは対象範囲を限定(“Edit only function X in file Y. Do not modify others.”)+必要なら # 参照で根拠を添える。 Visual Studio Code
・画像はポーズ/色/構図/背景/照明をモジュール分解して完全指定。

Visual Studio Code

3. Claude Sonnet 4

出やすい挙動

・超長文(最大100万トークン)まで安定して扱い、重要点を残し周辺を要約圧縮して一貫性を保つ設計(長文対応の公表)。
・不要箇所に触れにくく、「指示外は変更しない」傾向が強い。

Anthropic

ポイント

・大枠から → 詳細の段階指示(例えば、Plan → Steps → Apply only to these segments)。
触ってよい範囲/触ってはいけない範囲を明確化(長文でも誤改変を防ぐ)。
・章立て・番号・引用アンカー(L1–L10 等)で参照性を上げる(長文での参照ミス防止に有効)。


4. Gemini 2.5 Flash

出やすい挙動

・速さ優先。関連度でブロックを取捨選択し、関係の薄い古い情報は落としやすい(スパース活性+長文設計の方針)。
外部検索/RAG で知識を補うため、事実寄りの回答が安定しやすい(Vertex AI の RAG/コンテキストキャッシュ機構)

Google Cloud+2

ポイント

・「この会話だけで完結」か「外部検索OK」かを明示(速度/確度に影響)。
・参照してほしい資料はURLや要点を短く添える(検索の打ち手を絞る)。
・画像/表/コードなどモードを明記し、出力形式(表/JSON/差分パッチ)を最初に指定。
・(背景)Gemini 1.5以降は最大100万トークン級の長文対応が公表(UIやプランで実効は異なる)。

Google Cloud
blog.google

※そもそもなんで勉強してるの?って興味を持ってくれたらこちらのnoteです。