【AIエージェント】Memory とは
この記事の概要
AIエージェントは、「Profile」「Memory」「Planning」「Action」から構成されます。
その内の「Memory(記憶)」について説明します。
さらに具体例として、記憶の仕組みが素晴らしいAIエージェントのアーキテクチャの代表例である「Generative Agents」の論文を紹介します。
引用:A Survey on Large Language Model based Autonomous Agents (2023)
AIエージェントの記憶とは
なぜ必要なのか
-
認知心理学の観点
人間の記憶が知識の蓄積、社会規範の形成、合理的な行動に不可欠であるように、エージェントも人間のように振る舞うためにはメモリが必要です。 -
自己進化の観点
エージェントが動的な環境で自己進化するために、経験の蓄積、環境の探索、知識の抽象化といったメモリの機能が重要です。 -
エージェントアプリケーションの観点
会話エージェントやシミュレーションエージェントなど、特定のアプリケーションにおいてメモリがタスク達成に不可欠な要素です。
メモリの種類
-
狭義のエージェントメモリ
特定の施行の中で、エージェントが経験した履歴情報のことを指します。
過去の行動や観測結果など、同じ施行の中で起きた情報に限定されています。 -
広義のエージェントメモリ
ある特定の施行に加えて、異なる施行間での履歴情報や外部知識も含めた広範な記憶のことを指します。
過去の様々な経験から知識や情報全てがエージェントの意思決定に利用されます。
つまり、広義のエージェントメモリとは、- 同じ施行内の情報 (狭義のメモリ)
- 異なる施行間の情報
- エージェントと環境の相互作用を超えた外部の情報
を含みます。
メモリのエージェント環境相互作用とは
次の3つの段階があります。
- 記憶への書き込み
- 記憶の管理
- 記憶からの読み出し
【記憶への書き込み】
AIエージェントが環境と相互作用する際の経験を、記憶に保存するプロセスです。
AIエージェントががあるステップで行動を起こし、その結果、環境から何らかの観測結果を受け取った場合、その情報を書き込みます。
格納されるメモリ内容は、自然言語またはパラメトリック表現のいずれかで保存されます。
【記憶の管理】
格納されたメモリ情報をより効果的に処理することです。これには、高レベルの概念を要約してエージェントの汎化能力を高めること、冗長な情報を統合すること、重要でない情報や無関係な情報を忘却してその負の影響を取り除くことなどが含まれます。
【記憶の読み出し】
AIエージェントが推論や意思決定のために情報を必要とする際に、記憶に格納された情報と次の行動のコンテキストとの間の類似性を計算することで、関連情報が抽出されます。
記憶情報は、AIエージェントの次の行動を導くための最終的なプロンプト(動的プロファイル)の一部として使用されます。
どう評価するのか
メモリの評価方法を「直接評価」と「間接評価」の2つの戦略があります。
-
直接評価: メモリモジュール単体の有効性を独立して測定する。
- 主観的評価: 人間の判断に基づいて、一貫性, 合理性が評価。
- 客観的評価: 数値指標に基づいて、結果の正確性, 参照の正確性, 時間・ハードウェアコストが評価。
-
間接評価: エージェントのタスク達成度を通じてメモリモジュールの有効性を評価する。
- 会話
- マルチソース質問応答
- 長文コンテキストアプリケーション
- その他のタスク(成功率、探索度など)
直接評価は、記憶モジュールを独立したコンポーネントとして評価するため、信頼性が向上しますが、ベンチマークがほとんど存在しないです。
それに対して間接評価は、エージェントタスク全体を通じて記憶モジュールを評価するため、記憶モジュールによる変化なのかどうかの判断が難しい一方で、ベンチマークは存在します。
アーキテクチャの紹介:Generative Agents
概要
これはAIエージェント全体のアーキテクチャですが、メモリに関する設計が特出しているため、取り上げます。
アーキテクチャ
(引用:Generative Agents: Interactive Simulacra of Human Behavior, Fig5)
-
Memory Stream:経験のすべてを自然言語で記録する長期記憶のデータベース。
- 各メモリには「タイムスタンプ」「テキスト」「直近利用日時」が付与されます。
- さらに重要度も評価されます。
-
Retrieve:状況に応答し、関連記憶を抽出。
- 現在の状況に関連する過去のメモリをこのメモリストリームから抽出します。
- 「直近性」「重要度」「関連性」のスコアをもとにランキングし、言語モデルに渡すメモリの候補を選出します。
-
Plan:行動の計画作成 → 出力。
- 検索された記憶を基に、エージェントの短期・長期的な行動計画を生成します。
- これにより、自然な目的志向的な行動が可能になります。
- Act:行動として、システムを実行。
-
Reflect:重要な記憶をまとめ、メモリを更新。
- 蓄積された重要な記憶に対し、定期的に抽象的な洞察や自己反省を生成します。
- その結果をメモリストリームに書き込み、メモリを更新します。
- 更新されたメモリは次の計画に活用されます。
上記のループ:
- 情報を知覚
- Memory Streamに情報を保存
- 情報を抽出し、計画を作成
- 行動を起こし、立てた計画と、自己反省、抽象的な洞察をメモリに保存し、次の計画に活用
を繰り返すことで、AIエージェントは人間らしい振る舞いを獲得できるようになります。
記憶の設計
この論文の設計では、次の仕組みが有効であると紹介されています。
- 直近性、重要度、関連性の3軸で情報を保存・検索していること。
従来のLLMでは、ユーザーとのやりとりに必要な記憶を、事前に要約・抽出し、プロンプトに埋め込んでいました。それに対してこの論文では、
- 全ての経験を自然言語で記録
- 3軸スコア(Recency, Importance, Relevance)で絞り込み
- 上位のみをプロンプトに渡す
という仕組みによって、
「長期間の自然言語記憶から、文脈に最適な記憶だけを選択して使う」
ことを実現しています。
【直近性】
情報が新しい方がスコアが大きくなります。
式としては、タイムスタンプに対して指数関数としてスコアが減少していきます。
【重要度】
これは、プロンプトに情報を代入して、LLMに情報の価値をスコアリングさせる方法を採用しています。
- プロンプト例
Memory: buying groceries at The Willows Market
Q: "Rate how poignant this is (1 = mundane, 10 = emotional)"
→ Output: 2(掃除)や 8(告白)など
【類似度】
検索クエリとの意味的な近さ(EmbeddingによるCosine類似度)を表します。
従来のEmbeddingと同じ手法です。
実際の処理のイメージ
例えば、ユーザーから、
Q:最近で最も楽しみにしていることは何ですか?
と入力があったとします。
これに対してAIエージェントは、
- Memory Streamに言語情報として保存されている情報から、直近性、重要度、類似度を計算します。
- 3つの軸によって評価されたスコアを線型結合して、総スコアを計算します。
- 記憶から計算された結果が次のテーブルだとします。これをプロンプトに入力します。
内容 Recency Importance Relevance Score バレンタインの企画 0.91 0.63 0.80 2.34 飾りつけの準備 0.87 0.63 0.71 2.21 パーティーのアイデア 0.85 0.73 0.62 2.20 - その結果、
A:私は Hobbs Cafe で計画しているバレンタインデーパーティーを楽しみにしています!
などと回答します。
補足
Memory Streamに保存される情報は、自然言語(私たちが日常で話す言語)の形式です。従来は、ベクトルとして保存されていました。
加えて、従来の方法との違いは、Embeddingで類似度のみを評価していたことに対して、タイムスタンプを用いた直近性と、LLMに記憶の情報が重要かどうかを判断させた結果の重要性の2軸を追加しています。
これが、この論文の記憶アーキテクチャで提案された、新しい仕組みです。
まとめ
AIエージェントのコンポーネント(プロファイル、記憶、計画、行動)のうち、「記憶」について解説しました。
さらに具体的にどのように記憶がAIエージェントの中で利用されているかイメージするために、AIエージェントアーキテクチャである「Generative Agents」についても解説しました。
参考
A Survey on the Memory Mechanism of Large Language Model based Agents (2024)
Generative Agents: Interactive Simulacra of Human Behavior (2023)
Discussion