コンテンツへスキップ

media AI活用の最前線

ツール比較・実践ガイド 22分で読めます

【2026年最新】AIエージェントMemory完全ガイド|永続記憶3強

結論: AIエージェントのMemory(記憶)層は、Mem0(OSS最大、48K stars、軽量bolt-on)/Zep(本番向け、ベクトル+グラフのハイブリッド、エンティティ抽出)/Letta(旧MemGPT、OS型階層メモリ、エージェント自体がランタイム上で動く)の3強から選ぶのが2026年の標準です。「Core / Archival / Recall」の3層モデルと「User / Session / Agent」スコープの2軸で設計し、毎セッション忘却するChatGPT素のAPIから卒業して、長期的に成長するAIエージェントを構築できます。Claude Code・OpenAI Agents SDKLangGraphCrewAIすべてに対応しており、選んだメモリ基盤を全プラットフォームから共有できます。

この記事の要点:

  • Memory階層モデル: Core / Archival / Recall の3層 × User / Session / Agent スコープ
  • Mem0 / Zep / Letta の3強比較表(料金・OSS/SaaS・自己編集機能の有無)
  • 「session memory」と「long-term memory」の使い分け実装(Python実装コード付き)
  • RAG(検索拡張生成)とMemoryの違いと、両者を組み合わせる本番設計
  • Mem0でClaude Code・ChatGPT・Cursorのエージェントに永続記憶を追加する3ステップ
  • 本番運用の落とし穴4選(PII漏洩・状態の食い違い・コスト爆発・忘却タイミング)

対象読者: AIエージェントを業務に導入しているMLエンジニア・DevOpsエンジニア/チャットボット・カスタマーサポートで「ユーザーごとに会話を覚えてほしい」要件を抱えるPM/LangGraphCrewAIAutoGenで長時間動くエージェントを設計中の開発者/企業向けAI顧問・社内アシスタントで「組織知」を構築したい情報システム責任者

「ChatGPTって、毎回最初から自己紹介し直さないといけないの不便ですよね…」

先日、ある顧問先(従業員200名のコンサルティング企業)の社内AIアシスタント担当者から、こんな相談を受けました。社内向けにChatGPTを使った業務アシスタントを作ったのですが、ユーザーが「先週のあの案件の続きで…」と聞いても、AIが全く覚えていない。毎回、案件名・関係者・経緯を最初から説明させられる体験が苦痛で、利用率が3週間で半分以下に落ちていたんです。

この経験から気づいたのは、「2026年のAIエージェントは、Memory層を最初から設計しないと”使い物にならない”」ということです。100社以上の研修・顧問先で見てきた感覚として、Memory層を入れているチームと入れていないチームでは、ユーザーの継続利用率が3〜5倍違います。本物の業務アシスタントは、毎回ゼロから説明し直す相手ではなく、組織の文脈を覚えている同僚であるべきです。

この記事では、Mem0・Zep・Letta(旧MemGPT)の3強を実装コード付きで比較解説します。「Core / Archival / Recall」の3層モデル、User / Session / Agentスコープの設計、Claude Code・ChatGPT・Cursorのエージェントに永続記憶を10行で追加する方法まで、稟議資料そのままで使える形でまとめました。

まず5分で動かす: Mem0でChatGPTに永続記憶を追加

AIエージェントの全体像については、AIエージェント導入完全ガイドで体系的にまとめています。本記事ではMemory層に絞って深掘りします。まずは無料で動くMem0から始めます。

セットアップ(5分)

# 1. インストール
pip install mem0ai openai

# 2. OpenAI APIキー設定
export OPENAI_API_KEY="sk-xxxxxxxx"

最小構成: 永続記憶付きチャットボット

# memory_chat.py
from mem0 import Memory
from openai import OpenAI

m = Memory()
client = OpenAI()

def chat(user_id: str, message: str) -> str:
    # 1. ユーザーの過去の記憶を検索
    related_memories = m.search(query=message, user_id=user_id)
    memories_str = "\n".join([f"- {x['memory']}" for x in related_memories['results']])

    # 2. 記憶を含めてLLMに送る
    system_prompt = f"あなたは個人アシスタントです。\n以下はユーザーに関する記憶です:\n{memories_str}"
    response = client.chat.completions.create(
        model="gpt-5-mini",
        messages=[
            {"role": "system", "content": system_prompt},
            {"role": "user", "content": message}
        ]
    )
    answer = response.choices[0].message.content

    # 3. 新しい会話を記憶として保存(Mem0が自動で重要部分を抽出)
    m.add([
        {"role": "user", "content": message},
        {"role": "assistant", "content": answer}
    ], user_id=user_id)

    return answer

