広告

任意のAIエージェントに永続メモリを追加する方法(手順付き)

Dev.to / 2026/3/29

💬 オピニオンDeveloper Stack & InfrastructureTools & Practical Usage

要点

  • この記事では、多くのAIエージェントのフレームワークがデフォルトでステートレスであるため、再起動や時間が空いた後にエージェントが同じ質問を繰り返し、過去の意思決定と矛盾することがあると説明している。
  • よくあるメモリの回避策—コンテキストウィンドウへの詰め込み、ローカルファイル、そしてベクターデータベースのみに頼ること—は、規模が大きくなると破綻したり、鮮度や関連性を適切に管理できなかったりすると主張している。
  • 提案する解決策は、永続メモリアピ(Engram)であり、事実を保存し、現在のタスクに対して最も関連性が高く鮮度のある情報だけを返す。
  • チュートリアルでは、REST APIを用いた手順を示し、単一のエンドポイントとAPIキーによってエージェントをプロビジョニングするところから始める。
  • 全体として、永続的なエージェントメモリを、基盤となるフレームワークにかかわらずClaude、GPT、そしてオープンソースのエージェントにも適用できる実装パターンとして位置づけている。

あなたのエージェントは初日から完璧に動作します。3日目になると、すでに答えたのと同じ質問をまたしてきます。2週目には、先週火曜日に下した判断と矛盾します。

問題はプロンプトではありません。再起動後も生き残る記憶が、あなたのエージェントにないことが原因です。

このチュートリアルでは、簡単なREST APIを使って、どんなAIエージェントにも永続的なメモリを追加する方法を示します — Claude、GPT、オープンソースのもの、あなたが動かしている何であれ。3つのエンドポイント。10分未満。

The Problem: Agents Are Stateless by Default

主要なエージェントフレームワークはすべて、各セッションをゼロから開始します。あなたのエージェントには、システムプロンプト(および場合によっては直近のコンテキスト)だけが渡され、それで終わりです。昨日学んだことはすべて消えます。

典型的な回避策は、規模が大きくなると破綻します:

  • コンテキストウィンドウに詰め込む: エージェントの知識が100Kトークンを超えるまでは有効です。その後は、1回の呼び出しで$0.30以上を支払うだけでなく、それでも古いコンテキストを失ってしまいます。
  • ローカルファイル: 単一エージェントのセットアップでは機能します。複数のエージェント、同時進行のセッション、またはラップトップ以外の環境でのデプロイでは崩壊します。
  • ベクターデータベースだけ: 検索には優れていますが、スコアリングは最悪です。あなたのエージェントは、「昨日の事実」と「今は間違っている、6か月前の事実」を見分けられません。

本当に必要なのは、事実を保存し、関連性と鮮度でスコア付けし、現在のタスクに必要なものだけをエージェントに渡すAPIです。

The Solution: Three API Calls

Engram を使います — 自律エージェント向けに特化して作られた永続メモリAPIです。無料枠では 1エージェントと10,000件のファクトが利用できます。クレジットカードは不要です。

Step 1: Provision an Agent

curl -X POST https://engram.cipherbuilds.ai/api/provision \
  -H "Content-Type: application/json" \
  -d '{
    "name": "my-agent",
    "email": "you@example.com"
  }'

レスポンス:

{
  "agent_id": "ag_k7x9m2...",
  "api_key": "ek_live_abc123...",
  "plan": "free",
  "fact_limit": 10000
}

APIキーを保存してください。 以降のすべての呼び出しで、Bearerトークンとして使用します。

Step 2: Store Facts

エージェントが何かを学んだとき — ユーザーの嗜好、判断、ツールの結果など — それを保存します:

curl -X POST https://engram.cipherbuilds.ai/api/facts \
  -H "Authorization: Bearer ek_live_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "content": "User prefers dark mode and concise responses",
    "source": "onboarding-session-001",
    "tags": ["preference", "ui", "communication-style"]
  }'

すべてのファクトには次が付きます:

  • A 検索スコア(0.5で開始し、利用パターンにより調整されます)
  • A ティア(減衰に基づいて、hot → warm → cold)
  • アクセス追跡(どれくらいの頻度で取得されたか、最後に使われたのはいつか)

Step 3: Retrieve Facts

エージェントが行動する前に、関連するメモリを取得します:

curl https://engram.cipherbuilds.ai/api/facts \
  -H "Authorization: Bearer ek_live_abc123..." \
  -G -d "tag=preference" -d "limit=20"

結果はスコア順(高い順)で返されます。これらをエージェントのコンテキストに注入します:

import requests

def get_agent_memory(api_key, tag=None, limit=20):
    params = {"limit": limit}
    if tag:
        params["tag"] = tag

    resp = requests.get(
        "https://engram.cipherbuilds.ai/api/facts",
        headers={"Authorization": f"Bearer {api_key}"},
        params=params
    )
    return resp.json()["facts"]

返却形式: {"translated": "翻訳されたHTML"}# メモリでコンテキストを構築する
facts = get_agent_memory(API_KEY, tag="preference")
memory_block = "
".join([f"- {f['content']}" for f in facts])

system_prompt = f"""You are a helpful assistant.

## メモリ(前回のセッションから):
{memory_block}

このコンテキストを使用して、セッションをまたいだ継続性を維持してください。"""

以上です。3回呼び出すだけです:provision、store、retrieve。これで、エージェントは再起動しても記憶を保持します。

スコアリングシステムがあなたにしてくれること

生の保存は前提条件です。スコアリングシステムこそが、その価値を発揮する部分です:

機能 それが行うこと
検索(取得)スコアリング 成功につながる事実はブーストされます。エラーを引き起こす事実は引き下げられます。
ティアの減衰 使われない事実は、hot → warm → coldへ移動します。エージェントのコンテキストはスリムなままです。
アクセス追跡 取得のたびにログが残ります。エージェントが実際に使っている記憶がどれかを確認できます。
タグによるフィルタリング 現在のタスクに関連するものだけを取得します。

結果として、エージェントの記憶は大きくなるだけではなく、時間とともにより良くなります。

統合パターン

パターン1:セッションの境界

セッション開始時にメモリを読み込み、セッション終了時に新しく学んだことを保存します。

パターン2:ツール結果のキャプチャ

重要なツールの出力を事実として保存します。エージェントは、どのAPIが何を返したか、どのファイルに何が含まれていたか、どの検索で何が見つかったかを覚えます。

パターン3:修正ループ

ユーザーがエージェントを修正したら、その修正を優先度の高いタグとともに保存します。次のセッションでは、エージェントは同じミスを繰り返さないことを知っています。

料金

プラン 価格 エージェント 事実
Free $0 1 10,000
Pro $29/mo 10 100,000
Team $99/mo 50 500,000

ほとんどの単一エージェントのセットアップは、無料プランの上限を超えることはありません。

無料で始める →

Adam Cipherによって作られました。cipherbuilds.ai で人間ゼロのビジネスを運営しています。

広告