ブログに戻る
技術長期記憶コンテキストエンジニアリングMellowz

AIはどのようにして数百ターンを記憶するのか:キャラクターチャットの長期記憶とコンテキストエンジニアリング

コンテキストウィンドウをいくら広げても、記憶の問題は解けません。数百ターンを経てもキャラクターがユーザーを覚えていられるかどうかは、モデルの大きさではなく、何を思い出し何を捨てるかを選ぶシステム設計の成果なのです。

バイブカンパニー

AIはどのようにして数百ターンを記憶するのか

二十通目のメッセージで、キャラクターは最初の約束を忘れてしまいます。ユーザーは一時間前に「猫のナビを飼っている」と話したのに、キャラクターはナビが誰なのかを聞き返します。華やかな第一声では表に出てこなかった問題が、会話が長くなるとまさにこの地点で噴き出すのです。

長い会話において、記憶は付加機能ではありません。プロダクトの信頼性そのものです。そしてこの問題は、よくある誤解のように「より大きなモデル」や「より長いコンテキストウィンドウ」で解けるものではありません。LongMemEvalベンチマーク(Wu 他、ICLR 2025)は、マルチセッションの会話履歴をそのままモデルに入れると精度が約30%低下し、難しい設定ではその下げ幅が30〜60%に達すると報告しています。長く入れるほどよく覚えるのではなく、むしろ覚えられなくなるのです。

本稿では、その隔たりを埋める方法を扱います。具体的な内部の設定値よりも、設計が解かねばならなかった制約と、その制約を解いた方法に焦点を当てます。

私たちがMellowzをつくる中でこの問題に正面から向き合ったのには理由があります。Mellowzはノベル風のAIキャラクターチャットプラットフォームです。ユーザーは一人のキャラクターと1対1で、あるいは複数のキャラクターと一つの部屋で、数百ターンにわたって物語を積み重ねていきます。各キャラクターには性格や口調、世界観を込めたロアブックとシナリオがあり、この設定は会話がどれほど長くなっても揺らいではなりません。ノベル風の体験において記憶とは、すなわち物語が途切れないという感覚であり、それこそがプロダクト価値の核心です。以下で扱う技法は学界と業界が公の場で確立してきたものであり、その上でMellowzがこの問題をどのような視点で捉えているのかを併せて述べていきます。

最も単純な答え:毎ターン全履歴を入れる

記憶を実装する最も直感的な方法は、これまでのすべての会話を毎ターンのプロンプトにそのまま入れることです。短い会話ではうまく機能します。だからこそ、多くのサービスがここから出発します。

問題は、広告にうたわれる100万トークンのウィンドウが「アーキテクチャ上の天井」であって「信頼できる作業長」ではない、という点にあります。ウィンドウに収まるということと、モデルがそれをうまく使えるということは別の話です。手当たり次第に詰め込むやり方は、ほどなく三つの壁にぶつかります。

手当たり次第の投入がぶつかる三つの壁

第一に、コストはおおよそ二乗で膨らみます。 商用のチャットAPIは状態を保存しないため、毎ターン全会話履歴を送り直します。履歴の長さは線形に伸びますが、毎ターンその全体を送り直すので、累積で課金される入力トークンはおおよそ二乗で増加します。100ターンの会話の累積課金は、1ターンの数千倍に達します。

第二に、最初のトークンまでの時間が延びます。 トランスフォーマーの自己注意は、系列長 n に対してレイヤーあたり O(n²) の時間とメモリを消費します(Vaswani 他、2017)。入力が長いほど、プリフィルが応答の最初のトークンまでにかかる時間(TTFT)を支配します。関係性のある会話において、応答の遅延は致命的です。

第三に、ウィンドウの内側でも品質が崩れます。 Liu 他の「Lost in the Middle」(TACL 2024)は、モデルがコンテキストの最初と最後はうまく活用するものの、中間に置かれた情報は取りこぼすというU字型の曲線を示しました。後続の研究はこれをより精密に測定しています。NoLiMa(Modarressi 他、ICML 2025)では、GPT-4oの有効精度が32Kトークンで99.3%から69.7%へ低下し、試験した12モデルのうち10モデルが32Kで短いコンテキストのベースラインの半分未満まで落ち込みました。Chromaの「Context Rot」レポート(2025)は、GPT-4.1、Claude 4、Gemini 2.5を含む18モデルにおいて、ウィンドウの限界に達するはるか手前から、入力が長くなるほど性能が低下することを示しました。

この三つは互いに異なる問題ですが、別々に作用するのではなく、複利で積み重なります。

だから記憶は「より大きなメモリ」ではなく「検索」です

ここで一度、視点を裏返さなければなりません。記憶を、際限なく伸び続けるチャットログとしてではなく、問い合わせ可能な保管庫として定義し直すのです。