# 使ってみる
print(chat("user_001", "私は東京在住で、AIエージェント開発が専門です"))
print(chat("user_001", "週末の予定を立てたいです"))
# → 2回目の質問でも、AIが「user_001は東京在住・AIエージェント開発専門」を覚えている

これだけで、ユーザーごとの記憶が永続化され、別セッションで質問しても「東京在住」「AI専門」という事実をAIが覚えています。Mem0は重要情報を自動抽出してベクトルDBに保存するので、開発者が「何を覚えるか」を細かく指定する必要がありません。

研修先での実例: 上記の最小構成を顧問先のアシスタント担当者に見せたところ、「毎回自己紹介する苦痛から解放されるなら、これだけで利用率が回復する」と即決でした。実際1週間で社内アシスタントの利用率が3倍に戻り、メイン業務ツールに昇格しました。Memory層を入れる工数が10行で済むので、コスト対効果が圧倒的です。

Memory階層モデル: Core / Archival / Recall

2026年のAIエージェントメモリ設計は、OS(オペレーティングシステム)のメモリ管理に着想を得た3層モデルが標準です。Letta(旧MemGPT)が論文で提唱し、業界標準になりました。

役割OSアナロジー具体例
Core Memory常にコンテキストに含める基本情報RAM(高速・常時参照)ユーザー名・職業・所属・基本設定
Archival Memory外部ベクトルDBに永続保存・検索可能HDD/SSD(容量大・検索)過去の業務メモ・ナレッジ・参考資料
Recall Memory過去の会話履歴・対話ログキャッシュ(直近の文脈)直近30日のチャット履歴

3層を使い分ける理由

すべてをCore Memoryに置くと、コンテキストが肥大化してコストが爆発します。逆にすべてArchivalに置くと、毎回検索が走って遅延が発生します。Recall Memoryで「直近の文脈は素早く」、Archival Memoryで「過去の事実は検索」、Core Memoryで「絶対忘れてはいけない基本情報」を保持する、という階層管理が本番運用の王道です。

スコープの2軸: User / Session / Agent

もうひとつ重要な設計軸が「スコープ」です。Mem0は3つのスコープをサポートしており、目的に応じて使い分けます。

  • User scope: ユーザー個人に紐づく記憶(個人設定・好み・職業)
  • Session scope: 単一セッション内のみで保持(チャットの一時的な文脈)
  • Agent scope: AIエージェント自身の記憶(組織知・全ユーザー共通の知識)
# Mem0でスコープを使い分ける
from mem0 import Memory
m = Memory()

# User scope: 個人の好み
m.add("ピーマンが嫌い", user_id="alice")

# Session scope: 一時的な文脈(セッションIDも併用)
m.add("今日の会議は15時から", user_id="alice", run_id="session_2026_05_07")

# Agent scope: 組織共通知
m.add("このAIエージェントは経費精算ツール「Concur」と連携しています", agent_id="expense_bot")

AI活用、何から始めればいい?

100社以上の研修実績をもとに、30分の無料相談で貴社の課題を整理します。

無料相談はこちら 資料ダウンロード(無料)

Memory 3強比較: Mem0 / Zep / Letta

2026年のAIエージェント Memory層は3つの主要選択肢があります。それぞれ設計思想が異なるので、用途に応じて使い分けます。

項目Mem0ZepLetta(旧MemGPT)
提供形態OSS(48K stars)+ Cloud SaaSOSS + 商用版(本番特化)OSS + Cloud(ランタイム同梱)
位置づけメモリLayer(既存エージェントに追加)メモリServer(独立サービス)エージェントRuntime(中で動かす)
記憶の形式ベクトル + グラフ + KVのハイブリッドベクトル + ナレッジグラフ + エンティティ3層(Core/Archival/Recall)+ 自己編集
記憶抽出add()で自動抽出(パッシブ)会話要約・エンティティ抽出(非同期)エージェント自身が判断(アクティブ)
状態変化対応新しい記憶で上書きタイムスタンプ付きで状態遷移を理解エージェントが明示的に編集
適用シーン個人アシスタント・チャットボット大規模本番・長時間セッション研究・自律エージェント
料金(Cloud)無料tier + 有料無料tier + 有料無料tier + 有料

Mem0の選び方

「既存のAIエージェントにMemory層を後付けで追加したい」場合、Mem0が最速です。Claude Agent SDKOpenAI Agents SDKLangGraphCrewAIすべてとシームレスに統合でき、依存関係もほぼゼロ。個人アシスタント・カスタマーサポート系の用途では9割の事例でMem0で十分です。

