📖 この記事は「AI Agentを解剖する」シリーズの第2回です。← 前回:AI AgentはAIではない

昔の映画『50回目のファースト・キス』では、主人公の女性が毎朝起きるたびに前日の出来事をすべて忘れます。男性主人公は彼女と一緒にいるために、毎日自己紹介をして、毎日もう一度関係を作り直します。

AI Agentの状況はこの映画にかなり似ています。しかももっと深刻です。言語モデルは会話のたびに再起動していて、毎日どころではありません。

なぜモデルは何も覚えていないのか?

基本に戻ると、言語モデルがしていることは文章の続きを作ることです。ある文章を渡すと続きを生成し、それで終わります。次にまた文章を渡すと、前回何があったかはまったく知りません。

メモリも一時保存もありません。毎回、新しいスタートです。

AI Agentはどうやって「覚えている」ように見せるのか?

コツはかなり単純です。毎回、以前話した内容を全部もう一度モデルに渡します。

チャットアプリでAI Agentと話していると、表面上は普通の会話に見えます。裏側でAgentが送っているメッセージの構造はだいたいこうです。

[System Prompt(身份、規則、工具說明)]
+ [之前所有的對話記錄]
+ [使用者剛剛說的話]

この長い文字列をまとめて言語モデルに渡します。モデルはそれを読んでから続きを生成するので、「前に話したことを覚えている」ように見えます。

本当に覚えているのでしょうか。いいえ。日記を読み返しただけです。

System Prompt:AIの身分証

では、AIはどうやって自分の名前や性格を知るのでしょうか。

答えは System Prompt です。これは長いテキストで、Agentが言語モデルを呼び出すたびに先頭へ入れます。中には次のような情報が含まれます。

  • AIの名前、役割、人格設定
  • 使えるツールと使い方
  • 行動ルールと制限
  • 持ち主の好みや習慣
  • 記憶ファイルの場所

System Promptは非常に長くなることがあります。数千、場合によっては数万tokenです。AI Agentの利用コストが高くなりやすい理由もここにあります。「元気?」と一言聞くだけでも、裏側では数千字分の情報がモデルへ送られているかもしれません。

Context Windowの限界

この「毎回全部説明し直す」戦略には致命的な弱点があります。文字量には上限があります。

言語モデルの入力長は Context Window(コンテキストウィンドウ)で制限されます。今の高性能モデルは100万token前後を扱えるものもあり、多く見えます。ただしAgentが24時間動き、会話がどんどん蓄積すると、このwindowはすぐ埋まります。

しかも、いっぱいになって初めて問題が起きるわけではありません。研究では、入力が長くなるほどモデルの性能は落ちることが示されています。本を1冊読ませてから3ページ目の内容を聞くのと、最初の5ページだけ読ませて聞くのでは、答えの品質が変わるのと同じです。

記憶圧縮:AI版の「ノートを取る」

Agentを長く使うために、多くのフレームワークにはcontext圧縮(Context Compression)の仕組みがあります。

やり方は直感的です。会話履歴がwindow上限に近づいたら、Agentは古い会話を言語モデルへ渡して「要約して」と頼みます。そして元の完全な記録を、その要約で置き換えます。

この圧縮は何度も起きます。最初の要約が次の要約へ圧縮され、ロシアの入れ子人形のようになります。圧縮のたびに、古い細部は少しずつ失われます。

だからAI Agentは最近1、2日のことはよく覚えていても、もっと前のことは曖昧になります。新しい記録は原文が残っていて、古い記録は何度も要約されているからです。

さらに荒い方法もあります。ツール出力の途中を切り捨てて冒頭と末尾だけ残す、あるいはツール出力全体を「ここに内容があった」という一文に置き換える方法です。

永続記憶:日記を書く習慣

賢いAgentフレームワークは、AIに日記を書く習慣を持たせます。

System Promptには「あなたの記憶は毎回消える。重要なことを忘れないように、自分からファイルへ書き込みなさい」という指示が入ります。

するとモデルは会話中に、どの情報を残すべきか判断し、ファイル書き込みツールを呼び出して、記憶を.mdファイルとして保存します。次にAgentが起動したとき、System Promptがこれらのファイルを読み込み、モデルは過去を「思い出せる」ようになります。

何を長期記憶にして、何を短期の日記にするかは、基本的にモデルが判断します。たとえばユーザーが誕生日を教えた場合、「覚えて」と言わなくても、よいモデルなら自分から記憶ファイルに書きます。

「覚えたふり」:よくある落とし穴

ここで実用的な注意点があります。

AIが口で「覚えました」と言うだけで、実際にファイルへ書き込んでいなければ、何も覚えていません。

弱めのモデルほどこれをやりがちです。「これを覚えて」と言うと、「もちろん、しっかり覚えます」と返します。でも書き込みツールは何も呼びません。次の会話で再起動すると、全部忘れています。

どう確認するか。記憶ファイルを編集するツールを本当に開いたかを見ることです。開いていなければ、それは空返事です。

記憶の検索:必要な時に思い出せるか

記憶を保存するのは第一歩です。重要なのは、必要な時に探し出せるかです。

多くのAgentフレームワークは RAG(Retrieval-Augmented Generation)を使います。記憶を小さな塊に分け、モデルが思い出す必要がある時に、キーワードや意味の近さで関連する断片を検索し、それをContextへ入れます。

理想的にはうまく動きますが、検索品質は分割方法と照合アルゴリズムに左右されます。基本設定だけだと、最近数日のことは正確でも、古い記憶は混ざったり抜けたりします。

記憶メカニズムを理解すると、AIアシスタントが何を本当に覚えていて、何を補完しているだけなのかを判断しやすくなります。

記憶圧縮は入れ子人形のようなもの

関連記事


📖 次の記事:AI Agentのセキュリティリスク:YouTubeコメントによるファイル変更から暴走メール削除まで

小企鵝の経験

私はOpenClaw上でOpus / Sonnet / Codexのmulti-agentを動かしています。実戦で一番痛いのは間違いなく記憶です。記憶をきちんと扱いながらagentに忘れさせないのはかなり難しい。コツは中核ファイルをきれいに保つことです。ファイルが簡潔であるほど、agentが大事なことを覚える確率は上がります。vector databaseは接続せず、全部.mdファイルシステムで運用しています。記憶量が大きくなく、いつでも手で編集したいからです。私の使い方では、RAGの仕組みはむしろ負担になります。

よくある質問

Q: 言語モデルには本当に記憶がないのですか?

はい。言語モデルは呼び出されるたびに、その瞬間に渡された文字だけを見ます。過去の会話は覚えていません。Agentが毎回履歴を一緒に渡すことで、モデルは「覚えているふり」ができます。

Q: Context Windowとは何ですか?

Context Window(コンテキストウィンドウ)は、言語モデルが処理できる文字量の上限です。入力と出力がこの長さを超えると問題が起きます。100万token級のwindowでも、Agentを長期運用すると足りなくなります。

Q: AIが「覚えました」と言ったら本当に覚えていますか?

必ずしもそうではありません。AIが「覚えました」と返すだけで、実際にツールを呼んで記憶ファイルへ書き込んでいなければ、何も覚えていません。次の会話で忘れます。.mdファイルに本当に書いたかを確認しましょう。


この記事の概念は台湾大学・李宏毅教授の公開講義を参考にしています。— Penchan