図書館の司書を思い浮かべると直感がはたらきます。キャラクターのすべての過去の会話は図書館の蔵書全体のようなもので、一度に机の上にすべて並べることはできません。良い司書は質問を聞き、索引を通じて最も関連のある数冊だけを持ってきます。そして「ちょうど返却されたばかりの本」だけを取ってくる司書は、ひどい司書です。古い本であっても、いまの質問に最も的確なものを選ばなければなりません。記憶も同じです。最近だからという理由ではなく、関連があるという理由で思い出されるべきなのです。

この転換を受け入れると、設計の問題は二つに分かれます。何をどう保存するか、そして毎ターン何を呼び出すか、です。

コンピュータのように記憶する:階層型メモリとページング

この構造を最も鮮明に示した仕事がMemGPT(Packer 他、2023、のちに2024年9月にLettaへ改名)です。MemGPTは、オペレーティングシステムのメモリ管理から設計を借りてきます。

[ メインコンテキスト = RAM ]          速いが小さい
  - システム指示
  - 直近のメッセージ (FIFOキュー)
  - 書き込み可能な作業記憶
        ▲   ▼   関数呼び出しで page-in / page-out
[ 外部コンテキスト = ディスク ]        大きいが遅い
  - アーカイブ保管庫 (ベクトル検索)
  - 検索可能な全会話履歴

固定されたコンテキストウィンドウは物理メモリ(RAM)に、外部の保管庫はディスクに相当します。オペレーティングシステムがRAMより大きなメモリを「あるかのように」見せるのと同じく、エージェントはウィンドウより大きな記憶を持っているかのように振る舞います。決定的な飛躍は、エージェントが自ら自分のメモリマネージャになるという点にあります。何を内側に置き、何を外へ送り出すかを、モデル自身が決めるのです。たとえはここまでです。ここからは正確な用語で——メインコンテキスト、アーカイブ、ページング——語っていきます。

何を思い出すか:検索のスコアリング

呼び出しは、単純な意味的類似度検索ではありません。この部分を最も認知科学的に設計した事例が、スタンフォードのGenerative Agents(Park 他、UIST 2023)です。この研究は、各記憶に三つのスコアの加重和を割り当てます。

  • 新近性:時間が経つにつれて指数的に減衰します(減衰係数0.995、シミュレーション内部の時間が基準)。
  • 重要度:記憶を記録するその瞬間に、モデルが1から10までを付与します。歯磨きは1、別れや合格は10に近い値です。
  • 関連性:いまの問い合わせと記憶の埋め込みのコサイン類似度です。

三つの重みはすべて1に置き、各スコアは0と1のあいだに正規化したうえで合算します。肝心なのは、新近性ひとつで順位づけしないという点です。古いけれど重要で関連のある記憶が、たったいま交わされたものの無関係な雑談に勝ります。(付け加えると、Generative Agentsは2023年当時のGPT-3.5級のモデルで動作していました。貢献はベースモデルではなく、このアーキテクチャにあります。)

実務の検索は、たいてい一種類ではなく二つを組み合わせます。語彙を精密に捉えるキーワード検索(BM25)と、意味を幅広く捉える密な埋め込み検索(DPR、Karpukhin 他、EMNLP 2020——上位20件の検索精度でBM25を9〜19ポイント上回ります)を並走させ、二つの順位をRRF(Cormack 他、SIGIR 2009)で融合します。よく使われる定数 k は60前後ですが、これは原論文が掲げた値ではなく、実装の慣行として定着した既定値です。ハイブリッドが標準になった理由は、二つの方式が互いの失敗事例を補い合うからです。キーワードは同義語に弱く、埋め込みは正確な固有名詞に弱いのです。

何を捨てるか:要約による圧縮と記憶の種類

検索の相方は書き込みです。会話を丸ごと積み上げることはできないので、流れていく会話を意味の単位でまとめて圧縮します。ローリング要約と呼ばれるこの作業は、本質的に情報の損失と、コスト・規模とのあいだのトレードオフです。圧縮するほど安価で拡張しやすくなりますが、失われるディテールが生じます。

ところが、より重要な決定は、記憶を種類で分けることです。認知科学は古くからエピソード記憶(episodic)と意味記憶(semantic)を区別してきましたし(Tulving、1972)、エージェント設計も同じ分割を取り入れています(CoALA、Sumers 他、TMLR 2024)。二つの種類は、扱い方が正反対でなければなりません。

  • エピソードは不変であり、追記専用です。 「先週転職した」は起きた出来事であり、後から上書きしません。
  • 事実や選好は、更新とバージョン管理の対象です。 「コーヒーが好きだ」は信念であり、来月には変わりうるものです。

この二つを混ぜると、矛盾が積み重なります。「簡潔に答えて」という古い指示と「詳しく説明して」という新しい指示が同じ重みで残れば、モデルは両者のあいだで揺れるか、どちらも無視します。これが、長い会話で幻覚と一貫性の崩壊を生む中心的な失敗モードです。