Zepの選び方

「大規模本番でユーザー1万人以上を想定」「エンティティ抽出(人名・組織名・日時)を別軸で管理したい」「状態変化(引っ越し・転職など)を時系列で追跡したい」場合は、Zepが最強です。「ユーザーが東京から大阪に引っ越した」のような状態遷移を、ZepはタイムスタンプつきでナレッジグラフにEdgeとして記録します。

# Zep — 状態遷移を理解する記憶
from zep_python import ZepClient

zep = ZepClient(api_key="z_xxxxxxxx")
session = zep.memory.add_session(user_id="alice")

# 過去の事実
zep.memory.add(session_id=session.id, messages=[
    {"role": "user", "content": "私は東京の港区に住んでいます"}
])

# 状態が変化
zep.memory.add(session_id=session.id, messages=[
    {"role": "user", "content": "来月から大阪に引っ越します"}
])

# Zepは「現住所: 東京」→「現住所: 大阪(来月から)」という状態遷移を理解
# → 後でAIに聞いた時、最新の状態だけを返す

Lettaの選び方

「自律的に成長するAIエージェント」「研究用途」「エージェント自身が記憶を編集できる仕組み」が必要な場合はLettaです。Lettaはメモリ層ではなく「エージェントランタイム」で、エージェントが自分の判断で core_memory_replace() を呼んでメモリを編集します。MemGPT論文の思想を実装しており、長期実行エージェント(数日〜数ヶ月)に最適です。

# Letta — 自己編集メモリ付きエージェント
from letta_client import Letta

client = Letta(token="letta_xxxxxxxx")

agent = client.agents.create(
    memory_blocks=[
        {"label": "human", "value": "ユーザーの基本情報をここに保存"},
        {"label": "persona", "value": "あなたは丁寧なアシスタントです"}
    ],
    model="openai/gpt-5",
    embedding="openai/text-embedding-3-large"
)

# エージェントが自分でメモリを更新する
response = client.agents.messages.create(
    agent_id=agent.id,
    messages=[{"role": "user", "content": "今後Aliceと呼んでください"}]
)
# → エージェントが core_memory_replace を内部で呼んで、humanブロックを更新

RAG vs Memory: 違いと組み合わせ

「RAG(検索拡張生成)があればMemory要らないのでは?」とよく聞かれますが、両者は補完関係にあります。

観点RAGMemory
主な対象外部ドキュメント・社内ナレッジユーザーとの対話履歴・個人情報
更新頻度低(バッチで再インデックス)高(リアルタイム更新)
抽出ロジック類似度検索(cosine等)会話からfact抽出 + 構造化保存
状態管理静的(バージョン管理)動的(状態遷移を追跡)
主な使い方「製品マニュアル教えて」「先週話したあの件…」

RAG + Memoryの組み合わせ実装

# RAG(社内ナレッジ)+ Memory(ユーザー記憶)両方使う
from mem0 import Memory
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings

# RAG層: 社内ナレッジ
embedding = OpenAIEmbeddings()
rag = Chroma(persist_directory="./company_knowledge", embedding_function=embedding)

# Memory層: ユーザーごとの記憶
m = Memory()

def smart_assistant(user_id: str, query: str) -> str:
    # 1. ユーザー個人の記憶を取得
    user_memories = m.search(query=query, user_id=user_id)

    # 2. 社内ナレッジを検索
    company_docs = rag.similarity_search(query, k=3)

    # 3. 両方を含めてLLMに送る
    context = f"""
ユーザーの記憶:
{[m['memory'] for m in user_memories['results']]}

社内ナレッジ:
{[d.page_content for d in company_docs]}
"""
    return ask_llm(context, query)

主要AIエージェントプラットフォームでのMemory実装

各プラットフォームでMemoryをどう実装するかを整理します。

プラットフォーム標準Memory機能外部Memory連携
AWS Bedrock AgentCoreMemory コンポーネント標準Mem0/Zep外部連携可
Vertex AI Agent BuilderConversation MemoryMem0/Zep外部連携可
Microsoft Copilot StudioTopic-based memoryPower Automate連携
Salesforce AgentforceData Cloud + CRM historyCRMネイティブ
Claude Agent SDK独自実装(Mem0等推奨)すべて対応
OpenAI Agents SDKBuilt-in conversationMem0/Zep連携可
LangGraphCheckpointer + StateLangMem / Mem0連携
AutoGenConversation historyMem0外部連携
CrewAIMemory(短期/長期/エンティティ)Mem0連携
MCPResource経由でMemory公開可能すべて

