AIエージェント入門

MemGPTで長期記憶エージェント:状態管理実装ガイド

この記事の結論

MemGPTはLLMアプリケーションで長期記憶を管理するオープンソースライブラリです。この記事では、階層的メモリ構造、状態永続化の実装、実践的な使用パターンをコード例と共に解説します。

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の基礎と実装

LangGraphでツール呼び出し:実践ガイド

SQLiteでローカルRAG構築:軽量検索エンジン実装ガイド

Azure OpenAI Agents SDK入門:エージェント実装ガイド

CTA

この記事を読んで導入イメージが固まってきた方へ

UravationではAIエージェント導入の研修・コンサルを行っています。

実務での導入に向けた設計支援や、社内での運用定着化サポートも承っています。

Need help moving from reading to rollout?

この記事を読んで導入イメージが固まってきた方へ

Uravationでは、AIエージェントの要件整理、PoC設計、社内導入、研修まで一気通貫で支援しています。

この記事をシェア

X Facebook LINE

※ 本記事の情報は2026年6月時点のものです。サービスの料金・仕様は変更される可能性があります。最新情報は各サービスの公式サイトをご確認ください。

関連記事