Fragments of verbose memory

冗長な記憶の断片 - Web技術のメモをほぼ毎日更新

Feb 21, 2026 - 日記

AIエージェントのメモリは「覚える」だけでは足りない: Mengramが実装した手順進化の仕組み

AIエージェントのメモリは「覚える」だけでは足りない: Mengramが実装した手順進化の仕組み cover image

AI エージェントに「前回のデプロイ手順を覚えておいて」と頼んでも、次回また同じ失敗を繰り返す——そんな経験はありませんか?

従来のAIメモリツールは「事実を記憶する」ことに特化していますが、Mengram は一歩進んで「失敗から学習して手順を自動進化させる」仕組みを実装しました。本記事では、Mengramの3層メモリ設計と、他のメモリツール(Mem0、Letta、Zep)との違いを解説します。

AIエージェントが同じ失敗を繰り返す理由

現在のAIエージェントは、会話履歴やRAG(Retrieval-Augmented Generation)を使って過去の情報を参照できます。しかし、以下のような問題が起きます:

  • 失敗の記録はあるが、次回の手順に反映されない
  • 「前回〇〇で失敗した」という事実は覚えているが、手順自体は更新されない
  • 毎回同じ質問をして、同じ失敗を繰り返す

これは、従来のメモリツールが「事実の記憶」(Semantic Memory)に偏っていて、「手順の学習」(Procedural Memory)を扱えないからです。

Mengramの3層メモリ設計

Mengramは、人間の記憶を参考にした3種類のメモリを統合的に扱います:

メモリタイプ説明
Semantic Memory事実・知識「Railwayのビルドは5分かかる」
Episodic Memoryイベント・経験「2026年2月18日にデプロイが失敗した」
Procedural Memory手順・ワークフロー「デプロイ手順: ビルド→マイグレーション→デプロイ」

この中で、Procedural Memoryが失敗から自動進化する点が、Mengramの最大の特徴です。

手順進化の具体例

以下は、デプロイ手順が失敗を経て進化する例です:

flowchart TB
    subgraph v1["Week 1: Deploy v1"]
        direction LR
        v1_build[build] --> v1_push[push] --> v1_deploy[deploy]
    end
    
    v1 -->|"FAILURE: マイグレーション忘れ、DB障害"| v2
    
    subgraph v2["Week 2: Deploy v2"]
        direction LR
        v2_build[build] --> v2_migrate[run migrations] --> v2_push[push] --> v2_deploy[deploy]
    end
    
    v2 -->|"FAILURE: OOMエラー発生"| v3
    
    subgraph v3["Week 3: Deploy v3 ✅"]
        direction LR
        v3_build[build] --> v3_migrate[run migrations] --> v3_check[check memory] --> v3_push[push] --> v3_deploy[deploy]
    end
    
    style v1 fill:#ffcccc,stroke:#cc0000
    style v2 fill:#ffffcc,stroke:#cccc00
    style v3 fill:#ccffcc,stroke:#00cc00

この進化は、エージェントが失敗を報告すると自動的に行われます。

Mengramの基本的な使い方

Python とJavaScriptのSDKが提供されています。ここではPythonの例を紹介します。

インストール

1
pip install mengram-ai

基本的なコード例

以下のコードは、会話を追加してメモリを自動抽出し、検索する例です:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from cloud.client import CloudMemory

# 無料APIキーを取得: https://mengram.io/dashboard
m = CloudMemory(api_key="om-...")

# 会話を追加(自動的に3種類のメモリを抽出)
m.add([
    {
        "role": "user", 
        "content": "Deployed to Railway today. Build passed but forgot migrations — DB crashed. Fixed by adding a pre-deploy check."
    },
])

# 事実を検索
m.search("deployment setup")

# イベントを検索
episodes = m.episodes(query="deployment")
# → [{summary: "Deployed to Railway, DB crashed due to missing migrations", outcome: "resolved", ...}]

# 手順を検索
procedures = m.procedures(query="deploy")
# → [{name: "Deploy to Railway", steps: ["build", "run migrations", "push", "verify"], ...}]

# 3種類すべてを一度に検索
all_results = m.search_all("deployment issues")
# → {semantic: [...], episodic: [...], procedural: [...]}

会話を追加するだけで、Mengramが自動的に以下を抽出します:

  • Semantic: 「Railwayにデプロイした」「マイグレーションを忘れた」
  • Episodic: 「デプロイ失敗→修正→解決」というイベント
  • Procedural: 「デプロイ手順にpre-deployチェックを追加」

手順が失敗で進化する仕組み

Procedural Memoryの最大の特徴は、失敗をフィードバックすると手順が自動的に更新される点です。

手動フィードバック