選び方の指針: フルマネージドのプラットフォーム(Bedrock AgentCore / Vertex AI / Agentforce)は標準Memory機能で十分なケースが多いです。OSSフレームワーク(LangGraph / CrewAI / AutoGen)はMem0などを別途追加するパターンが王道。Memory層をすべてのエージェントで共有したい場合は、独立したMem0/Zep Serverを立ててMCP Resourceとして公開する設計が、2026年の最新パターンです。

本番運用の実装パターン: Memory + LangGraph

状態機械型エージェントLangGraphとMem0を組み合わせる本番パターンを紹介します。LangGraphのCheckpointerは「セッション内の状態保存」、Mem0は「ユーザー横断の長期記憶」と役割分担します。

# LangGraph + Mem0 の組み合わせ
from langgraph.graph import StateGraph, MessagesState
from langgraph.checkpoint.postgres import PostgresSaver
from mem0 import Memory

m = Memory()

def agent_node(state: MessagesState, config: dict):
    user_id = config["configurable"]["user_id"]
    last_message = state["messages"][-1]["content"]

    # Mem0からユーザーの長期記憶を取得
    memories = m.search(query=last_message, user_id=user_id)
    memories_str = "\n".join([x['memory'] for x in memories['results']])

    # LLMに送る
    response = call_llm(
        system=f"ユーザー記憶:\n{memories_str}",
        messages=state["messages"]
    )

    # 新しい会話をMem0に記録(バックグラウンド)
    m.add([
        {"role": "user", "content": last_message},
        {"role": "assistant", "content": response}
    ], user_id=user_id)

    return {"messages": [{"role": "assistant", "content": response}]}

# LangGraphのCheckpointerでセッション状態を永続化
checkpointer = PostgresSaver.from_conn_string(os.environ["DATABASE_URL"])
graph = StateGraph(MessagesState)
graph.add_node("agent", agent_node)
graph.set_entry_point("agent")
app = graph.compile(checkpointer=checkpointer)

# 使う
result = app.invoke(
    {"messages": [{"role": "user", "content": "先週の件、続きを話したい"}]},
    config={"configurable": {"thread_id": "session_xxx", "user_id": "alice"}}
)

顧問先での実例: あるSaaS企業のサポートエージェントでこの構成を採用したところ、「毎回ゼロから説明」体験から「先週の続きから」体験へ劇的に変わり、サポート対応時間が顧客あたり平均40%短縮されました。Memory層は単に「便利機能」ではなく、業務効率の根本を変える基盤です。

【要注意】よくある失敗パターン4選と回避策

失敗1: PII(個人情報)が無制限にMemoryに溜まる

❌ NG例: ユーザーがチャット中に話したマイナンバー・クレジットカード番号・パスワードがそのままMemoryに保存される

⭕ 正しいアプローチ: Memory保存前にPII検知・マスキングを必ず適用。Lakera GuardやAWS ComprehendのPII Detection、もしくはMicrosoft PresidioをMemory.add()の前段に挟む。詳しくはAIエージェントセキュリティ完全ガイドで解説しています。

失敗2: 状態遷移を理解せず古い情報が返る

❌ NG例: 「ユーザーは東京在住」と「ユーザーは大阪在住(先月引っ越し)」が両方Memoryに残り、AIが「東京と大阪、どちらにお住まいですか?」と聞き返す

⭕ 正しいアプローチ: 単純なベクトル検索ではなく、Zepのようにタイムスタンプ付き状態遷移を扱える設計にする。Mem0でも、新しい記憶が古い記憶を「上書き」する設定(update mode)を有効にする。

研修先の実例: ある顧問先で、Memory機能を入れた後にユーザーから「AIが私の住所を勘違いしている」と苦情が出ました。原因は、ユーザーが過去に複数の住所を述べていて、Memoryがそれらすべてを「現住所」として保持していたからです。タイムスタンプ付き「最新状態優先」設計に切り替えた直後、苦情がゼロになりました。

失敗3: コストが爆発する

❌ NG例: ユーザー1人あたり数千件の記憶が溜まり、ベクトル検索が毎回数百ms以上かかる

⭕ 正しいアプローチ: 古い記憶のアーカイブポリシー(例: 1年以上経過したものは要約に圧縮)と、検索時の上限件数(top_k=5)を必ず設定。Mem0は重要度スコアリングで自動的に古いものを忘却する仕組みもあります。

失敗4: 忘却タイミングが不適切でユーザー体験が悪化する

❌ NG例: 「もう使わないでね」と言われた個人情報を、数週間後にAIが参照してしまう

