エージェントの記憶はどうやって育つのか?HTML、メムリスタ、そして4つの記憶エンジン
一言で答えます:
エージェントの記憶は、積み上がる倉庫ではなく、成長し、忘れ、剪定される網です。
何かを教えるたびに、網に結び目が一つ増えます。二つのことが関連していれば、結び目の間に糸が一本増えます。時間が経つにつれて網は密になり——あなたのことをより理解するようになる一方で、鈍くもなります。
なぜなら、本当に難しいのは「保存する」ことではなく、次の三つだからです:
- 何を覚えるべきか?
- 必要なときにどうやって見つけるか?
- 時代遅れになったらどう忘れるか?
ボルヘスのフネスは何も忘れられなかったが、そのせいで考えることが難しくなった。すべての葉、すべての雲の模様が同じように鮮明だと、細部から法則を抽出するのが難しくなる。エージェントにとっても同じです——忘れない記憶は英知ではなく、むしろハードディスクの故障に近い。
チューリングは1950年の論文『Computing Machinery and Intelligence』で「子供機械」の構想を提案しました。成熟した脳を直接作るのではなく、シンプルな出発点から始めて、教育を通じて成長させるという考え方です。今日私たちがエージェントに記憶システムを作っているのは、ある意味でこの70年前の問いに答えているのです:機械が経験したことを、どうやって次の行動の経験に変えるのか?
この話をするには、まずHTMLから始める必要があります。そして、とても特別な電子部品——メムリスタ——を見ていきます。
これは単なる方式の紹介ではありません。あとで、2ヶ月間にわたる実際の実験を振り返ります。私は実際に動作し、拡散し、減衰し、記憶が一ホップずつ点灯する様子を可視化できる「デジタル海馬」を作りました。そして最後に、対照実験によって、それがメインラインに残す価値がないことを自らの手で証明しました。
システムを作り上げるのは能力です。自分の誇るべき作品を捨てる判断——それがエンジニアリングの判断力です。
I. HTMLからMarkdownへ:知識に手を結ばせる
1991年の夏、ティム・バーナーズ=リーは初期のWebシステムを広く公開しました。HTMLの中で最も魔法のようなものは、見出しでも段落でも表でもなく、リンクでした:
<a href="another-page.html">別のページへ</a>
紙の世界では、ページを書き終えたらそこで終わりです。しかしWebでは、一つの文書が手を伸ばして別の文書につながることができます。
バーナーズ=リーは後に、彼の夢見たWebは共有情報空間だったと回想しています。リンクは何にでも向けられる——個人のものでも公共のものでも、草稿でも完成稿でも。
この変化は一つのタグが増えただけに見えますが、実際には知識に道を敷くようなものでした。かつて文書は孤立した島々でしたが、ハイパーリンクによって初めて島々の間に橋が架かりました。
しかしHTMLはあくまでWebページの構造とブラウザレンダリングのために設計されています。「ユーザーは簡潔な返信を好む」と一言メモしたいだけなのに、こう書かなければなりません:
<html>
<body>
<p>ユーザーは簡潔な返信を好む</p>
</body>
</html>
まるで買い物リストを書くためにアーカイブを建てるようなものです。
2004年、John GruberがMarkdownを発表しました。その核心哲学は「より多くの機能」ではなく「より少ない記号」でした。生のテキストは、レンダリングしなくても自然で、明確で、直接読めるべきだという考え方です。
# タイトル
- ある記録
- 別の記録
[別の文書へのリンク](another.md)
# は見出し、- はリスト、括弧でリンクが書けます。ナレッジベースソフトでよく見かける [[双方向リンク]] は厳密にはMarkdown標準ではなく、Wikiやノートツールが後から追加した拡張ですが、同じ精神を受け継いでいます:知識間のつながりを、人間が気軽に書き、機械も気軽に読めるほど軽くすること。
これこそがMarkdownがエージェントの記憶媒体に適している理由です:透明で、編集可能で、バージョン管理が容易で、人間とモデルが同じ内容を見られます。
しかし、ファイル形式は「どこに保存するか」を解決しただけです。より難しい問題は、記憶ができたあと、どうやってそれを見つけるかです。
II. メムリスタ:電流が流れたことを覚える抵抗
普通の抵抗は、記憶のないドアのようなものです。百回押しても、次も同じ状態です。
メムリスタは違います。その名前は memory resistor——「記憶のある抵抗」——に由来します。流れる電荷が内部状態を変化させ、次に電流が流れるとき、そのコンダクタンスは過去の経験に影響を受けます。
これを土の道に例えてみましょう:
- 誰も歩かないと、草が生えてきて道は見えにくくなります;
- 歩く人が増えるほど、土が踏み固められて道ははっきりします;
- 次に分かれ道に来たとき、自然と古い道を選びやすくなります。
これこそ記憶ではありませんか?繰り返し呼び出されるつながりは強くなり、長く使われないつながりは弱くなっていく。
1971年、Leon Chuaが回路変数間の対称関係から、メムリスタという「欠けた回路素子」を提案しました。2008年、Strukovらが Nature に『The Missing Memristor Found』を発表し、後に広く知られる物理実装モデルを示しました。メムリスタがニューロモルフィックコンピューティングの研究者を惹きつけたのは、そのコンダクタンスが履歴を保持するからです。一つのデバイスが「記憶」を担い、シナプス重みの変化に似た効果を示すことができるのです。
なぜ記憶エンジンに入れたのか
Prismの初期バージョンには、C++17によるベクトルストレージのプロトタイプがありました:
ベクトルストレージ
+ HNSW近傍探索
+ メムリスタ状態
+ カオス進化
当時の発想は魅力的でした:ベクトルライブラリを変化しない引き出しの列にするのではなく、各記憶を電子シナプスのように——コンダクタンス、フラックス、進化する状態を持つものにする。アクセスは単に「見つける」だけでなく、それを変化させる。時間の経過は単なるタイムスタンプではなく、記憶をゆっくりと漂流させる。
言い換えれば、普通のベクトルストアは地図のようなものです。道路が描かれたら、そのままそこにあります。メムリスタモデルは実際の都市に近い:人の流れが小道を大通りに変え、放棄された道は草に飲み込まれます。
このアイデアは後に私が断念しました。クールじゃなかったからでも、動かなかったからでもありません。システムを別の複雑さに押し込んだからです:C++のベクトル層、C API、Goサービス、カオス状態、インデックス構造、上位の記憶グラフがすべて一緒に進化しなければならない。脳のように振る舞おうとして、エンジニアリング自体がメンテナンス困難な脳に成長してしまいました。
しかしメムリスタは最も重要な遺産を残しました:
記憶は単に保存されるべきではない。使われるたびに、次に思い出される確率を変えるべきだ。
後にGoでPrismDを再構築したとき、C++のプロトタイプは捨てましたが、この考えは残しました。ノードのエネルギーは時間とともに減衰し、アクセスすることで強化される。記憶と記憶をつなぐシナプスにも独自の減衰率があります。ハードウェアのメタファーは削除されましたが、本当に有効なダイナミクスは残りました。
これが私が初めて本当に理解したことです:引き算とはすべてを削除することではなく、高価な形式を取り除き、有効な原理を残すことです。
III. 4つの記憶エンジン:本をめくることから網を織ることへ
世の中にはエージェント記憶のソリューションが溢れています:ベクトルストア、RAG、ナレッジグラフ、セマンティックネットワーク、長期記憶、エピソード記憶……用語は煙幕のようです。
ラベルを剥がせば、一般的な実装は大きく4つのアプローチに分類できます。
1. 外部RAG:エージェントに図書館員を付ける
RAGはRetrieval-Augmented Generationの略です。
図書館全体をモデルの頭に詰め込むのではなく、検索器が書棚から最も関連性の高い数ページを見つけ、それらをモデルに渡して回答を生成させます。
ユーザーの質問:「前回のログイン関数の修正、どうやったっけ?」
↓
検索器がドキュメントストアから関連断片を探す
↓
マッチした断片をLLMに渡す
↓
LLMが質問と材料を組み合わせて回答を生成
2020年、LewisらはRAGをパラメトリック記憶と非パラメトリック記憶の組み合わせと説明しました。モデルのパラメータは「暗記した知識」、外部インデックスはいつでも参照できる参考図書館のようなものです。
RAGを「毎回日記を最初から読み直す」と説明するのは正確ではありません。より適切な比喩は:話す前に、図書館員にキーワードやセマンティクス、メタデータに基づいて書庫から数ページを取ってきてもらう。
利点は明らかです:資料はいつでも更新でき、知識ベースは大規模にできます。欠点も同様に明らか:間違った棚を検索すると、その後の回答がどんなに賢くても修正できません。
2. グラフ拡散:一つの街灯から街全体を照らす
2つ目のアプローチは、記憶をグラフとしてモデル化します。各記憶はノードであり、ノード間は関係で結ばれます。
[Transformer]
/ \
/ \
[Attention] —— [GPT]
\ /
\ /
[Scaled Dot-Product]
「Attention」ノードが活性化されると、エネルギーがエッジに沿って拡散し、Transformer、GPT、Scaled Dot-Productなど関連概念を呼び覚まします。これはCollinsとLoftusが1975年に提案した「拡散活性化」意味記憶理論に似ています:概念がトリガーされると、活性化が連想ネットワークに沿って伝播します。
利点は間接的な関係を発見できることです。代償はネットワーク自体の複雑さにあります。
3. プレーンMarkdown:エージェントにインデックスカードの箱を渡す
3つ目は最もシンプルです:記憶はMarkdownファイルであり、必要なときに読み込み、不要なときは読み込まない。
memory/
├── index.md ← 軽量ディレクトリ:リンク+一言要約
├── preferences.md ← ユーザー設定
└── project-rescene.md← プロジェクト知識
RAGが図書館員なら、プレーンMarkdownはインデックスカードの箱です。データベースコンソールは不要で、ブラックボックスの中を推測する必要もありません。ファイルを開けば、エージェントが覚えているすべてがそこにあります。
4. 構造化Markdown:カードに「信頼度」スタンプを押す
構造化MDはMarkdownを捨てるのではなく、各カードにいくつかのフィールドを追加します:ソース、タイプ、信頼度、更新日時、適用範囲。
- 内容:ユーザーは簡潔な返信を好む
信頼度:高
ソース:複数回の会話で確認
更新日時:2026-08-02
これは重要です。なぜなら記憶は単に欠落するだけでなく、嘘をつくこともあるからです。メタデータは記憶の「栄養表示」です。
IV. 4つのアプローチを同じテーブルに並べる
| アプローチ | 最も似ているもの | 利点 | 主なコスト |
|---|---|---|---|
| 外部RAG | オンコールの図書館員 | 大容量、高速更新、外部知識に適する | 検索品質に大きく依存 |
| グラフ拡散 | 道路に沿って灯る都市 | 多段・間接的な関係を発見できる | グラフ構造のメンテナンスが複雑 |
| プレーンMarkdown | 透明なインデックスカードの箱 | シンプル、可読性、編集容易 | 連想能力に限界、大規模で検索困難 |
| 構造化Markdown | ソースと期限付きのアーカイブカード | 信頼度、時間、適用範囲を表現できる | 追加の整理とメンテナンスの仕組みが必要 |
記憶エンジンに唯一の正解はありません。スケール、タスク、メンテナンス能力にマッチした答えがあるだけです。
V. 私の決定的な実験:自らの「デジタル海馬」に死刑判決を下すまで
最終的な解決策だけを見ると、グラフエンジンが難しすぎたからMarkdownを選んだ、あるいはPrismDは動かなかった、と思うかもしれません。
正反対です:PrismDは完全に動作した後に、死刑判決を下されたのです。
1. 私は本当に「デジタル海馬」を作った
PrismDは記憶を重み付き有向グラフとしてモデル化しました:
- Node:テキスト、感情、重要度、エネルギーを持つ記憶
- Synapse:記憶間の関連——連想、時間、意味、エピソードなどのタイプ
- Cluster:論理ゾーン——ユーザープロファイル、コード作業、ツールログ、セッション
- Domain:異なるユーザーやロールのための物理的に分離された空間
その記憶ライフサイクルは単純なCRUDではなく、生体代謝に近いものでした:
ENGRAM 書き込み → DRIFT 減衰 → LOOM 呼び出しと強化
→ COMPILE 圧縮 → CONSOLIDATE マージ/破棄 → PRUNE 能動的忘却
2. 難しいのは「連想」ではなく「相互汚染」
グラフ拡散で印象的なデモを作るのは簡単です。しかし本番環境でより危険な問題は:関連づけるべきでないものも、エッジに沿って這ってくることです。
そこで私は明示的なクラスター間伝播行列を作りました:
ToolLog → UserBase = 0.05
CodeWork → UserBase = 0.8
UserBase → Session = 1.0
この教訓は極めて重要です:記憶システムには再現率だけでなく、汚染防止も必要です。間違って覚えることは、完全に忘れることよりも危険なことがよくあります。
3. 最後に、対照実験で自分自身を覆した
私は同じ実データ、同じ正解セットで3つのアプローチを競わせました:
| 実験 | 方法 |
|---|---|
MD_FULL |
Markdown全量注入、力技ベースライン |
STRUCT_MD |
構造化Markdown + bigramセレクター |
LOOM |
PrismDグラフ拡散検索 |
勝者は最も脳らしい LOOM ではなく、最もシンプルな STRUCT_MD でした。
グラフ拡散は確かに間接的な関連を呼び起こせましたが、そのわずかな検索アドバンテージは、グラフ構造、エッジ重み、クラスター間行列、減衰状態、永続化、LLMによる整理のメンテナンスコストを相殺できませんでした。
最初に複雑な解決策が実際に機能することを証明する。次に、それでも価値がないことを証明する。
多くのプロジェクトは前半だけをやります——デモを動かして勝利を宣言する。本当のエンジニアリング判断は後半にあります。
VI. 私が踏んだ落とし穴
- 「機械が解析しやすい」を「人間がメンテナンスしやすい」と誤解しない
- エージェントに何でも記録させない——自動記憶には閾値が必要
- グラフエンジンに早まって夢中にならない——まずシンプルなもので本当の要件を確認
-
インデックスを過小評価しない——
index.mdは記憶システムの玄関 - 結論だけでなくソースも記録する
- アルゴリズムが正しいからとアーキテクチャが正しいと決めつけない
- サンクコストを技術的信念に偽装しない
VII. 結びに
PrismDが私に残した最終的な答えは、よりシンプルな原則です:複雑さは本当のリターンで身代金を支払わなければならない。
真に成熟した記憶システムは、最も多くを覚えるものでも、最も脳に似たものでもありません。それは加減を知っているものです:
記録すべき時に書き、必要な時にヒットし、手放す時に忘れる。
この記憶哲学が実際のエージェントでどう実装されているか見たい方は、GitHubでソースコードを公開しています:
参考文献
- Alan M. Turing, Computing Machinery and Intelligence, Mind, 1950
- Tim Berners-Lee, The World Wide Web: A very short personal history: W3C
- John Gruber, Markdown: Syntax: Daring Fireball
- Patrick Lewis et al., Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks, NeurIPS 2020
- Allan M. Collins & Elizabeth F. Loftus, A Spreading-Activation Theory of Semantic Processing, Psychological Review, 1975
- Jorge Luis Borges, Funes the Memorious, 1942
- Leon O. Chua, Memristor—The Missing Circuit Element, IEEE Transactions on Circuit Theory, 1971
- Dmitri B. Strukov et al., The Missing Memristor Found, Nature, 2008



