ai-agents-for-beginners

AIエージェントのメモリ

Agent Memory

AIエージェントを作成する際の独自の利点として主に議論されるのは、タスクを完了するためのツールを呼び出す能力と、時間の経過とともに改善する能力です。メモリは、ユーザーにより良い体験を提供できる自己改善型エージェントを作成する基盤となります。

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

はじめに

このレッスンで扱う内容:

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

メモリの実装と保存:ショートタームメモリ(短期記憶)とロングタームメモリ(長期記憶)に焦点をあてた、AIエージェントへのメモリ能力の実装方法。

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

利用可能な実装例

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

13-agent-memory.ipynb:Mem0とAzure AI Searchを用いたマイクロソフトエージェントフレームワークでのメモリ実装

13-agent-memory-cognee.ipynb:埋め込みによる知識グラフを自動構築し、グラフの可視化やインテリジェントな検索を行う構造化メモリのCogneeによる実装

学習目標

このレッスン修了後、あなたは以下のことができるようになります:

様々な種類のAIエージェントメモリの違いを理解する 、作業記憶、短期記憶、長期記憶、さらにペルソナメモリやエピソードメモリのような専門的なタイプを含む。

Microsoft Agent Frameworkを利用し、Mem0、Cognee、ホワイトボードメモリ、Azure AI Searchとの連携などを活用して、AIエージェントの短期記憶・長期記憶を実装・管理する。

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

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

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

メモリがなければ、AIアプリケーションはしばしばステートレス(状態を持たない)であり、各やり取りがゼロから始まります。これはエージェントが前のコンテキストや嗜好を「忘れてしまい」、繰り返しで苛立たしいユーザー体験につながります。

メモリが重要な理由

エージェントの知能は、過去の情報を呼び出して活用する能力に深く結びついています。メモリはエージェントに以下を可能にします:

反省的: 過去の行動や結果から学ぶこと。

インタラクティブ: 継続中の会話のコンテキストを維持すること。

先取り的かつ反応的: 過去のデータに基づいてニーズを予測し、適切に応答すること。

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

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

メモリの種類

作業記憶(ワーキングメモリ)

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

AIエージェントにとって作業記憶は、会話の中で最も関連性の高い情報をキャプチャし、チャット履歴が非常に長くても全体を保持しない場合でも主要要素(必要条件、提案、決定、行動)を抽出します。

作業記憶の例

旅行予約エージェントでは、作業記憶が「パリへの旅行を予約したい」というユーザーの現在のリクエストをキャプチャします。この具体的な要望は現在の対話を導くためにエージェントの即時の文脈に保持されます。

短期記憶(ショートタームメモリ)

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

Microsoft Agent Framework のPython SDKサンプルでは、これは AgentSession に対応し、agent.create_session() で作成されます。セッションはフレームワークの組み込み短期記憶として機能し、そのセッションが再利用される限り会話のコンテキストを保持しますが、セッション終了やアプリケーションの再起動時にはそのコンテキストは持続しません。永続性のある事実や嗜好は通常データベース、ベクターインデックス、または他の永続ストアを介してロングタームメモリを使用して保存します。

短期記憶の例

たとえば、ユーザーが「パリ行きの飛行機はどれくらいかかる?」と質問し、続けて「そこに宿泊は?」と聞いた場合、短期記憶はエージェントが「そこ」とは同じ会話内の「パリ」を指すことを認識させます。

長期記憶(ロングタームメモリ)

これは複数の会話やセッションを越えて持続する情報です。ユーザーの嗜好、過去のやり取り、一般知識を長期間にわたり記憶します。パーソナライズに重要です。

長期記憶の例

長期記憶は、「ベンはスキーやアウトドア活動が好きで、山が見えるコーヒーを好み、過去の怪我で上級スキーコースは避けたい」といった情報を保存する場合があります。これらは以前のやり取りから学習し、将来の旅行プランニングセッションで高度にパーソナライズされた推奨に影響します。

ペルソナメモリ

この専門的なメモリタイプは、エージェントに一貫した「パーソナリティ」や「ペルソナ」を持たせるのに役立ちます。エージェントが自身やその意図された役割についての詳細を記憶し、対話をより円滑かつ焦点を絞ったものにします。

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

ワークフロー/エピソードメモリ

このメモリは、エージェントが複雑なタスクの過程で踏んだ一連のステップや成功・失敗を記録します。過去の「エピソード」や経験を覚えて学習するようなものです。

エピソードメモリの例

たとえば、あるフライトの予約をエージェントが試みて失敗した場合、この失敗をエピソードメモリが記録し、次回の試みで代替フライトを試すか、より情報に基づいた形でユーザーに問題を知らせることができます。

エンティティメモリ

会話から人物、場所、物事などの特定のエンティティや出来事を抽出して記憶します。エージェントが話し合われた重要な要素の構造的理解を構築することを可能にします。

エンティティメモリの例

過去の旅行の会話から、エージェントは「パリ」、「エッフェル塔」、「Le Chat Noir レストランでの夕食」などのエンティティを抽出することがあります。将来の対話でエージェントは「Le Chat Noir」を思い出し、新たな予約の提案が可能です。

構造化RAG(Retrieval Augmented Generation)

RAGはより広範な技術ですが、「構造化RAG」は強力なメモリ技術として注目されています。会話、メール、画像など様々なソースから密な構造化情報を抽出し、回答の精度、リコール、速度を向上させます。従来の意味的類似度だけに依存する古典的なRAGとは異なり、情報の本質的な構造を利用します。

構造化RAGの例

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

メモリの実装と保存

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

専門的メモリツール

Mem0

エージェントのメモリを保存・管理する手段の一つに、Mem0のような専門ツールがあります。Mem0は永続的メモリレイヤーとして機能し、エージェントが関連するやり取りを呼び出し、ユーザーの嗜好や事実的コンテキストを保存し、成功・失敗から学習することを可能にします。ここでのアイデアは、状態を持たないエージェントを状態を持つものに変えることです。

Mem0は抽出と更新の二段階のメモリパイプラインで動作します。まず、エージェントのスレッドに追加されたメッセージは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のようにユーザーのプロンプトに付加して主要エージェントに重要な文脈を提供する。

メモリの最適化

レイテンシ管理:ユーザーとの対話が遅くならないように、最初はより安価で高速なモデルを使って情報が保存・検索に値するかを素早くチェックし、必要な場合にのみ複雑な抽出・検索処理を呼び出す。

知識ベースの管理:知識ベースが拡大するにつれ、あまり使用されない情報をコールドストレージに移すことでコストを管理する。

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

Microsoft Foundry Discord に参加して、他の学習者と交流し、オフィスアワーに参加し、AIエージェントに関する質問にぜひ答えてもらいましょう。

前回のレッスン

AIエージェントのためのコンテキストエンジニアリング

次のレッスン

Microsoft Agent Frameworkの探究


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