チャットボットは記憶している—では、なぜモデル自体は記憶していないのか?
チャットボットは会話の初期の細部を流暢に参照し、記憶があるかのような説得力のある錯覚を作り出します。しかし、その基盤となるLarge Language Model (LLM) 自体には永続的な状態は存在せず、stateless function(ステートレス関数)として動作しています。すべてのやり取りは新しいリクエストであり、過去のやり取りを個人的に記憶しているわけではありません。
LLMの核心的なタスクは、現在の入力のみに基づいて次のtokenを予測することです。応答を生成し推論プロセスが終了すると、モデルはそのやり取りを個人的な記憶として保持しません。電卓を想像してみてください。計算を実行して結果を表示しますが、新しい数値を入力したときに前の計算結果を「記憶」してはいません。
あなたが体験する会話の継続性は、LLM内部の隠れた記憶によるものではなく、それを取り巻くアプリケーションによるものです。ChatGPTやClaudeなどで使用されているソフトウェアラッパーは、新しいプロンプトごとに会話履歴全体を先頭に付加することでこれを実現しています。過去のやり取りを再注入することで、モデルが記憶しているかのような洗練された錯覚を生み出していますが、実際には単に増え続ける入力を処理しているに過ぎません。
記憶のトリック:会話の再生
チャットアプリケーションは、ユーザーの新しいメッセージごとに、それまでの対話履歴全体を再送信することで会話の継続性を実現しています。この手法は「context window stuffing(コンテキストウィンドウ詰め込み)」とも呼ばれ、LLMが一貫した応答を生成するために必要なすべての情報を提供し、illusion of memory(記憶の錯覚)を作り出します。モデルは、この連結されたテキストを単一の拡張プロンプトとして処理します。
セッションをまたいで永続的に情報を呼び出すために、アプリケーションは重要な事実、ユーザーの好み、または過去のやり取りをデータベースやファイルに保存することができます。ユーザーが戻ってきたとき、アプリケーションはこれらの保存された詳細を取得して最初のプロンプトに挿入し、LLMが以前の情報を参照できるようにします。これは保存されたデータであり、モデル自体の本質的な記憶ではありません。
この記憶のトリックにはトレードオフがあります。長い履歴を繰り返し含めることは、やり取りごとに送信されるtokensの総数を大幅に増加させ、APIコストを増大させます。また、LLMのcontext windowには入力長の厳格な制限があり、シミュレートされた記憶の深さが制限されます。プロンプトキャッシングによって繰り返されるプレフィックスを最適化することはできますが、基盤となるモデルに永続的な記憶を与えるものではありません。
あなたの言葉はtokensを経由して迂回する
チャットアプリケーションが会話の再生を処理する一方で、Large Language Model (LLM) 自体はあなたの言葉を直接処理しているわけではありません。内部的に、LLMはtokensと呼ばれる数値表現で動作します。テキストがモデルに到達する前に、トークナイザーがそれをこれらのtoken IDのシーケンスに変換します。
Tokensは単なる個々の単語や文字ではありません。モデルのトレーニングデータが統計的に重要であると識別したテキストの塊です。「the」のような一般的な単語は1つのtokenになる可能性がありますが、「unbelievable」のような頻度の低い、あるいは複雑な単語は、「un」、「believe」、「able」といった複数の小さな断片に分割されることがあります。このサブワードトークナイゼーションにより、モデルは膨大な語彙を効率的に処理できるようになっています。
トークン数を理解することは、コンテキストウィンドウの制限やAPIコストに直接影響するため非常に重要です。一般的な目安として、1,000トークンは約750語の英語に相当しますが、テキストの内容によって変動します。OpenAI Tokenizer Toolなどのツールを使用すると、任意のテキストの正確なトークン数を確認できます。この変換プロセスはユーザーからは見えませんが、LLMが人間の言語を解釈・生成する仕組みの根幹を成しています。
この記事が気に入ったら、毎朝同じようなものをメールで受け取れます。
1日1通 · 2クリックで解除 · サードパーティのトラッキングなし
記憶しているふりをする真のコスト
記憶しているふりをすることには、現実的なコストが伴います。プロバイダーは価格設定やレート制限のために、入力と出力の両方のトークンをカウントします。そのため、やり取りのたびに増え続けるトランスクリプト全体を再送信すると、長いチャットほどコストが高くなります。一般的な英語のトークンは平均して単語の約4分の3に相当するため、数ページにわたる会話ではすぐに数千トークンが蓄積されます。
履歴を増やせば記憶力が向上するとは限りません。研究によると、膨大なプロンプトの奥深くに埋もれた重要な詳細は、モデルが「認識」しにくくなることがあり、これは「コンテキスト劣化(context degradation)」と呼ばれる現象です。トークン長に応じてスケーリングされるモデルのAttentionメカニズムは、長すぎる入力のすべての部分を効果的に重み付けするのに苦労する可能性があります。
保存されたチャットボットのメモリは、LLMのコア機能とは別のアプリケーション機能として扱ってください。サービスがどのような詳細を保存し、それを将来のやり取りにどのように活用しているかを確認しましょう。この違いを理解することが、ステートレス(状態を持たない)な強力なシステムを効果的に利用するための鍵となります。
詳細については、OpenAIのメモリヘルプページおよび基礎論文「Attention Is All You Need」を参照してください。
よくある質問
LLMは以前の会話を記憶していますか?
モデルはリクエストが終了した後に会話を保持することはありません。アプリ側がチャット履歴やユーザーの詳細を保存し、その後のプロンプトに関連情報を含めることで記憶しているように見せています。
なぜチャットボットは私を覚えているように見えるのですか?
チャットボットアプリケーションが以前のメッセージを再送信したり、保存された詳細を取得したりすることで、モデル自体には永続的なメモリがないにもかかわらず、会話が継続しているように感じられます。
LLMにおけるトークンとは何ですか?
トークンはテキストを表す数値単位です。一般的な単語全体であったり、あまり一般的でない単語の断片であったりし、モデルの制限やAPIコストに影響を与えます。
チャット履歴を再送信するとAIのコストは高くなりますか?
高くなる可能性があります。アプリがリクエストのたびにより多くの過去のメッセージを含めると、ターンごとに使用する入力トークンが蓄積されます。ただし、キャッシングによって繰り返されるテキストのコストが削減される場合があります。