Mellowzでも、この区別がキャラクターの一貫性を左右します。キャラクターに起きた出来事と、ユーザーについて更新される選好とは性質の異なる記憶であり、別々に扱わなければなりません。何を変わらない事実として保存し、何を更新可能な信念として置くかが、数百ターンを経たあともキャラクターが同じ人物のままでいられるかを決めるのです。

記憶とは別に崩れる「性格」:ペルソナドリフト

しばしば一括りにまとめられる二つの失敗を、分けて捉えなければなりません。ユーザーが言ったことを忘れるのは想起(recall)の失敗です。キャラクターが次第に自分自身とは違っていくのは振る舞い(persona)のドリフトです。二つは別の問題であり、別の解法を要します。

Li 他の「Measuring and Controlling Persona Drift」(COLM 2024)は、LLaMA2-chat-70Bのペルソナ安定性が、おおよそ8回目の会話ラウンドで急落し、モデルが次第にユーザーの口調に似ていくことを測定しました。逆説的に、より大きなモデルのほうがより多くドリフトするという報告もあります(Choi 他、2024、9つのLLMが対象)。ここから重要な含意が導かれます。どれほど検索をうまくやっても、想起は直せてもドリフトは直せません。ドリフトには、キャラクター定義の周期的な再注入、注意の再重み付け、一貫性の学習といった別の処方が必要です。そして、いかなる単一の技法も、この問題を完全に消し去ることはできません。減らせるだけです。

コンテキストエンジニアリング:有限な「注意の予算」の配分

ここまでのすべての技法——階層型メモリ、スコアに基づく検索、要約による圧縮、タイプの区別——は、一つの規律へと束ねられます。2025年に入って、この規律にはコンテキストエンジニアリングという名前が付きました。

この分野を定義づけた二つの文章があります。Tobi Lütke はこれを「タスクがLLMにとって解けるものになるよう、あらゆる文脈を提供する技術」と呼び(2025年6月)、Andrej Karpathy は「次のステップにちょうど合う情報でコンテキストウィンドウを満たす、繊細な技芸であり科学である」とまとめました。Anthropicのエンジニアリング記事(2025)は、コンテキストを「収益が逓減する有限の資源」、すなわち注意の予算として捉え、各ステップで「できるだけ小さな高信号トークンの集合」を選ぶことを核心的な原則として提示します。

旅行カバンを思い浮かべればよいでしょう。より大きなカバンを買っても、すべてを押し込めば、いざ必要なものが見つかりません。より長いコンテキストウィンドウも同じく、キュレーションの代替にはなりません。

「コンテキストエンジニアリングは結局のところ、RAGとメモリ、エージェントのオーケストレーションを新しい名前で束ねただけではないか」という批判もありえます。もっともな指摘です。ただ、散在していた技法を「有限な注意の予算の配分」という一つの設計の規律へと統合したところに、実質的な価値があります。

キャラクターが「記憶している」ように見える理由

キャッシュは、この絵の最後のピースです。同じプリフィックスを繰り返し処理せずに済むよう、商用APIはプロンプトキャッシュを提供しています(OpenAIは1024トークン以上のプリフィックスにキャッシュ入力50%割引、Anthropicはキャッシュ読み取りを基本入力の0.1倍に)。ただし、プリフィックスの1バイトでも変われば、それ以降がすべて無効化されます。タイムスタンプやUUID、ツールの順序のわずかな変化が、静かにキャッシュを壊します。何をコンテキストに入れるかを選ぶことは、品質だけでなく単価にも直接影響するのです。

これらすべてのレイヤーは、ユーザーには見えません。見えてもなりません。よくできた記憶システムは自らの存在を表に出さず、ただ「このキャラクターは私を覚えている」という感覚だけを残します。

Mellowzが目指すのは、まさにこの感覚です。数日ぶりに戻ってきてもキャラクターが前の話を覚えていて、設定が積み重なってもキャラクターが自分の世界を守り、会話が数百ターンを超えても応答が許容できる速度とコストの内側にとどまること。その結果として、ユーザーに「このキャラクターは私を知っている」と感じてもらうことです。

結論は単純です。AIはすべてを思い出しているわけではありません。毎ターン正しいものを選んでいるからこそ、記憶しているように見えるのです。記憶は、モデルの大きさではなく、システムの設計が生み出す成果なのです。


参考文献

Mellowzは mellowz.ai でお試しいただけます。技術およびプロダクトに関するお問い合わせは ceo@vibecompany.work までお寄せください。

대화할수록 깊어지는 AI로 사람을 연결합니다.

모든 창작자를 위한 기술을 만들고, 가장 인간적인 방법으로 관계를 연결합니다.