動画記事 · Hugging Face
エージェント・メモリ解説:完全なアーキテクチャ
動画の文字起こしと公開情報をもとにAIで要約・構成しています。 正確な発言は元動画と時間位置で確認してください。
まず要点
LLM の状態非対称性を克服し、ユーザーやエージェントの情報を永続的に保存・検索する「エージェントメモリ」アーキテクチャを MEM0 を例に解説し、実装方法と推奨モデルを示す。
エージェントに「記憶」を宿らせる:MEM0 が解き明かす長期記憶のアーキテクチャ
AI エージェントが単なる一時的な対話ツールから、ユーザーの嗜好や文脈を理解する自律的なパートナーへと進化するための鍵は、「長期記憶」にあります。本記事では、人気オープンソースライブラリ「MEM0」のアーキテクチャを分解し、会話履歴とは異なる永続的記憶の実装方法と、ローカル環境での実用化に向けた具体的なノウハウを紹介します。
会話履歴と長期記憶の違い:なぜ外部サービスが必要なのか
まず理解すべきは、LLM(大規模言語モデル)自体が「状態非対称(stateless)」なマシンであるという点です。プロンプトを送信して回答を返した瞬間、LLM は過去のやり取りを覚えていません。そのため、エージェントが会話の文脈を保つには、ユーザーからの新しいメッセージごとに、これまでの会話履歴全体を再度プロンプトに含めて送る必要があります。
これが「会話履歴(Conversational Memory)」です。しかし、この方式には重大な限界があります。セッションが変われば、以前の会話はリセットされてしまうのです。例えば、あるセッションで「ベジタリアンが好き」と話したとしても、新しいセッションが始まれば、エージェントはその事実を忘れてしまいます。
エージェントがユーザーや自身について、セッションを超えて永続的に記憶するためには、会話履歴とは独立した外部サービスが必要不可欠です。
この「長期記憶」は、すべてのセッションにまたがる情報を保存し、いつでも参照可能な形で保持する仕組みです。これにより、異なるエージェント(例:Claude や JHPT など)間でユーザーの嗜好やプロジェクト情報を共有することも可能になります。
MEM0 の3層アーキテクチャ:記憶を構造化する3つのストア
MEM0 は、この長期記憶を実現するために、単一のデータベースではなく、3 つの異なるストレージ(ストア)を組み合わせたアーキテクチャを採用しています。それぞれの役割は明確に分離されています。
1. メインメモリ(ベクトルストア):事実とメタデータの保管庫
ここが記憶の主要な保存場所です。ユーザーの嗜好やエージェントの学習結果といった「事実」そのものが、短い文章や段落として格納されます。
- 内容: ユーザーが「ベジタリアンレストランが好き」といった具体的な記憶データ。
- メタデータ: 作成日・更新日、エクスプライア(有効期限)、誰(どのエージェント)が作成したかといった付加情報。
- ハッシュ値: データの重複排除のために使用されます。
- 要約文: キーワード検索を可能にするための要約テキストも格納されています。
2. エンティティメモリ(ベクトルストア):関係性の紐付け
ここには、メインメモリの事実から抽出された「エンティティ(固有名詞)」が保存されます。人名、地名、組織名などが対象です。
- 仕組み: 例えば、「パリのマレ地区が好き」という記憶があれば、「パリ」や「マレ地区」といったエンティティが登録され、それぞれが関連するメインメモリとリンクされます。
- 利点: ユーザーが「パリについて教えて」と質問した際、直接検索するのではなく、まず「パリ」というエンティティを特定し、そこから関連するすべての記憶(マレ地区の好みなど)を一括で引き出すことができます。これにより、文脈に応じた深い回答が可能になります。
3. SQLite データベース:ログとコンテキスト管理
最後に、SQLite を使用した軽量データベースが用意されています。ここは主に2つの目的で使用されます。
- ログ機能: ベクトルストア内でのすべての変更履歴(追加・削除など)を追跡します。
- 直近の文脈保持: 過去に送られたメッセージのうち、最新の10件を保存します。これは、新しい記憶を作成する際に、文章中の代名詞(「それ」「彼」など)が何を指しているかを判断するために不可欠なコンテキストを提供します。
記憶の取り込みと検索:LLM が賢く処理するワークフロー
MEM0 は、ユーザーからのメッセージを受け取ると、自動的に「インジェクション(取り込み)」プロセスを開始します。このプロセスには主に3つのモードがありますが、最も高度で推奨されるのは LLM を活用した抽出方式です。
高度な記憶抽出の仕組み
LLM を「メモリ抽出器」として機能させる場合、以下のコンテキストを考慮しながら処理が行われます。
- ユーザーサマリー: ユーザーに関する既存の概要情報。
- 入力メッセージ: 現在の会話内容。
- 関連する過去の記憶: 現在のメッセージと関連がありそうな既存のメモリを検索して追加。
- 直近の10メッセージ: SQLite から取得した最新のやり取り。
これらの情報を元に LLM が構造化された JSON を生成し、新しい事実を抽出します。この際、ハッシュ値による重複チェックが行われ、すでに存在する記憶であれば更新され、新規であれば登録されます。
検索と利用
ユーザーが質問すると、システムはまずエンティティストアから関連情報を特定し、メインメモリから詳細な事実を検索します。これにより、単なるキーワードマッチングではなく、文脈を理解した上での回答が可能になります。
ローカル環境での実装:プライバシーとリソース制約への対応
本格的な長期記憶システムを構築する際、クラウド依存ではなくローカル環境で動作させることが可能です。特にプライバシーを重視する開発者や、リソース制約のある環境において有効です。
- 軽量モデルの選定: 10 億〜80 億パラメータ規模の軽量な LLM を使用することで、効率的に記憶の抽出と処理を行います。
- ドメイン特化型埋め込みモデル: 特定の分野(例:医療や法律)に特化したファインチューニング済みの埋め込みモデルを使用することで、検索精度をさらに高めることが推奨されています。
まとめ
MEM0 のアーキテクチャは、AI エージェントが「その場限り」の会話から脱却し、ユーザーと長期的な信頼関係を築くための基盤技術を示しています。外部ストレージを活用した3層構造と、LLM を賢く活用した抽出プロセスにより、プライバシーを守りつつも高度な文脈理解を実現するエージェントの実現が可能になります。
Original Source
元動画で発言を確認
プレイヤーは必要になるまで読み込みません。YouTubeのCookieと通信も再生を選ぶまで開始しません。
時間位置から根拠を確認
章や引用を選ぶと、元動画をその位置から再生します。