メインコンテンツにスキップ

あなたの仮想通貨AIエージェントにメモリを追加する方法

AIエージェントが記憶なしだと毎回ゼロからやり直し。このガイドでは、前回の発見や昨日の会話を記憶させる永続化のコツを紹介するよ。

対応者:Pete Darby

スコープノート。 Cryptohopper MCP はステートレス設計です — 各ツール呼び出しは独立しており、サーバーはリクエスト間に何も永続化しません。メモリはクライアントサイドまたはあなたが管理するストレージに存在します。このガイドはそのレイヤーについてです。

前提条件

  • 動作する Cryptohopper MCP 接続を持つ MCP クライアント。 セットアップ概要 を参照してください。

  • データを保存する場所。ローカルファイル、SQLite データベース、クラウドに保存された JSON ブロブ、または Notion のようなツールが考えられます。開始にあたりインフラストラクチャは不要です。

「メモリ」とは何か

3つのレイヤーがあり、それぞれ異なる理由で役立ちます。

レイヤー

一般的な場所

セッションメモリ

1回の会話の中で、モデルが以前にあなたが言ったことを覚えている

モデルのコンテキストウィンドウ(組み込み)

クロスランメモリ

今日のエージェント実行が、先週の実行が観測したことを覚えている

ファイル、データベース、Notion など

ユーザープロファイル

エージェントがあなたのウォッチリスト、好みの取引所、リスク選好度を知っている

クロスランと同じ。セッション開始時にロードされる

セッションメモリは無料かつ自動です。クロスランメモリとユーザープロファイルメモリは、ストレージの設定が必要です。

セットアップ — ユーザープロファイル

  1. 暗号通貨ユーザーとしてのあなた自身を説明する短い Markdown ファイルを作成します。1ページ未満に収めるようにしてください。


    ユーザーについて
    主に Binance で取引する。
    ウォッチリスト: BTC, ETH, SOL, AVAX, ARB, OP, LINK, AAVE, UNI。
    現物保有; Cryptohopper を介して SOL と AVAX でグリッドボットを実行する。
    アップサイドの機会を逃すより、ドローダウンリスクを重視する。
    パーペチュアル取引はしない。

    デフォルト
    取引所: Binance
    基軸通貨: USDT
    テクニカル分析 timeframe: 4h (200 bars)
    リスク許容度: moderate

    プロンプトの好み
    形容詞よりも具体的な数値を好む。
    投機は投機としてフラグを立てる。
    ティッカーが曖昧な場合は、推測するのではなく質問する。

  2. 各エージェント会話の開始時にロードします。2つのアプローチがあります。

    • 手動ペースト: 各セッションで最初にファイルの内容を貼り付けます。

    • クライアント統合: クライアントの永続メモリ機能(Claude デスクトップの Projects、Cursor のルール、Zed のコンテキスト)を使用して自動挿入します。

  3. ファイルを小さく保ちます。約 300 行を超えるものは、モデルがスキップしてしまうノイズになります。重要なのは制約であり、自伝ではありません。

  4. バージョン管理します。ウォッチリストや好みが変わったら、変更を Git(または Notion の履歴)にコミットします。エージェントの動作はプロファイルによって変化するため、その理由を確認したくなります。

セットアップ — クロスランメモリ(シンプル)

最もシンプルなクロスランメモリは、エージェントが開始時に読み込み、終了時に追記する単一の Markdown ファイルです。

  1. memory.md をスケルトンで作成します。

    エージェントメモリ  最近の観測(各実行後にここにエントリを追記します。)  注意すべき未解決の項目(将来の注意のためにエージェントがフラグを立てたもの。)  過去の決定(注目すべき決定とその理由。)

  2. 各エージェント実行の開始時に、ファイルの内容を挿入します。

    [AGENT MEMORY] {memory.md の内容}  [TASK] 今日のタスク: 日次ダイジェストを実行する。

  3. 各実行の終了時に、新しい観測を追記します。それらを明示的に生成するようにエージェントに依頼します。

    タスク完了後、次回のために覚えておく価値のある注目すべき点を要約した 2~4 行を記述してください。この形式を使用します:  [YYYY-MM-DD] {観測}  例: [2026-05-27] SOL の出来高が 3 日連続で増加; roughly 83-87 の範囲で推移。 [2026-05-27] ウォッチリスト: LINK は静かだが 7 日後にチェックする価値があるとフラグを立てた。  これらの内容は手動で memory.md に追記します。

  4. 定期的にレビューして、間引きします。週に一度程度、`memory.md` をトリミングします — 古いエントリを削除し、パターンを統合します。管理されていないメモリファイルは無制限に成長し、ノイズになります。

セットアップ — クロスランメモリ(構造化)

