ai-agents-for-beginners

AIエージェントのメモリ

Agent Memory

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、ホワイトボードメモリなどのツールを活用し、短期および長期メモリを実装・管理する方法。

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

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

メモリの核心は、エージェントが情報を保持し、呼び出すことができる仕組みです。この情報は会話の具体的な詳細、ユーザーの嗜好、過去の行動、さらには学習したパターンなどが含まれます。

メモリがなければ、AIアプリケーションはしばしばステートレスであり、つまり各やり取りが最初からのスタートになります。これにより、エージェントが前の文脈や嗜好を「忘れて」しまい、繰り返しのフラストレーションが生じるユーザー体験になります。

なぜメモリが重要か?

エージェントの知能は、過去の情報を記憶し活用する能力と深く結びついています。メモリはエージェントを次のようにします:

振り返り可能:過去の行動や結果から学ぶこと。

対話的:継続する会話の文脈を維持。

能動的かつ反応的:過去のデータに基づきニーズを予測したり適切に反応。

自律的:保存された知識を利用し、より独立して行動。

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

メモリの種類

作業メモリ (Working Memory)

これは、エージェントが単一の継続タスクや思考過程で使用するスクラッチペーパーのようなものです。次のステップの計算に必要な即時情報を保持します。

AIエージェントでは、作業メモリは長いか省略されたチャット履歴の中からでも会話で最も関連する情報を捉えることが多いです。要件、提案、決定、行動などの重要な要素抽出に注力します。

作業メモリの例

旅行予約エージェントの場合、作業メモリは「パリへの旅行を予約したい」というユーザーの現在の要求を保持し、この対話を導きます。

短期メモリ (Short Term Memory)

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

Microsoft Agent Framework のPython SDKサンプルでは、これは AgentSession に対応し、agent.create_session() で作成されます。このセッションはフレームワーク組み込みの短期メモリであり、同じセッションが使われ続ける限り会話の文脈を保持しますが、セッション終了やアプリケーションの再起動時には文脈は保持されません。事実や嗜好など、セッションを超えて保存したい情報は通常、データベースやベクトルインデックスなどの永続ストアでの長期メモリを使います。

短期メモリの例

ユーザーが「パリ行きのフライトはいくらですか?」と尋ね、その後「そこの宿泊は?」と続けた場合、短期メモリにより「そこ」が「パリ」を指すことをエージェントは認識します。

長期メモリ (Long Term Memory)

複数の会話やセッションを超えて持続する情報です。ユーザーの嗜好、過去のインタラクション、一般知識などを長期的に記憶し、パーソナライズに役立ちます。

長期メモリの例

過去のやり取りから「ベンはスキーやアウトドア活動が好きで、山の眺めのあるコーヒーを好み、過去の怪我のために上級スキーコースは避けたい」という情報を保存します。この情報は将来の旅行計画セッションでの推薦に影響し、高度にパーソナライズされた体験を提供します。

パーソナメモリ (Persona Memory)

この専門的なメモリは、エージェントが一貫した「パーソナリティ」または「ペルソナ」を形成するのに役立ちます。自身または想定される役割に関する詳細を記憶し、より流暢かつ焦点の合ったやり取りを可能にします。

パーソナメモリの例

旅行エージェントが「専門的なスキー計画者」として設計されている場合、パーソナメモリがこの役割を強調し、専門家のトーンや知識に沿った応答を促します。

ワークフロー/エピソードメモリ (Workflow/Episodic Memory)

複雑なタスク中にエージェントが取る一連のステップ(成功と失敗を含む)を記憶します。特定の「エピソード」や過去の経験を覚え、そこから学ぶことと似ています。

エピソードメモリの例

エージェントが特定のフライト予約を試みたが、利用不可で失敗した場合、その失敗をエピソードメモリに記録し、後の試行で代替フライトを提案したり、より情報に基づいた案内が可能になります。

エンティティメモリ (Entity Memory)

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

エンティティメモリの例

過去の旅行に関する会話から「パリ」、「エッフェル塔」、「Le Chat Noirレストランでの夕食」といったエンティティを抽出し、次回のやり取りで「Le Chat Noir」の予約を提案できるようにします。

構造化RAG(Retrieval Augmented Generation)

