MemGPTで長期記憶エージェント:状態管理実装ガイド
MemGPTはLLMアプリケーションで長期記憶を管理するためのオープンソースライブラリです。従来の会話がコンテキスト長制限で途切れる問題を解決し、エージェントが過去の会話や重要な情報をセッションをまたいで保持できる仕組みを提供します。この記事では、MemGPTの階層的メモリ構造、状態永続化の実装、実践的な使用パターンをコード例と共に解説します。
MemGPTの特徴とアーキテクチャ
MemGPTは仮想的な管理モジュールを介してLLMのコンテキスト管理を抽象化します。エージェントは無限のメモリにアクセスしているかのように振る舞いながら、実際には下位のLLMモデルが処理できるトークン数に合わせて自動的に圧縮・管理を行います。
| メモリ層 | 用途 | 保持期間 | アクセス速度 |
|———|——|———|————|
| Conversation | 現在のアクティブな会話コンテキスト | セッション内 | 最速 |
| Persistence | 重要な情報・要約済みコンテキスト | 複数セッション | 高速 |
| Archive | 長期保管・バックアップ | 無期限 | 中速 |
5分で動くセットアップ
まず、MemGPTをインストールし、基本的なエージェントを作成して動作を確認します。
インストール
pip install memgpt openai
OpenAI APIキー設定
export OPENAI_API_KEY=*** run
基本的なエージェント定義
MemGPTを使ってシンプルな会話エージェントを定義します。
from memgpt import Agent, Personaエージェントのペルソナ定義
persona = Persona(
name="research_assistant",
system_message="あなたは研究アシスタントです。過去の会話を記憶し、文脈を維持して回答してください。"
)
エージェント作成
agent = Agent(
name="memgpt_agent",
persona=persona,
memory_type="local",
llm_config={"model": "gpt-4", "temperature": 0.7}
)
会話開始
response = agent.chat("研究トピック:MemGPTのアーキテクチャについて教えて")
print(response)
状態の保存と復元
エージェントの状態をファイルに保存し、後で復元することで、セッションをまたいで会話を継続できます。
import jsonエージェントの状態をJSONファイルに保存
state = agent.save_state("conversation_state.json")
別のプロセスまたは後で状態を復元
restored_agent = Agent.load_state("conversation_state.json")
会話再開
response = restored_agent.chat("前回の続きで、メモリ管理のメリットは?")
print(response)
メモリへの直接操作
プログラム的にエージェントのメモリに情報を追加・取得することもできます。
重要な情報をメモリに追加
agent.add_to_memory(
"MemGPTはLlamaIndexベースのRAGをサポートしており、ベクトルストアとの連携が容易です。",
importance=0.9
)
agent.add_to_memory(
"ローカルLLM(Ollama)とも連携可能で、完全オフライン環境で動作します。",
importance=0.8
)
メモリからの検索
related_memories = agent.search_memory("RAGの特徴")
for memory in related_memories:
print(f"- {memory['content']}")
失敗パターンと対処法
エラー: メモリ制限超過
長い会話を続けると、エージェントがコンテキスト長制限に達するエラーが発生することがあります。
解決策: メモリ圧縮設定の調整
from memgpt import MemGPTConfigメモリ構成をカスタマイズ
memory_config = MemGPTConfig(
max_context_tokens=8000,
compression_threshold=0.8,
summarization_model="gpt-3.5-turverbo"
)
agent = Agent(
name="optimized_agent",
persona=persona,
memory_config=memory_config
)
エラー: 状態復旧失敗
保存された状態ファイルが破損していたり、MemGPTバージョン互換性で復元に失敗することがあります。
解決策: バージョン管理と検証
import json状態ファイルの整合性チェック
try:
with open("conversation_state.json",) as f:
state = json.load(f)
# 必須フィールドの確認
required_fields = ["persona", "memory", "llm_config"]
if not all(field in state for field in required_fields):
raise ValueError("状態ファイルが不完全です")
# 復元
restored_agent = Agent.load_state("conversation_state.json")
except (json.JSONDecodeError, ValueError) as e:
print(f"状態復旧失敗: {e}")
print("エージェントを再初期化します")
restored_agent = Agent(name="fresh_agent", persona=persona)
エラー: ツール呼び出し失敗
MemGPTはFunction Callingとも連携できますが、ツール定義が不適切な場合に呼び出し失敗することがあります。
解決策: ツール定義の厳密化
from memgpt import FunctionToolツール定義
def search_database(query: str) -> str:
return "検索結果"
tool = FunctionTool(
name="search_database",
description="社内データベースを検索",
parameters={
"type": "object",
"properties": {
"query": {"type": "string", "description": "検索ク"}
},
"required": ["query"]
},
function=search_database
)
agent.add_tool(tool)
応用例:ドキュメント検索エージェント
長期記憶とRAGを組み合わせた実用的なエージェントの例です。
ドキュメントコレクションをメモリに追加
documents = [
{"content": "MemGPTはLlamaIndexベースのRAGをサポート", "priority": "high"},
{"content": "ローカルLLM(Ollama)とも連携可能", "priority": "medium"},
{"content": "マルチエージェント協調も実装可能", "priority": "high"}
]
for doc in documents:
importance = 0.9 if doc["priority"] == "high" else 0.7
agent.add_to_memory(doc["content"], importance=importance)
質問応答(メモリ検索有効)
query = "MemGPTの特徴を3つ挙げて"
response = agent.chat(query, use_memory=True)
print(response)
パフォーマンスとベストプラクティス
MemGPTを効率的に使用するための実践的なヒントをまとめます。
– メモリ定期的な整理: 長期間使用するとメモリが肥大化するため、定期的に不要なエントリをアーカイブまたは削除します
– 圧縮モデルの選択: 要約には安価なモデル(GPT-3.5-turboなど)を使用し、コストを抑えます
– 並列処理: 複数のエージェントを並列で実行する場合、各エージェントに独立したメモリストレージを割り当てます
– 監視とロギング: メモリ使用量、圧縮回数、トークン消費を監視し、パフォーマンスのボトルネックを特定します
メモリ使用状況の取得
stats = agent.get_memory_stats()
print(f"Conversation tokens: {stats['conversation_tokens']}")
print(f"Total entries: {stats['total_entries']}")
print(f"Compression count: {stats['compression_count']}")
関連記事
– Claude MCP入門:Model Context Protocolの基礎と実装
– SQLiteでローカルRAG構築:軽量検索エンジン実装ガイド
– Azure OpenAI Agents SDK入門:エージェント実装ガイド
