ゲームのAIメモリは章をまたいで保持すべきか?保持すべきものとリセットすべきものの実践的設計
章仕立てのゲームにおいて、AIメモリが章の境界を越えるべきなのは、後々重要になることが意図された永続的な事実を表している場合のみです。プレイヤーの誓約、確立された人間関係、確定した世界の設定などは、構造化されたオーサリング済みの記録に保持します。AIにはその記録から関連する小さなビューと、意図的に保持された記憶のみを取得させます。シーン固有のコンテキスト、一時的な目標、一瞬ごとの詳細情報は、次の章で明示的に必要とされない限りリセットします。ゲームのセーブデータが常に正本(オーソリティ)であり続けるべきです。生成された対話はそれを描写することはできても、暗黙のうちに書き換えてはなりません。
永続的な正史(カノン)とシーンのメモリを分離する
「メモリ(記憶)」という言葉は、出来事の記録、それらの出来事の要約や解釈、ゲームが真実として扱う事実など、さまざまなものを指す可能性があります。これらを混同すると、章の移行に関する論理的な判断が難しくなります。例えば、キャラクターがある噂を耳にしたとしても、AIがそれを確信を持って思い出したからといって、その噂が自動的に確定した世界の事実になってはなりません。
有用な設計は、関連する2つのレイヤーを維持することです。1つ目は、ゲームが管理する正本(カノニカル)の状態です。これは promised_to_return: true、gave_map_to: Mira、bridge_status: repaired といった構造化された事実です。これらはゲームのルールや明示的なオーサリングを通じて保存・変更されます。2つ目は、AIの取得ビューです。応答を形成するために提供される、厳選された事実、記憶、現在のシーンのコンテキストです。このビューは、セーブファイルそのものになることなく、簡潔でキャラクターに特化したものにできます。
この推奨事項はアーキテクチャ上の推論であり、特定の単一エンジンによって保証された機能ではありません。ナラティブスクリプティングシステムはすでに、ストーリー全体で読み取り可能なストーリー変数と、より狭いスコープを持つ一時的な値を区別しています。例えばInkは、グローバル変数と一時変数を分けてドキュメント化しています。そのランタイムは、ストーリーの状態をシリアライズおよび復元する方法も公開しています。これらの機能は有用なモデルを提供します。状態を意図的に表現し、各値に必要なスコープと永続性を決定するのです。Inkの変数とロジックに関するドキュメント、およびInkのランタイム保存と読み込みに関するドキュメント
章をまたぐ記録に残すに値するものを決める
候補となる記憶ごとに問いかけてみてください。「後のシーンが正当にこの事実に依存する可能性はあるか?そして、それを確認できる明確なゲームイベントやオーサリングされたルールは存在するか?」もし「はい」であれば、永続的な状態として保存することを検討してください。プレイヤーが付けた仲間の名前、果たされた約束、門が開かれたかどうかなどは、後のストーリーで使用される場合に該当する可能性があります。根本的な事実が明確に表現できる場合は常に、際限のない会話ログではなく、値とそのスコープを保存してください。
実践的な記録では、主体、事実、発生元のイベント、永続性のスコープを特定できます。例えば、subject: Mira; fact: player shared the map; source: chapter_2_choice_14; scope: campaign などです。発生元のイベントは、不整合を解決するのに役立ちます。もし後から生成されたセリフが「プレイヤーは地図を渡してしまった」と主張しても、記録された選択肢がそうでなければ、ゲームはイベントの記録を優先できます。このスキーマは設計の提案であり、引用されたツールによって義務付けられた形式ではありません。
不確実な情報や未確認の情報は明確に区別してください。「衛兵はプレイヤーが鍵を盗んだと疑っている」と「プレイヤーが鍵を盗んだ」は異なる事実です。章が終わった後もキャラクターは疑念を覚えているかもしれませんが、正本の世界の記録では鍵は元の場所にあるままです。後の対話でこれらの区別を維持する必要がある場合は、「噂(rumor)」「観察(observation)」「推論(inference)」「確定イベント(confirmed event)」などのラベルを使用してください。
現在のシーンに属するものをリセットする
シーンの状態には多くの場合、直前の会話の話題、一時的な目的、直前の数回のやり取り、局所的な立ち位置、現在どのドアが開いているかといった短命な詳細情報が含まれます。これらの詳細はAIが次のセリフを返すのに役立つかもしれませんが、キャンペーン全体のメモリになる必要はほとんどありません。シーンの終了時にこれらをクリアするか、次のシーンのオーサリングされた設定から再構築してください。
境界が重要なのは、永続性(パーシステンス)が文脈によって異なる意味を持つためです。Unityのデータ永続性チュートリアルでは、1つのセッション内でシーン間をプレイヤーに伴って引き継がれるデータと、セッションをまたいで保存・復元される進捗状況を区別しています。また、シーン内で作成されたデータは、ゲームが明示的に引き継がない限り、別のシーンに移動するときに通常失われることにも言及しています。したがって、章の移行は意図的な引き継ぎの決定であり、すべてのアクティブな値を自動的に保持する理由にはなりません。Unity Learn: Implement data persistence between scenes
4段階の移行ルーチンを試してみてください。確定した章のイベントをファイナライズする、正本のキャンペーン記録を更新する、一時的なシーンコンテキストを破棄する、そして次の章のAIコンテキストをオーサリングされた設定と関連する永続的な事実から構築する。これにより、古い詳細情報が新しいシーンに漏れ出すのを防ぎつつ、ストーリーが明示的にサポートする継続性を維持できます。
オーサリングされたセーブデータの権威を維持する
章の開始時には、ナレーションや対話のための読み取り専用コンテキストとしてAIに現在の状態を提供します。プレイヤーの行動によって永続的な事実が変化する可能性がある場合は、ゲーム自身のルールに照らしてその行動を検証し、通常の状態変更パスを通じてセーブ記録を更新してください。モデルの出力は、提案されたセリフや行動として扱い、イベントが発生したことの証拠としては扱わないでください。この分離は、セーブデータと生成されたテキストを区別する必要性から導き出された設計推奨事項であり、ゲーム自身のアーキテクチャ内で実装およびテストされるべきです。
物語研究には有用な前例があります。「Generative Agents」の論文では、経験を保存し、考察を統合し、選択された記憶を動的に取得して行動を誘導することが説明されています。これは、エージェントが考慮する事柄を形成するために検索と統合を使用することを支持しています。しかし、生成された回想が正本たるゲーム状態になるべきであることを証明するものではありません。この区別は重要です。要約は有用なコンテキストになり得ますが、それでも修正可能であるか、不完全なものにとどまります。Park et al., “Generative Agents: Interactive Simulacra of Human Behavior”
再現可能なセーブを行うには、ゲームの構造化された事実と、ゲームを再開するために必要なストーリーのランタイム状態を永続化します。Inkのランタイムドキュメントでは、ストーリーの状態をJSONにシリアライズし、再度読み込む方法が示されています。利便性のために生成された要約を保存することもできますが、ロード時には構造化された記録に照らして再構築または確認してください。古い要約が、新しく保存された選択肢を上書きすることがないようにしてください。Ink runtime: Saving and loading
プレイヤーに境界を可視化する
プレイヤーが内部のメモリ構造を見る必要はありませんが、どの選択が引き継がれたかを理解できるようにする必要があります。仲間が地図のことを思い出したり、後のシーンに以前の約束が反映されたりするなど、物語の中で自然に属する場所に結果を示してください。セーブ画面や章の要約が適切な場を提供している場合は、影響力のある確定した事実を平易な言葉でいくつか要約してください。すべての即興のセリフが永続的な正史になったかのように受け取られることは避けてください。
ゲームがその手段を提供している場合は、結果を伴うミスをプレイヤーが修正できるようにしてください(セーブデータのロード、決定のやり直し、明示的な修正インタラクションの使用など)。AIキャラクターが何かを誤って記憶している場合、対話によってそのエラーを新しい世界の事実としてプレイヤーに無理やり受け入れさせてはなりません。そのような修正オプションが存在するかどうかはプロダクトの判断ですが、根本的な原則は不変です。「記憶された主張」と「保存されたイベント」は代替可能なものではありません。
具体的なケースで章の移行をテストする
ゲームが実際に追跡する事実を中心に、小規模な移行チェックリストを作成してください。各ケースについて、セーブされた記録と、章の変更後に提供されるAIコンテキストの両方を検証します。
確定したプレイヤーの選択は永続し、オーサリングされたコンテンツがそれを使用する次の章に影響を与えることができるか。
噂やキャラクターの推論は、確定したイベントになるのではなく、不確実なものとしてラベル付けされたままであるか。
次のシーンで明示的に必要とされない限り、一時的なシーンの目標や直前の会話の詳細は消去されているか。
AIが以前に矛盾する文章を生成していたとしても、新しくロードされたセーブデータによって同じ正本の選択が復元されるか。
関連性のない新しい章に、単に存在するからという理由で無関係な記憶が渡されていないか。
これらのチェックは提案された診断方法であり、報告された実験ではありません。これらを使用することで、2つの典型的な不具合を見つけやすくなります。永続的な事実が消失する「継続性の喪失」と、リセットされるべき古いシーンの詳細がコンテキストに現れる「メモリの漏洩」です。どちらかが発生した場合は、プロンプトを長くして解決しようとする前に、永続性のスコープとコンテキスト構築の手順を確認してください。
章仕立てメモリのためのシンプルなルール
オーサリングされたゲームがその事実を命名でき、その発生元を確認でき、後の用途を定義できる場合に、その事実を永続化してください。個人の回想は、キャラクター性や継続性を加える場合には取得されたコンテキストとして保持しつつ、不確実性と出所を維持してください。境界においてシーン固有の状態をリセットします。あらゆる段階で、オーサリングされセーブされたゲーム状態に何が真実かを決定させ、AIメモリにはその真実に対してキャラクターが応答する手助けをさせてください。