⭕ 正しいアプローチ: ユーザーから「忘れて」と言われた情報は明示的に削除(GDPR・個人情報保護法の要請でもある)。Mem0にはm.delete()、Zepにはdelete_session()がありますが、UI/UXとして「忘れる」操作を必ずユーザーに提供することが2026年のスタンダードです。

30-60-90日 Memory層構築ロードマップ

0-30日: Mem0でクイックスタート

  1. Mem0をローカルで動作確認(無料・OSS)
  2. 主要エージェント1つにMemory層を追加(10行のコード)
  3. User scopeのみで運用してみる(最も基本的なケース)
  4. 1週間後に「過去の文脈を覚えていて助かった」という声が出るか確認
  5. PIIマスキング(Microsoft Presidio)を前段に追加

31-60日: スコープと階層を整える

  1. User / Session / Agent の3スコープ設計を導入
  2. Core / Archival / Recall の3層を意識した実装に進化
  3. 古い記憶のアーカイブポリシーを設定(1年経過で圧縮)
  4. Memory層の観測(Langfuseなどで取得・更新ログを記録)
  5. 「忘れて」UI/UXをエンドユーザー向けに公開

61-90日: 状態遷移と長期運用

  1. Mem0 → Zep への移行を検討(状態遷移が複雑なケース)
  2. RAG(社内ナレッジ)とMemory層の役割分担を明確化
  3. Memory更新の監査ログをSIEMに送信(規制業種)
  4. 四半期ごとのMemory棚卸し運用を開始
  5. 本記事の3層モデルをチーム内ドキュメント化

まとめ:今日から始める3つのアクション

AIエージェントのMemory層は、もはや「あれば良い」レベルではなく、ユーザーが継続的に使うアシスタントを作るための必須要件です。Mem0なら10行のコードで永続記憶が追加でき、ChatGPT素のAPIから卒業できます。今日から試せる順番を整理します。

  1. 今日やること: pip install mem0ai でMem0をインストール、本記事の「最小構成」コードをそのままコピーして動かす。「過去の発言を覚えているAI」体験が15分で構築できます。
  2. 今週中: 自社で運用中のAIエージェント(チャットボット・カスタマーサポート等)1つに、User scopeのMem0統合を追加。社内ユーザー数名でテストして、ユーザー体験の変化を計測する。
  3. 今月中: PIIマスキング(Microsoft Presidio)を前段に追加、Core / Archival / Recallの3層モデルで設計を整える。長期記憶を保存する範囲・忘却タイミング・監査ログをチーム内で文書化する。

📅 5月開催|Uravation主催 Zoomウェビナー

講師: 株式会社Uravation代表 佐藤傑(X @SuguruKun_ai) / Yusei Tataka


あわせて読みたい:


参考・出典


著者: 佐藤傑(さとう・すぐる)
株式会社Uravation代表取締役。早稲田大学法学部在学中に生成AIの可能性に魅了され、X(@SuguruKun_ai)フォロワー約10万人。100社以上の企業向けAI研修・導入支援を展開。著書『AIエージェント仕事術』(SBクリエイティブ)。SoftBank IT連載7回執筆(NewsPicks最大1,125ピックス)。

ご質問・ご相談は お問い合わせフォーム からお気軽にどうぞ。

佐藤傑
この記事を書いた人 佐藤傑

株式会社Uravation代表取締役。早稲田大学法学部在学中に生成AIの可能性に魅了され、X(旧Twitter)で活用法を発信(@SuguruKun_ai、フォロワー10万人超)。100社以上の企業向けAI研修・導入支援を展開。著書累計3万部突破。SoftBank IT連載7回執筆(NewsPicks最大1,125ピックス)。

この記事をシェア

📧 週1回、AIツール最新情報をお届け

Claude Code・Codex・Cursorなど最新AI実務情報を、月8-12本の厳選記事から要約してメール配信。すでに3,000人以上のAI担当者が購読中です。

※ いつでも登録解除できます。配信頻度は週1〜2回程度。

AIエージェントを企業に安全に導入したい方へ

Claude Code・OpenClaw・Codex等のAIエージェントを、ガバナンス設計込みで導入支援。権限制御・監査ログ・停止条件まで含めた「ハーネス設計」で運用リスクをゼロに。

✓ 1対1のマンツーマン ✓ 全12回・3ヶ月 ✓ 実務ベースの指導
AIエージェント導入支援を見る まずは無料相談

contact お問い合わせ

生成AI研修や開発のご依頼、お見積りなど、
お気軽にご相談ください。

Claude Code 個別指導(1対1・12セッション)をご希望の方はこちらから別途お申し込みください

Claude Code 個別指導 無料相談