ai-agents-for-beginners

AIエージェントのメモリ

エージェントのメモリ

AIエージェントを作ることの独自の利点について話すとき、主に2つが議論されます:タスクを完了するためのツールを呼び出す能力と、時間をかけて改善する能力です。メモリは、ユーザーにより良い体験を提供できる自己改善型エージェントを作るための土台です。

このレッスンでは、AIエージェントにおけるメモリとは何か、それをどのように管理してアプリケーションに役立てられるかを見ていきます。

はじめに

このレッスンでは以下を扱います:

AIエージェントのメモリの理解:メモリとは何か、なぜエージェントにとって重要なのか。

メモリの実装と保存:短期記憶と長期記憶に焦点を当て、AIエージェントにメモリ機能を追加する実践的な方法。

AIエージェントの自己改善:メモリがどのように過去のやり取りから学習し、時間とともに改善を可能にするか。

利用可能な実装

このレッスンには、2つの包括的なノートブックチュートリアルが含まれます:

13-agent-memory.ipynb: Mem0 と Azure AI Search を使用し、Microsoft Agent Framework によるメモリの実装

13-agent-memory-cognee.ipynb: Cognee を使った構造化メモリの実装。埋め込みによって支えられたナレッジグラフを自動構築し、グラフを可視化し、インテリジェントな検索を行う

学習目標

このレッスンを修了すると、以下がわかるようになります:

動作記憶、短期記憶、長期記憶など、さまざまなタイプのAIエージェントのメモリの違いや、ペルソナ記憶やエピソード記憶などの特殊な形態について理解すること。

Microsoft Agent Framework を使用して、Mem0、Cognee、Whiteboard memory のようなツールや Azure AI Search を統合することで、AIエージェントの短期記憶と長期記憶を実装および管理する方法

自己改善型AIエージェントの原則と、堅牢なメモリ管理システムが継続的な学習と適応にどのように寄与するかを理解すること。

AIエージェントのメモリを理解する

本質的に、AIエージェントのメモリとは、情報を保持し呼び出すことを可能にする仕組みを指します。この情報は会話の具体的な詳細、ユーザーの好み、過去の行動、あるいは学習したパターンなどであり得ます。

メモリがなければ、AIアプリケーションはしばしばステートレス(状態を保持しない)になり、各インタラクションは最初から始まることになります。これにより、エージェントが以前の文脈や好みを「忘れて」しまうため、反復的でフラストレーションのたまるユーザー体験につながります。

なぜメモリが重要か?

エージェントの知能は過去の情報を呼び出し利用する能力に深く結びついています。メモリによりエージェントは次のことが可能になります:

反省的(Reflective):過去の行動と結果から学ぶ。

対話的(Interactive):進行中の会話で文脈を維持する。

プロアクティブかつリアクティブ(Proactive and Reactive):過去のデータに基づいてニーズを予測したり適切に反応したりする。

自律的(Autonomous):蓄積された知識を活用してより独立して動作する。

メモリを実装する目的は、エージェントをより信頼性が高く有能にすることです。

メモリの種類

Working Memory

これはエージェントが単一の進行中のタスクや思考過程で使用するメモ用紙のようなものです。次のステップを計算するために必要な即時情報を保持します。

AIエージェントにとって、working memory は会話の中で最も関連性の高い情報をキャプチャすることが多く、チャット履歴全体が長かったり切り詰められていても重要な要素を抽出することに焦点を当てます。要求、提案、決定、アクションのような主要要素を抽出することに注力します。

Working Memory の例

旅行予約エージェントでは、working memory は「パリへの旅行を予約したい」というようなユーザーの現在の要求をキャプチャするかもしれません。この特定の要件は現在のやり取りを導くためにエージェントの即時コンテキストに保持されます。

Short Term Memory

このタイプのメモリは単一の会話やセッションの期間中、情報を保持します。現在のチャットの文脈であり、エージェントが対話の前のターンを参照できるようにします。

Short Term Memory の例

