Stage Whisper が「全知の NPC」問題を解決する方法:コンテキスト分離アーキテクチャ
NPC が 3 セッション前に私のキャラクターが言ったことを引用できるのはかなりクールでした。メモリーシステムは機能していました。NPC は過去の出来事を参照し、私が言ったことを引用していました。しかし、それによって別の問題も始まりました:NPC が全知になり始めたのです。
以下は最近のセッションからの抜粋です。関連部分を強調しています:
「それで、葉擦れの音を軽々と超えて彼女の声が届く。『私を探しに来た本当の理由は何?好奇心、それともその散らかった机の残りを片付けるのを避けようとしてるだけ?』」
これは、このキャラクターが参加していなかったまったく別のシーンで起こったことを参照していました。キャラクターが知るはずのないことです。
このような小さな矛盾は没入感を壊します。しかし他のケースでは、ゲームを壊す可能性があります。例えば、私には、疑いを持たない人間の世界を進む秘密の吸血鬼というキャラクターのキャンペーンがあります。NPC が私の秘密を知っていることをさりげなくほのめかし始め、突然、疑われずに一日を過ごすのが非常に難しくなりました。あるいは他の例では、強盗の最中にアーティファクトを盗んだのに、関係のないキャラクターが怪しいコメントをするなどです。
AI は基本的に、ドラマチックな効果のためにコンテキスト内のどんな秘密でも使うことに決めました。これは実際にはプロット上の理由でごくたまにしか起こるべきではありません。
では、なぜ AI に「これをしないで」と指示できないのでしょうか?
問題は、ネガティブを達成しようとしていることです。「この情報を使わないでください」これは、ポジティブなケース(そこにある情報を使ってください)とは根本的に異なり、はるかに難しいタスクです。モデルに関連コンテキストを無視するよう訓練するには、情報が明確に利用可能なのに出力が意図的にそれを使わなかった状況の何千もの例が必要です。それは AI がするように設計されていることのほぼ正反対です。ほとんどのタスクでは、有用なコンテキストを無視することは仕事の失敗です。
概念的には、秘密に基づいて行動しない例をもっと増やしてモデルを訓練することは可能です。しかし、物語とロールプレイはこれまでモデル作成者にとって大きな焦点ではなかったため、この問題は当然の注目を集めていません。
この秘密の吸血鬼キャンペーンでこれを修正しなければならないと気づきました。キャンペーンは、私のキャラクターがほとんどの時間普通の人間として通ることができ、捕まらずにその緊張を乗り切ることが要点でした。NPC が秘密を知ったとき、それは大きな物語の瞬間になるはずでした。なぜなら、その後彼らはそれについて黙っているよう説得される必要があるからです。
私が発見したのは、ほとんどすべての潜在的な敵対者がどういうわけか知っていたということです。何も明かしていないのに。そしてそれは即座にプロットを壊しました。まるで私が吸血鬼だと告げる大きな看板が頭上にあるかのようでした。私のキャラクターは常にダメージコントロールをしているか、すべてのキャラクターが私に対してレバレッジを持っているように感じていました。
長い間プロンプトを試行錯誤しました。最終的に、情報をコンテキストにまったく含めないしかないと気づきました。
解決策は、コンテキスト分離です。AI が目にするものすべてを使わずにはいられないなら、情報は本当にそこにあってはいけません。これは Stage Whisper で実現可能です。各シーンとメモリーにはすでに登場する NPC のタグが付けられているため、実際にそこにいたキャラクターだけを含めるように簡単にフィルタリングできるからです。
しかし、ここに落とし穴があります。いくつかの秘密は主要なプロットドライバーです。単に完全に削除することはできません。ストーリーがそれらを考慮する必要がまだあるからです。強盗であれ、秘密の吸血鬼であれ、それらの秘密は物語の核心であり、それがなければ同じストーリーではありません。
そこで、テキスト生成を二つに分割する必要がありました。
最初の部分をストーリーディレクターと呼びます。これは全体のストーリー(プロット、物語の節目)を指揮します。すべての秘密を持っており、それらの秘密を考慮してストーリーを最適に展開する方法を決定できます。まだどのキャラクターも知るべきでないことも含めて、全体像を理解しています。
第二の部分をシーンディレクターと呼びます。これはストーリーディレクターから渡されたシーンを「演じ」ます。関連するすべての NPC メモリーと性格にアクセスできるので、すべての NPC を演じ、合間のナレーションを提供するのに十分な情報を持っていますが、秘密は本当に知りません。
いくつかの情報は一方から他方へ渡す必要があります。お互いに逆らわずに同じストーリーに取り組めるようにするためです。
ストーリーディレクターは、シーンディレクターに知る必要があることすべてを伝えるあらすじを生成します。次のようなものです:
<synopsis>
エリアンはメイヴと共に 314 号室に戻る。見事な展示の最中に集まった注目からのつかの間の休息を、見慣れたプライバシー結界が提供する。珍しい一日の後でメイヴが勉強を必要としているのを察し、エリアンは一人での探索のために部屋を離れることにする
<npc_list>maeve-corwin</npc_list>
<location>room-314</location>
<new_scene/>
</synopsis>
これはシーンディレクターに、シーンで何が起こっているか、どこか、誰がいるか、新しいシーンかどうかを伝えます。プレイヤーキャラクターの存在は前提とされています。ストーリーディレクターは、オプションでプレイヤーへの OOC トークや、自身の将来の使用のための詳細なパフォーマンスノートを出力することもできます。
二つのディレクターは同じコンテキストを見ません。分割は次のとおりです:
ストーリーディレクターが見るもの:
- GM ノート、セッションプラン、キャンペーンセットアップ、現在のキャンペーン状態を含む完全なキャンペーンファイル
- すべての秘密を含む完全なプレイヤーキャラクターシート
- すべての NPC、ロケーション、ロアのリスト
- セッションサマリーとまとめ
- 直近 2 シーンの完全な履歴
これが、ストーリーディレクターが面白く一貫したプロットの決定をするために必要なすべてです。大量のデータですが、KV キャッシュがコストを管理可能に保ちます。
シーンディレクターが見るもの:
- GM ノートを除いた部分的なキャンペーンファイル
- プレイヤーキャラクターシートの公開バージョン。秘密は省かれていますが、身体的外見や公的な評判(典型的な NPC が合理的に知っていること)は含まれています
- NPC が実際にいた最後のシーンの要約
- ロケーションの詳細
- 各 NPC が持つかもしれない最後の数個のメモリー
- ストーリーディレクターからのあらすじ
これは意図的に削減されたビューです。シーンディレクターは、シーンを運営するために必要なすべてを持ち、持つべきでないものは何も持っていません。
二つのキャラクターシート
公開と完全なプレイヤーキャラクターシートの区別が鍵です。ストーリーディレクターはストーリーを生成するために完全な詳細とすべての秘密を知る必要があります。しかし、シーンディレクターはそれらの詳細を知るべきではありません。それでも、プレイヤーキャラクターが物理的に誰であるか、どのように見えるか、公的な評判、NPC が単に周りにいるだけで合理的に察知することを知る必要があります。別の公開シートを維持することで、シーンディレクターは秘密にアクセスする必要なしに常にそのコンテキストを持てます。
シーンによるメモリーのフィルタリング
各シーンには、どの NPC が登場しているかのタグが付けられています。つまり、各 NPC に関連する最近のシーンを正確に把握し、それらをシーンディレクターのコンテキストに追加します。現在のセッション内のシーンは非常に関連性が高いという前提です。より古いメモリーについては、セマンティック検索が重要かもしれないものを表面化します。
結果として、シーンディレクターは本当にシーン内のキャラクターが知らないことを知ることができません。そう指示されたからではなく、その情報が物理的にそこにないからです。
私は、相続法のため家族の下級貴族の称号を確保するために男性の格好をしなければならない人間の女性というキャラクターのキャンペーンを運営しています。軽快なコメディキャンペーンで、その性別の混乱から生じるいくつかのコメディシナリオが特徴です。
このシステムがなければ、一般的に NPC を驚かせる方法はありません。彼らは皆、何かを疑っているかのように振る舞います。直接的ではないかもしれませんが、彼らがあなたに話しかける方法には常に「知っている」という感じがあります。言葉で説明するのは難しいですが、感じ取ることができます。秘密のアイデンティティのドラマチックな緊張感がそこにないのです。
しかし、このシステムがあれば、NPC は完全に素で演じます。彼らにはまったく見当がつきません。そして、大きな暴露が起こるシーンは本当に決まります。その時点までそれへの暗示がまったくないからです。コメディが機能するのは、観客である NPC が本当にそれを予想していないからです。
一つのエッジケースがあります。シーンディレクターは正確な秘密を知らないため、時折解剖学的に不正確な詳細を作ることがあります。シーンディレクターがそれらの詳細を含まない公開キャラクターシートで作業しているため、これは避けがたいことです。回避策は第三のステップを追加することです:ストーリーディレクターが生成されたシーンを公開前にレビューし、このような矛盾をキャッチします。これはコストとレイテンシーを追加するため、ロードマップにはありますがまだ実装されていません。
驚いたことの一つ:秘密がゲーム内で明かされたとき、それは自然に伝播します。シーンディレクターは以前に生成されたシーンを保持しているため、NPC がシーン内で何かを知ると、それが次のターンのコンテキストの一部になります。シーンの終わりに、それらのシーンは NPC のメモリーを形成します。セッションの終わりに、NPC シートが更新されます。これらの両方により、個々の NPC の秘密に関する知識が記録され、その NPC が今や本当に知っている状態でストーリーが続行できます。
トレードオフ
このアプローチは無料ではありません。コストは増加しますが、シーンディレクターのコンテキストは比較的軽いため、2 倍にはなりません。プロンプトキャッシュも大きく役立ちます。シーンが展開するにつれて、新しいターンがコンテキストの末尾に追加されるため、プロンプトの 90% は毎回新しく生成されるのではなくキャッシュから取得できます。
現在、すべてのキャンペーンで有効になっています。アーキテクチャの変更は、このセットアップをバイパスするパスを提供するのが意味をなさないほど重要です。ほとんどのキャンペーンでは、ストーリーに大きな秘密がなくても、NPC の一貫性は重要なので、トレードオフの価値があります。
これが可能にするもの:ゲームディレクター
2 段階パイプラインは有用なことを示しています:最適化されたコンテキストを持つより専門化された AI にタスクを分割すると、1 つの AI がすべてを行うよりも良い結果が得られます。これは自然な第三段階につながっています。
私はそれをゲームディレクターと呼びます。その仕事は TTRPG メカニクス(ダイスロール、スキルチェック、状態追跡)を処理することです。そのコンテキストは他のものとは異なる最適化が可能です。物語の履歴よりもゲームルールとゲーム状態に関心があるからです。
ゲームディレクターの追加には予期せぬ利点があります。プレイヤーがスキルチェックを必要とすることを試みる場合に備えて毎ターン実行されるため、プレイヤー入力が最後のシーンの継続か新しいものかも判断できます。プレイヤーがプロットを動かさずに NPC とただおしゃべりしているだけなら、ゲームディレクターはストーリーディレクターを完全にスキップし、シーンディレクターに単独でシーンを続行させることができます。シーンディレクターは NPC シートを持ち、メモリー検索ができるので、完全なストーリーディレクター呼び出しのオーバーヘッドなしにこのようにダイアログを継続できます。
これがアーキテクチャの向かっている方向です:ますます専門化され、すべての層に組み込まれたコスト削減の最適化を備えた 3 段階パイプラインです。
Stage Whisper は、長期キャンペーンの深さと一貫性を備えたソロ TTRPG をプレイしたい人のために作られています。このコンテキスト分離アーキテクチャを含むメモリーシステムがそれを可能にしています。始めるかDiscord に参加して、実際の動作を確認してください。
Stage Whisper のメモリーシステムについての詳細は、パート 1:物語の一貫性 と パート 3:NPC ドリーミングをご覧ください。