以下のコードで、手順の失敗を報告できます:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
# 手順の実行結果をフィードバック
m.procedure_feedback(
    proc_id="手順ID",
    success=False,
    context="OOM error on step 3",
    failed_at_step=3
)

# バージョン履歴を確認
history = m.procedure_history(proc_id="手順ID")
# → {
#   versions: [v1, v2, v3],
#   evolution_log: [
#     {change: "step_added", reason: "prevent OOM"}
#   ]
# }

自動フィードバック

会話に失敗の記録を含めるだけで、Mengramが自動的に手順を更新します:

1
2
3
4
5
6
7
m.add([
    {
        "role": "user", 
        "content": "Deploy to Railway failed again — OOM on the build step"
    }
])
# → Episode auto-linked to "Deploy" procedure → failure detected → v3 created

この仕組みにより、エージェントは「同じ失敗を繰り返さない」ようになります。

Cognitive Profile: エージェントのパーソナライズ

Mengramには、メモリから「エージェントの人格」を生成する機能があります:

1
2
3
4
profile = m.get_profile()
# → "You are talking to Ali, a developer in Almaty building Mengram.
#    He uses Python, PostgreSQL, and Railway. Recently debugged pgvector deployment.
#    Workflows: deploys via build→twine→npm→git. Communicate directly, focus on practical next steps."

この出力をLLM のシステムプロンプトに挿入するだけで、エージェントがユーザーの好みや過去の経験を考慮した応答をするようになります。

他のメモリツールとの比較

Mengramと主要な競合製品を比較します:

機能MengramMem0Letta (MemGPT)Zep
Semantic Memory
Episodic Memory部分対応
Procedural Memory
手順の自動進化
Cognitive Profile
Knowledge Graph
LangChain統合部分対応
MCP サーバー
価格無料$19-249/月無料(セルフホスト)エンタープライズ

各ツールの特徴

Mem0:

  • Semantic Memoryに特化
  • Knowledge Graphによる関連性の可視化
  • 有料プラン($19-249/月)

Letta (MemGPT):

  • コンテキスト管理が強み
  • セルフホスト可能
  • Episodic Memoryは部分対応

Zep:

  • エンタープライズ向け
  • Semantic Memory + Knowledge Graph
  • 価格は要問い合わせ

Mengram:

  • 3種類のメモリを統合
  • Procedural Memoryが自動進化
  • 無料(Apache 2.0ライセンス)

どのツールを選ぶべきか

用途に応じた推奨を整理します:

用途推奨ツール理由
チャットボットMem0、ZepSemantic Memoryで十分
DevOps/運用自動化Mengram手順の自動進化が有効
カスタマーサポートMengram、LettaEpisodic Memoryで過去の問い合わせを参照
長期コンテキスト管理Lettaコンテキスト管理が強み
エンタープライズZepサポート体制が充実

LangChain/CrewAIとの統合

Mengramは、主要なエージェントフレームワークと統合できます。

LangChain統合

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from integrations.langchain import MengramChatMessageHistory, MengramRetriever

# メッセージ履歴を自動保存
history = MengramChatMessageHistory(
    api_key="om-...", 
    session_id="session-1"
)

# RAG用のRetriever(3種類のメモリを検索)
retriever = MengramRetriever(api_key="om-...")

CrewAI統合

1
2
3
4
5
6
from integrations.crewai import create_mengram_tools

# 5つのツールを生成: search, remember, profile, save_workflow, workflow_feedback
tools = create_mengram_tools(api_key="om-...")

agent = Agent(role="Support Engineer", tools=tools)

MCPサーバーとしての利用

Mengramは、Claude Desktop、Cursor、WindsurfなどのMCP 対応エディタと統合できます:

1
2
3
4
5
6
7
8
9
{
  "mcpServers": {
    "mengram": {
      "command": "mengram",
      "args": ["server", "--cloud"],
      "env": { "MENGRAM_API_KEY": "om-..." }
    }
  }
}

この設定により、エディタ上でMengramのメモリ機能を直接利用できます。

まとめ

Mengramは、従来のメモリツールが扱わなかった「手順の学習」を実装したAIメモリAPIです。

主な特徴:

  • 3種類のメモリ(Semantic、Episodic、Procedural)を統合
  • Procedural Memoryが失敗から自動進化
  • Cognitive Profileでエージェントをパーソナライズ
  • LangChain、CrewAI、MCPサーバーとの統合
  • 無料(Apache 2.0ライセンス)

向いている用途:

  • DevOps/運用自動化(デプロイ手順の改善)
  • カスタマーサポート(過去の問い合わせ履歴の活用)
  • エージェントのパーソナライズ

「エージェントが同じ失敗を繰り返す」問題に悩んでいる方は、Mengramを試してみてください。

参考リンク