本番環境の AI エージェント 2 体で運用する 4 層メモリ・アーキテクチャ

@MatthewGunnin
英語2 週間前 · 2026年7月02日
162K
137
20
6
708

TL;DR

Matt Gunnin 氏が、AI エージェント向けのプロダクション・レディな 4 層メモリ・アーキテクチャを解説。Markdown ファイル、共有状態ログ、セマンティック検索を活用し、長期的なコンテキスト維持とエージェントのドリフト防止を実現します。

TLDR: ほとんどのエージェントはリセットされると忘れてしまいます。ここでは、私が構築した正確なメモリスタックを紹介します。これにより、エージェントは再起動後もコンテキストを共有し、互いに干渉することなく連携し、数ヶ月にわたって決定を保持できます。

誰も解決していない問題

これが典型的な AI エージェントのメモリ設定です。重要なことをシステムプロンプトに詰め込み、コンテキストウィンドウが尽きないことを願い、リセットしてすべてを失います。

私は 6 ヶ月間にわたって、数百のセッションで 2 つの連携エージェント(Ella は OpenClaw 上、Lyra は Hermes 上)を実行してきました。それらを有用にしている最大の要因は、モデルやツールではなく、メモリアーキテクチャです。

Lyra が午前 2 時に修正をリリースすると、Ella は朝にはそれを認識します。1 月にシークレットの保存方法を決定した場合、両方のエージェントは 7 月になってもその決定に従います。セッションがタスクの途中でクラッシュした場合、次のセッションは中断したところから正確に再開します。

これが正確な 4 層システムです。

レイヤー 1: セッション内コンテキスト

すべてのセッションは 2 つのファイルを読み込むことから始まります。アイデンティティファイルは、エージェントの永続的なアイデンティティです。設定に埋め込まれたシステムプロンプトではなく、編集可能な実際の Markdown ファイルです。これには、エージェントがどのように振る舞うべきか、何を優先するか、許可なく決して行わないこと、そして他のエージェントとの関係が保持されています。

メモリインデックスファイルは、セッションをまたいで記憶する価値のあるすべてのもののインデックスです。ベクターデータベースでも埋め込みでもなく、個々のメモリファイルを指すプレーンな目次です。各メモリファイルは、名前、説明、タイプ、および簡潔な本文を持つ短いメモです。インデックスは常に読み込まれます。個々のファイルは、関連する場合にオンデマンドで読み取られます。

なぜ Markdown なのか? 私が読め、編集でき、デバッグできるからです。エージェントが誤った動作を始めたら、インデックスを開いて誤った指示を見つけます。動作を変更したい場合は、ファイルを編集します。API もダッシュボードも再トレーニングも必要ありません。

レイヤー 2: セッション後の保持(Hindsight)

Markdown のみのメモリの問題点:誰かが明示的に書き留めたものしかキャプチャできません。最も価値のあるコンテキストは暗黙的です。実行中に行われた決定、タスクから推測された事実、重要であることが判明した事柄などです。

Hindsight は、localhost 上で動作するローカルファクト保持バックエンドです。意味のあるセッションの終わりごとに、エージェントは保持する厳選された事実のセットを自動的に名前付きバンクにプッシュします。各エージェントは独自のバンクを持っています。

保持されるもの:セッション中に行われた決定、ユーザーやプロジェクトに関する明白でない事実、失敗パターンと採用した修正、ユーザーが確認または修正した設定。

新しいセッションが開始されると、エージェントが応答する前に Hindsight が関連コンテキストを照会します。これはトランスクリプトの全文検索ではありません。エージェントが将来にわたって保持する価値があると学習した、タイプ別にタグ付けされた厳選された事実です。

推奨されるパス:Hindsight ファクト → 人間によるレビュー → メモリインデックスエントリ。人間の承認ゲートを備えた自動保持です。

Matt Gunnin - inline image

レイヤー 3: 共有長期状態(Nexus)

2 番目のエージェントを追加すると、単一エージェントのメモリは機能しなくなります。彼らは乖離し始めます。一方は X が現在のプロジェクトステータスだと考え、もう一方は Y だと考えます。1 週間も経てば、互いに矛盾するようになります。

修正方法は、両方のエージェントが読み書きする、共有可能で検査可能な状態ファイルです。私たちは Nexus と呼ぶ Obsidian ボールトを使用しています。これには、両方のエージェントが意味のあるターンごとに追記するライブコンテキストログ、プロジェクト状態ファイル、決定ログ、および長時間のタスク中に数回のツール呼び出しごとに更新されるエージェントごとの作業コンテキストチェックポイントが保持されます。

ライブコンテキストファイルはリアルタイムのハンドシェイクです。不変条件:すべての応答の前にそれを読みます。意味のあるターンの後は、それに追記します。

Lyra が午前 2 時に PR を完了し、Ella が私の朝の質問に答えているとき、Ella はすでに知っています。彼女はログを読みました。メッセージパッシングも、エージェント間 API も、ポーリングもありません。1 つの共有ファイル、2 つのエージェント、追記専用ログです。

Matt Gunnin - inline image

レイヤー 4: 検索可能な知識(gbrain)

最初の 3 つのレイヤーはエピソード記憶を処理します。何が起こったか、何が決定されたか、何を将来に引き継ぐべきか。gbrain はセマンティックレイヤーです。これは Nexus ボールト上で MCP サーバーとして動作するコンパイル済み Wiki です。書き留められたすべてのものに対する全文検索とセマンティック検索を提供します。