クエリ可能な履歴から恩恵を受けるエージェントの場合、小さな SQLite データベースがうまく機能します。スキーマの提案:

sql

CREATE TABLE observations (
id INTEGER PRIMARY KEY,
run_at TEXT NOT NULL, -- ISO-8601
agent_name TEXT NOT NULL, -- 例: "daily-digest"
category TEXT, -- 例: "volume-spike", "trend-change"
token TEXT, -- 例: "SOL"
content TEXT NOT NULL, -- 観測テキスト
metadata JSON -- 構造化されたフィールドがあれば
);

CREATE INDEX idx_run_at ON observations(run_at);
CREATE INDEX idx_agent_token ON observations(agent_name, token);

これにより、「過去14日間で SOL についてどのような観測を行いましたか?」といったクエリを実行し、その回答を今日の実行のコンテキストとしてエージェントにフィードすることができます。

エージェントは、小さな Python ヘルパーを介してこのテーブルに書き込みます。

python

def log_observation(agent_name: str, category: str,
token: str, content: str) -> None:
conn.execute(
"INSERT INTO observations (run_at, agent_name, category, token, content) "
"VALUES (?, ?, ?, ?, ?)",
(datetime.utcnow().isoformat(), agent_name, category, token, content),
)
conn.commit()

これは控えめに使用してください。構造化されたメモリは、実際にクエリする場合にのみ設定する価値があります。シンプルなダイジェストの場合は、Markdown ファイルで十分なことが多いです。

記憶すべきこと、記憶すべきでないこと

記憶に適した候補:

  • 「SOL は 5 日間、83~87 のバンドで横ばいのトレンドを続けている」— 日足だけでは明日の実行時に表示されない範囲のコンテキスト。

  • 「昨日 LINK で出来高の異常をフラグ付けしました。今日フォローアップしてください。」

  • 「ユーザーが 2026-05-20 に AVAX のグリッドボットについて質問しました。パラメータは X, Y, Z でした。」

記憶に適さない候補:

  • 生の市場データ。これは変更されるため、古いキャッシュを信頼するよりも MCP から再プルしてください。

  • 会話の全トランスクリプト。信号対ノイズ比が低すぎます。

  • すべての実行の自動要約。キュレーションなしでは、これらはほとんど役に立たなくなります。

良いテスト:*「このメモリ エントリを削除した場合、来週のエージェントの動作は悪化しますか?」* いいえなら、削除してください。

トラブルシューティング

エージェントが現在のデータと矛盾するメモリを引用する。

これはキャッシュされたコンテキストの根本的なリスクです。エージェントは SOL が上昇トレンドにあったことを「覚えている」が、その後反転した。修正:エージェントに、メモリの主張を事実として使用する前に、常に現在の MCP データに対して検証するように指示します。*「メモリ エントリに頼る前に、現在のデータをチェックし、メモリが古い場合はフラグを立ててください。」*

メモリ ファイルが管理不能なほど大きくなる。

間引きせずに追記しています。ハードルールを設定します。週に一度、前週のエントリを確認し、削除/マージします。または、メモリ ファイルを月ごとにローテーションします(memory-2026-04.mdmemory-2026-05.md)。

エージェントがメモリ ブロックを無視する。

プロンプトがエージェントにそれを使用するように要求していません。明示的に指示します。*「回答する前に上記のメモリ ブロックを確認してください。関連する場合は特定の項目を参照してください。エントリが新しいデータと矛盾する場合は、それを明確にフラグ立ててください。」*

メモリが自信に満ちているが間違った回答をもたらす。

エージェントがメモリを公式情報として扱っています。メモリを真実ではなくヒントとして framing します。*「メモリには過去の観測が含まれています。事実ではなくコンテキストとして扱ってください。常に現在のデータに対して検証してください。」*

エージェントに介入なしでメモリを更新させたい。
可能ですがリスクがあります — 監視されていない追記専用メモリは、良いエントリと同じ速さで悪いエントリを蓄積します。自動化する場合は、必ず週次レビュー手順とペアにします。メモリが1か月間読み取られずに成長するのを絶対に許さないでください。

マルチエージェントのメモリが混乱する。
複数のエージェントが単一のメモリ ファイルを共有する場合、`agent_name` フィールドを使用してエントリを名前空間分離します。各エージェントは自身の項目のみを読み取るか、ファイル全体を読み取りますが、どのエージェントがどの行を書き込んだかを知っています。

ユーザー プロファイル ファイルが古くなる。 好みは変わります。エージェントがもはや使用していないタイムフレームや取引所にデフォルト設定されていることに気付いた場合は、プロンプトごとのオーバーライドで回避するのではなく、プロファイルを更新してください。

こちらの回答で解決しましたか?