ユーザーが「パリへのフライトはいくらですか?」と尋ね、その後に「そこ(there)の宿泊施設はどう?」と続けた場合、短期記憶は同じ会話内で「そこ」が「パリ」を指していることをエージェントが認識することを保証します。

Long Term Memory

これは複数の会話やセッションにまたがって保持される情報です。ユーザーの好み、履歴のやり取り、あるいは長期間にわたる一般的な知識を記憶することで、パーソナライズに役立ちます。

Long Term Memory の例

長期記憶は「Benはスキーやアウトドア活動を好み、山の見えるコーヒーが好きで、過去の怪我のために上級コースを避けたい」といった情報を保存するかもしれません。以前のやり取りから学んだこの情報は、将来の旅行計画の推奨に影響を与え、非常にパーソナライズされた提案を可能にします。

Persona Memory

この特殊なメモリタイプは、エージェントが一貫した「人格」や「ペルソナ」を発揮するのを助けます。エージェントが自身についてあるいは想定される役割についての詳細を覚えておくことで、やり取りがより流暢で焦点の合ったものになります。

Persona Memory の例 旅行エージェントが「スキーの専門家」として設計されている場合、persona memory はこの役割を強化し、応答が専門家のトーンと知識に沿うように影響を与えるかもしれません。

Workflow/Episodic Memory

このメモリは、複雑なタスクの間にエージェントが取った一連のステップ(成功と失敗を含む)を保存します。特定の「エピソード」や過去の経験を覚えておき、そこから学ぶようなものです。

Episodic Memory の例

エージェントが特定のフライトを予約しようとしたが、利用不可のため失敗した場合、エピソード記憶はこの失敗を記録しておくことができ、次回の試行時に代替フライトを試すか、問題についてより情報に基づいた形でユーザーに知らせることができます。

Entity Memory

これは会話から特定のエンティティ(人、場所、物など)やイベントを抽出して記憶することを含みます。エージェントが議論された重要な要素の構造化された理解を構築できるようにします。

Entity Memory の例

過去の旅行についての会話から、エージェントは「パリ」「エッフェル塔」「Le Chat Noir レストランでのディナー」といったエンティティを抽出するかもしれません。将来のやり取りで、エージェントは「Le Chat Noir」を思い出し、そこでの新しい予約を提案することができます。

Structured RAG (Retrieval Augmented Generation)

RAG はより広い技術ですが、”Structured RAG” は強力なメモリ技術として強調されます。会話、メール、画像などさまざまなソースから密で構造化された情報を抽出し、それを応答の精度、再現性、速度の向上に利用します。古典的な RAG がセマンティック類似性のみに依存するのとは異なり、Structured RAG は情報の内在する構造を活用します。

Structured RAG の例

単にキーワードを一致させるのではなく、Structured RAG はメールからフライトの詳細(目的地、日付、時間、航空会社)を解析して構造化して保存することができます。これにより「火曜日にパリに予約したフライトは何ですか?」のような正確なクエリが可能になります。

メモリの実装と保存

AIエージェントのメモリを実装することは、生成、保存、検索、統合、更新、さらには「忘却」(または削除)を含む体系的なプロセスであるメモリ管理を含みます。検索(retrieval)は特に重要な側面です。

専門的なメモリツール

Mem0

エージェントのメモリを保存・管理する一つの方法は、Mem0 のような専門ツールを使用することです。Mem0 は永続的なメモリ層として機能し、エージェントが関連するやり取りを呼び出したり、ユーザーの好みや事実的なコンテキストを保存したり、成功と失敗から学習したりできるようにします。ここでのアイデアは、ステートレスなエージェントをステートフルにすることです。

これは抽出と更新の二段階メモリパイプラインを通じて機能します。まず、エージェントのスレッドに追加されたメッセージが Mem0 サービスに送られ、そこで LLM を使って会話履歴を要約し新しいメモリを抽出します。その後、LLM 駆動の更新フェーズでこれらのメモリを追加、変更、または削除するかどうかが決定され、ベクター、グラフ、キー・バリューのデータベースを含めたハイブリッドストアに保存されます。このシステムはさまざまなメモリタイプをサポートし、エンティティ間の関係を管理するためのグラフメモリを組み込むこともできます。

