>_tech-draft
Mastra AIのアイコン
Mastra AI
動画公開日
タイトル

The Four Levels of Agent Memory

再生時間

18分 9秒

AIエージェントの記憶力を向上させる!3つのレベルと実践ガイド

ポイント

  • AIエージェントの記憶力向上に課題を感じている方向けに、LLMが苦手とする会話記憶の制約を克服する3つのレベルを解説します。
  • 基礎的な会話履歴に加え、一時的な重要情報を保持するワーキングメモリ、意味に基づき関連情報を検索するセマンティックリコールの仕組みと利点・課題を深掘りします。
  • 各記憶システムの特徴を理解することで、LLMの弱点を補い、より人間らしく実用的なAIエージェントを構築するヒントが得られます。

大規模言語モデル(LLM)はその高い知能にもかかわらず、会話の「記憶」を保持するのが苦手という課題があります。以前の会話内容をすぐに忘れてしまい、新しい対話スレッドでは毎回ゼロから始まるため、真の「知能」とは感じられないこともあります。本記事では、AIエージェントフレームワーク「Mastra」のAIエンジニアが解説する、AIエージェントにおける記憶の4つのレベルのうち、主要な3つについて深掘りします。最も一般的な「会話履歴」から、「ワーキングメモリ」、「セマンティックリコール」の順に解説し、それぞれの仕組みと利点・課題を明らかにします。

AIエージェントの「記憶」の課題

AIエージェントがユーザーと長期にわたって有意義な対話を行い、複雑なタスクを遂行するためには、過去のやり取りや重要な情報を「記憶」する能力が不可欠です。しかし、LLM単体では、コンテキストウィンドウという入力トークン数に制限があり、過去の会話すべてを記憶し続けることはできません。この制約を克服するために、様々な記憶システムが開発されています。

1. 会話履歴(Conversation History)

最も一般的でシンプルな記憶の種類は、過去のメッセージをLLMへの各リクエストに含める「会話履歴」です。これにより、モデルは文脈を理解し、適切に反応できます。例えば、「私は自転車が好きです」と伝えた後、「それについての事実を教えてください」と質問した場合、モデルは過去のメッセージを参照できるため、私が自転車について話していることを理解し、適切に反応します。

しかし、この方法は限界があります。10~20メッセージ程度は機能しますが、履歴が長くなると以下のような問題が生じます。

  • コンテキストウィンドウの制限: LLMが一度に処理できる入力の長さ(コンテキストウィンドウ)には限りがあり、会話履歴が長すぎるとこの制限を超えてしまいます。特に、ツールコールを頻繁に行うエージェントの場合、より早く制限に達する可能性があります。
  • コンテキストドリフトと劣化: 大量の情報を入力すると、モデルが本当に重要な部分を見失い、応答の品質が低下する可能性があります。
  • 新規スレッドでの記憶の欠如: 新しい会話スレッドを開始すると、同じエージェントと話していても以前のスレッドの履歴が引き継がれず、記憶がない状態から始まります。

これらの理由から、メッセージ履歴を設定する際には、通常、直近の10〜30メッセージのみを送信するといった制限を設けることがあります。しかし、もしユーザーの目的が最初のメッセージにあり、その後に多くのメッセージが続いた場合、その目的が記憶の窓からこぼれ落ちてしまう可能性があります。

2. ワーキングメモリ(Working Memory)

「ワーキングメモリ」は、会話履歴の限界を補完し、その効果を拡張するための強力な仕組みです。これは、エージェントに「スクラッチパッド」のような一時的な記憶領域を与えるものです。このスクラッチパッドには、事前に定義されたフィールドがありますが、最初は値がありません。

ワーキングメモリの仕組みと利点

エージェントは、これらのフィールドに埋めるべき値を探すように促され、一度値が設定されると、同じ会話内で何百ものメッセージが続いたとしても、その後のすべてのやり取りでその値を記憶し続けます。例えば、ユーザーがエージェントに「1000万ドルのSaaSを構築したい。ミスはしたくない」と指示した場合、エージェントは迅速に「ミスを避けること」がユーザーの好みであり、「1000万ドルのSaaSを構築すること」が目標であると認識し、それをワーキングメモリに格納します。これは、コーディングエージェントや、長期間にわたるタスクを実行するエージェントにとって非常に有用です。

また、ワーキングメモリは、私の名前のような「不変の事実」や、「簡潔な応答を好む」といった「安定したユーザーの好み」を捕捉するのにも優れています。

技術的には、ユーザーには表示されないものの、モデルが参照できる「システム指示」を拡張することで機能します。エージェントは、記憶テンプレートと現在のデータを受け取り、将来の応答でこのデータに依拠します。また、エージェントはフィールドの潜在的な値を監視し、「update working memory」というツールを使ってその値を更新するように指示されます。これにより、会話全体で連続性(コンティニュイティ)を維持できます。