エージェントがリサーチクエリに答えたり、以前の統合を見つけたり、ある種の問題を以前どのように処理したかを調べたりする必要がある場合、すべてのファイルを再読する代わりに gbrain にクエリを実行します。出力は、出典付きの関連ページのランク付けされたリストです。エージェントは関連するものだけを読みます。ボールト全体をコンテキストにダンプすることはありません。

これが記憶と想起の違いです。レイヤー 1 から 3 はエージェントが保持するものを処理します。レイヤー 4 はエージェントが調べることができるものを処理します。

エージェント間同期の不変条件

2 つのエージェント、1 つのライブコンテキストファイル。リスク:互いに上書きしたり、お互いのエントリを見逃したりすることです。私たちが実行する不変条件:各エントリには、エージェント名、チャネル、種類、および 1 行の要約が署名されます。追記専用。他人のエントリを決して編集しない。Lyra が関連する何かをログに記録した場合、Ella は次の応答で明示的にそれを確認します。重要な決定については、両方のエージェントがタイムスタンプと根拠とともに決定ログにも書き込みます。

これは何百ものセッションにわたって実行されてきました。競合は 1 回だけ発生しました。ハンドオフ中に両方のエージェントが同じ 1 分以内に追記したレースコンディションです。解決策:両方のエントリを読み、次のターンで調整します。自動マージは必要ありませんでした。

Matt Gunnin - inline image

これが置き換えるもの

このアーキテクチャの前:5 つの切断されたチャットセッション。それぞれが古くなったコンテキストを持っていました。エージェントはお互いに矛盾していました。なぜなら、どちらも相手が何を知っているかを見ることができなかったからです。3 週間前に私が与えた指示は忘れられていました。ファイルではなく私の頭の中にあった決定。

その後:すべての応答の前に自分自身をブリーフィングする 2 つのエージェント。どちらも否定できない共有状態ログ。数ヶ月のコンテキストリセットを生き残る保持された決定。編集して確認できるファイル内のすべての動作設定。

正直なトレードオフ:このシステムには規律が必要です。物事を書き留めなければなりません。ファイルを維持しなければなりません。永続化される前に、保持されるものをレビューしなければなりません。これは魔法のように常時稼働するシステムではありません。構造化された手動の規律と、継ぎ目での自動化です。

始め方

バージョン 1 を実行するために、2 つのエージェントや完全なボールトは必要ありません。

ステップ 1: アイデンティティファイルとメモリインデックス。それらを作成します。セッション開始時に読み込みます。同じことでエージェントを 2 回目に修正したら、すべての動作設定をインデックスに書き込みます。

ステップ 2: 1 つの共有状態ファイル。複数のエージェントを実行している場合、または複数のウィンドウで Claude を使用している場合は、ライブコンテキストファイルを作成します。各セッションは、終了時にそれに追記し、開始時にそれを読み取ります。

ステップ 3: 保持ルール。セッションが存続すべき決定を生成した場合、手動でインデックスに書き込みます。パターンを信頼するまで、これを手動で行います。その後、フラグ付けを自動化します。

ステップ 4: 1 つの大きなドキュメントではなく、事実ごとにファイル。インデックスは個々のファイルを指します。これにより、他のファイルに影響を与えずに、古いメモリを簡単に削除できます。

完全な 4 層スタックの安定化には約 6 ヶ月かかりました。レイヤー 1 と 3 には 1 週末かかりました。そこから始めてください。

まとめ

ほとんどのエージェントメモリ設定は、余分な手順が加わったコンテキストウィンドウ管理にすぎません。ウィンドウがリセットされるか、2 番目のエージェントを追加するまで機能します。

耐久性のあるエージェントメモリは、プロンプトの問題ではなく、インフラストラクチャの問題です。答えは、異なる時間軸を持つ複数のレイヤーです。セッション内コンテキスト、セッション間の事実、共有状態、検索可能な知識。

私たちのものはすべてプレーンな Markdown です。ベクターデータベースも埋め込みも再トレーニングもありません。私が開いて、編集して、デバッグできるファイルだけです。

真に有用なエージェントとは、最大のコンテキストウィンドウを持つものではありません。重要なことを覚え、重要でないことを忘れるものです。

実際の仕事を任せられるエージェントを構築しているなら、ツールを追加する前にメモリアーキテクチャから始めてください。

参照ツール

Hindsight(ローカルメモリ保持):https://github.com/vectorize-io/hindsight

gbrain(コンパイル済み Wiki / セマンティック検索):https://github.com/garrytan/gbrain

OpenClaw(エージェントランタイム):https://openclaw.ai

Hermes(エージェントランタイム):hermes-agent.nousresearch.com

ワンクリック保存

YouMindでバイラル記事をAI深読み

ソースを保存し、的を絞った質問をし、主張を要約して、バイラル記事を再利用できるノートに変えます。すべてを1つのAIワークスペースで行えます。

YouMindを探索
クリエイターのために

あなたの Markdown をきれいな 𝕏 記事に

自分の長文を投稿するとき、画像・表・コードブロックを 𝕏 向けに整形するのは手間がかかります。YouMind は Markdown 全体を、そのまま投稿できるきれいな 𝕏 記事に変換します。

Markdown → 𝕏 を試す

解読すべきパターンをもっと

最近のバイラル記事

バイラル記事をもっと見る