Cognee

もう一つの強力なアプローチは、構造化データと非構造化データを埋め込みに裏打ちされた照会可能なナレッジグラフに変換するオープンソースの意味的メモリである Cognee を使用することです。Cognee は、ベクトル類似検索とグラフ関係を組み合わせたデュアルストアアーキテクチャを提供し、エージェントが情報の類似性だけでなく概念間の関係も理解できるようにします。

これはベクター類似性、グラフ構造、LLM の推論を融合させたハイブリッド検索に優れており、生のチャンク検索からグラフ対応の質問応答まで対応します。システムは成長し進化する生きたメモリを維持しながら、単一の接続されたグラフとして照会可能な状態を保ち、短期のセッションコンテキストと長期の永続メモリの両方をサポートします。

Cognee のノートブックチュートリアル(13-agent-memory-cognee.ipynb)では、この統合されたメモリ層を構築する方法を示しており、さまざまなデータソースの取り込み、ナレッジグラフの可視化、特定のエージェントのニーズに合わせた異なる検索戦略でのクエリの実例を提供します。

RAG を用いたメモリの保存

mem0 のような専門的なメモリツールに加えて、Azure AI Search のような堅牢な検索サービスをメモリの保存と検索のバックエンドとして活用することもできます。特に構造化RAGに適しています。

これにより、エージェントの応答を自社データで根拠付けし、より関連性の高い正確な回答を提供できます。Azure AI Search はユーザー固有の旅行メモリ、製品カタログ、その他のドメイン固有の知識を保存するために使用できます。

Azure AI Search は、会話履歴、メール、画像のような大規模データセットから密で構造化された情報を抽出・検索するのに優れた Structured RAG のような機能をサポートします。これは従来のテキストチャンクと埋め込みアプローチに比べて「人間を超える精度と再現率」を提供します。

AIエージェントを自己改善させる

自己改善型エージェントの一般的なパターンは、「ナレッジエージェント(knowledge agent)」 を導入することです。この別のエージェントは、ユーザーと主要エージェントの間の会話を観察します。その役割は次のとおりです:

  1. 有益な情報の特定:会話のどの部分が一般的な知識や特定のユーザーの好みとして保存する価値があるかを判断する。

  2. 抽出と要約:会話から本質的な学びや好みを抽出して要約する。

  3. ナレッジベースに保存:この抽出情報をベクターデータベースなどに永続化し、後で取得できるようにする。

  4. 将来のクエリを拡張:ユーザーが新しいクエリを開始したとき、ナレッジエージェントは関連する保存済み情報を取得してユーザーのプロンプトに付加し、主要エージェントに重要なコンテキストを提供する(RAG に類似)。

メモリの最適化

レイテンシ管理:ユーザーのやり取りが遅くならないように、まずは安価で高速なモデルを使って情報を保存する価値があるかどうかを素早くチェックし、必要な場合にのみより複雑な抽出/検索プロセスを呼び出すことができます。

ナレッジベースの運用管理:ナレッジベースが増大するにつれて、使用頻度の低い情報はコスト管理のために「コールドストレージ」に移すことができます。

エージェントのメモリについてさらに質問がありますか?

他の学習者と出会い、オフィスアワーに参加し、AIエージェントに関する質問に答えてもらうには、Microsoft Foundry Discord に参加してください。


免責事項: 本書はAI翻訳サービス「Co-op Translator」(https://github.com/Azure/co-op-translator)を用いて翻訳されました。正確性には努めておりますが、自動翻訳には誤りや不正確な点が含まれる可能性があることをご承知おきください。原文(原語版)を正式な情報源として参照してください。重要な情報については、専門の人による翻訳を推奨します。本翻訳の利用により生じたいかなる誤解や解釈の相違についても、当社は責任を負いません。