デメリット

ワーキングメモリは、大量のデータや長期的なデータを記憶するようには設計されていません。また、記憶すべきフィールドを事前に定義する必要があり、これはエージェントが自律的に記憶する能力を妨げるように感じることもあります。理想的には、エージェントは記憶すべきことについて指示を必要とせず、自然に知っているべきです。

3. セマンティックリコール(Semantic Recall)

ワーキングメモリの限界を超える、より高度な記憶システムが「セマンティックリコール」です。これは、メッセージ履歴の中から「意味的に関連性の高い」メッセージを検索し、選択的にLLMへの入力(コンテキストウィンドウ)に含めることで機能します。

セマンティックリコールの仕組みと利点

例えば、「私は犬が好きです。うちの犬はナースバークレーという名前です」と伝えたとします。その後、「私が好きな動物は何ですか?」と質問すると、システムは入力されたクエリの「エンベディング」(意味を数値化したベクトル表現)を作成し、そのエンベディングを使って「ベクトルデータベース」を検索します。そして、最も関連性の高い情報を取得し、それを記憶として活用します。これにより、単なるキーワード検索ではなく、より深い意味に基づいた検索が可能になります。

セマンティックリコールの特に優れた点は、ワーキングメモリと同様に、異なるスレッド間でも記憶を保持できることです。新しいスレッドで「私の犬の名前は何ですか?」と尋ねても、「ナースバークレー」と正確に思い出させることができます。これはRAG(Retrieval-Augmented Generation:検索拡張生成)の伝統的な概念に似ていますが、より自動的に行われます。メッセージがメモリシステムを通じて送信されるたびにエンベディングが作成されデータベースに保存され、将来のメッセージで関連するコンテキストとして引き出されます。フィールドを事前に定義する必要がなく、より自動化された記憶システムと言えます。

これにより、以下の大きな強みが生まれます。

  • 意味に基づいた情報検索: キーワードだけでなく、メッセージの意味に基づいて関連情報を取得できます。
  • クロススレッドでの記憶: 異なる会話スレッド間でも記憶が引き継がれます。
  • 長期履歴へのスケーラビリティ: 会話の履歴が非常に長くても、意味的に関連性の高い情報のみを選択して引き出すため、大規模な履歴にもうまくスケールできます。

デメリットと考慮点

  • リコールの不正確さ: 検索結果が常に完璧とは限りません。関連性の高い情報を正確に引き出すためには、いくつかのパラメータを調整する必要があります。「Top K」(機械学習の用語で、返すべき上位のヒット数)や「メッセージ範囲」(検索対象とするメッセージの範囲)などをユースケースに合わせて適切に設定することが重要です。
  • 追加コンポーネントとコスト: 「エンベッダー」(テキストをエンベディングに変換するモジュール)と「ベクトルストア」(エンベディングを保存・検索するデータベース)を導入するため、システムの複雑さが増し、SaaSを利用する場合はコストやレイテンシー(遅延)が発生する可能性があります。
  • キャッシュの利用不可: クエリごとにシステム指示が変更されるため、プロンプトのプレフィックスが安定せず、入力トークンのキャッシュが利用できなくなります。これは、本番環境でのコスト削減において最大の恩恵の一つを失うことになります。

これらの考慮点があるものの、セマンティックリコールは非常に強力な記憶レベルです。

まとめ

本記事では、AIエージェントの知能を向上させる上で不可欠な「記憶」機能に焦点を当て、その進化するレベルのうち、主要な3つのレベル(会話履歴、ワーキングメモリ、セマンティックリコール)について解説しました。

  • 会話履歴は最も基本的ですが、コンテキストウィンドウの制限や新規スレッドでの記憶喪失といった課題を抱えています。
  • ワーキングメモリは、事前に定義されたフィールドに一時的な重要な事実やユーザーの好みを記憶させ、会話の連続性を高めます。長期タスクや不変の情報の保持に有効ですが、大量のデータには向きません。
  • セマンティックリコールは、メッセージの意味に基づいて関連情報を動的に検索し、コンテキストに含めることで、より自然で高度な記憶を実現します。異なるスレッド間での記憶保持や、大規模な履歴へのスケーラビリティが大きな強みですが、追加のインフラと調整が必要になります。

これらの記憶システムを適切に組み合わせることで、AIエージェントはより人間らしい、そしてより実用的な知能を発揮できるようになります。エージェント開発においては、目的や要件に応じて最適な記憶戦略を選択することが成功の鍵となるでしょう。

参考動画: AI Agent Memory: The Four Levels