RAGはより広範な技術ですが、「構造化RAG」は強力なメモリ技術として特に注目されます。会話、メール、画像などの多様なソースから密で構造化された情報を抽出し、回答の精度、再現性、速度を向上させます。従来の意味類似性だけに頼るクラシックRAGと異なり、情報の固有構造を活用します。

構造化RAGの例

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

メモリの実装と保存

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

専門的なメモリツール

Mem0

エージェントメモリを保存・管理する方法の一つがMem0のような専門ツールの利用です。Mem0は永続的なメモリ層として機能し、関連するやり取りを呼び起こし、ユーザー嗜好や事実の文脈を保存し、時間をかけて成功や失敗から学習させます。これによりステートレスだったエージェントがステートフルに変わります。

Mem0は2段階のメモリパイプライン:抽出と更新で動作します。最初に、エージェントのスレッドに追加されたメッセージがMem0サービスに送られ、LLMが会話履歴を要約し新しいメモリを抽出します。続くLLM駆動の更新フェーズで、これらのメモリを追加・修正・削除するかが決まり、ベクトル、グラフ、キー・バリューデータベースなどのハイブリッドデータストアに保存されます。このシステムは様々なメモリタイプをサポートし、エンティティ間の関係を管理するグラフメモリの組み込みも可能です。

Cognee

もう一つの強力な方法が、Cogneeの使用です。Cogneeはオープンソースのエージェント用セマンティックメモリで、構造化・非構造化データを埋め込みに裏打ちされた問い合わせ可能な知識グラフへ変換します。Cogneeはベクトル類似検索とグラフ関係を組み合わせたデュアルストアアーキテクチャを提供し、情報の類似性だけでなく概念の関係性も理解可能にします。

生データのチャンク検索からグラフに意識的な質問応答まで、ベクトル類似度、グラフ構造、そしてLLM推論を融合したハイブリッド検索に優れています。システムは生きたメモリを維持し、成長・進化しながら一つの接続されたグラフとして問い合わせ可能で、短期のセッションコンテキストと長期の永続的メモリ両方をサポートします。

Cogneeノートブックチュートリアル(13-agent-memory-cognee.ipynb)では、さまざまなデータソースの取り込み、知識グラフの視覚化、特定のエージェントニーズに合わせた多様な検索戦略によるクエリの実践例を示しています。

RAGでのメモリ保存

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

これにより、エージェントの回答を自身のデータに根ざしたものにし、より関連性の高い正確な回答が得られます。Azure AI Searchは、ユーザー特有の旅行メモリ、製品カタログ、その他ドメイン固有の知識など保存に利用可能です。

Azure AI Searchは構造化RAG機能をサポートし、大規模な会話履歴、メール、画像などから密で構造化された情報を抽出・検索します。これは従来のテキストチャンクや埋め込み方式に比べて「超人的な精度と再現性」を提供します。

AIエージェントの自己改善

自己改善型エージェントの一般的なパターンは、「知識エージェント」を導入することです。この別のエージェントはユーザーと主エージェントの会話を観察し、次の役割を担います:

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

  2. 抽出と要約:会話から重要な学習や嗜好を抽出し要約。

  3. ナレッジベースへの保存:通常はベクトルデータベースに永続化し、後から検索可能に。

  4. 将来のクエリの補強:ユーザーの新規問い合わせ時、知識エージェントが関連情報を取り出してユーザーのプロンプトに追加し、主エージェントに重要な文脈を提供(RAGに類似)。

メモリ用最適化

レイテンシ管理:ユーザー体験を遅らせないように、最初に情報の保存や検索が必要かを迅速にチェックする安価で高速なモデルを使用し、必要な場合のみ複雑な抽出/検索プロセスを呼び出す。

ナレッジベースのメンテナンス:ナレッジベースが成長する場合、使用頻度の低い情報は「コールドストレージ」に移動してコスト管理。

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

他の学習者と交流し、オフィスアワーに参加し、AIエージェントに関する質問をしたい場合は、Microsoft Foundry Discord にご参加ください。


免責事項: 本書類は AI 翻訳サービス Co-op Translator を使用して翻訳されています。正確性を期していますが、自動翻訳には誤りや不正確な部分が含まれる可能性があることをご承知おきください。原文の原語版が正式な情報源とみなされるべきです。重要な情報については、専門の人間による翻訳を推奨します。本翻訳の利用により生じたいかなる誤解や解釈違いについても、当方は責任を負いかねます。