AVM:AIエージェントのメモリを再考する
AIエージェントは全てを忘れる。全てのセッションはゼロから始まる。唯一の継続性は開始時に明示的に渡すものだ——そして単純な解決策はマークダウンファイルの山に全てを詰め込んで全てをロードすることだ。
うまくいく、うまくいかなくなるまでは。
本当の問題はストレージではない
メモリの限界に達したとき、本能的にストレージについて考える:データをどこに置けばいいか?でもそれは間違った質問だ。実際の制約はコンテキストウィンドウだ——エージェントはディスクから読まず、トークンから読む。メモリに入るものは全て有限で高価なバジェットに収まらなければならない。
本当の質問は「メモリをどこに保存するか?」ではなく「今どのメモリをロードする価値があるか?」だ。
この再解釈が全てを変える。より大きなディスクは必要ない。トークンコストを認識する検索システムが必要だ——クエリを見て、バジェットを超えずに最も関連性の高いコンテキストを返せるものが。
なぜファイルシステムか?
AVMはエージェントメモリを仮想ファイルシステムとして整理する。これは奇妙な選択に見えるかもしれない。なぜデータベースではないのか?ベクターストア?グラフ?
なぜなら、ファイルシステムは我々が持つ構造化情報のための最も普遍的なメンタルモデルだからだ。全ての開発者がパス、ディレクトリ、パーミッション、ファイル操作を理解している。さらに重要なのは:エージェントもそれを理解している。エージェントがすでに使っているツール——読む、書く、リストする、検索する——がファイルシステム操作に直接マッピングされる。
深い理由がある。メモリは単一のものではない。エージェントには共有すべきでないプライベートなメモ、エージェント間を流れるべき共有知識、緊急シグナルのためのブロードキャストチャネルがある。ファイルシステムはこれらの区別を可視化してナビゲート可能にする。フラットなデータベースにはそれができない。
/memory/private/{agent}/ ← 自分だけのもの
/memory/shared/market/ ← 全員が読む、専門家が書く
/memory/shared/events/ ← ブロードキャスト、誰でも書ける名前空間がポリシーだ。
メモリは上書きされるべきでない
何かについての意見を更新するとき、以前考えていたことを消去しない。古いものと並べて新しい観察を追加する。歴史は重要だ——思考が進化した証拠だ。
AVMはデフォルトで書き込みを追記操作として扱う。全ての新しい観察が新しいノードを作成する。古いバージョンは残る。何かをリコールするとき、システムは全バージョンから最も関連性の高いノードを浮かび上がらせ、トークンバジェット内でそれらを合成する。
これがメモリの正しいセマンティクスだ。上書きは設定には適切だ;知識には間違っている。2つのエージェントが独立して同じ市場シグナルを観察し、両方が分析を書いた場合、両方の分析が欲しい——最後に書いた方だけではなく。
/procのインサイト
Linuxにはエレガントなトリックがある:/procはファイルシステムのように見えるが、そうではない。cat /proc/cpuinfoを実行すると、ファイルを読んでいるのではなく——ライブシステム状態をテキストとしてフォーマットするカーネル関数を起動している。ファイルシステムインターフェースはただの普遍的なAPIだ。
AVMはメモリメタデータに同じことをする。全てのノードに仮想サブファイルがある:
note.md:meta— ノードの重要度スコア、タイムスタンプ、出所note.md:links— このノードが関連する他のノードnote.md:history— コンテンツがどのように変化したか:search?q=RSI— ディレクトリレベルの検索、ファイル読み取りとしてレンダリング
重要なインサイト:ファイルシステムインターフェースは任意の操作を表現するのに十分完全だ。特別なクライアントライブラリは不要。新しいAPIを学ぶ必要もない。シェルコマンド、スクリプト、エージェント——ファイルを読むものは何でも即座に動作する。
マルチエージェントをファーストクラスの考慮事項として
ほとんどのメモリシステムは単一エージェント向けに設計されている。マルチエージェントサポートは後付けで追加する——通常は誰のデータかを区別するためにプレフィックスを追加することで。
AVMはマルチエージェントをファーストクラスの設計制約として扱う。パーミッションモデルは宣言的だ:各エージェントは特定の名前空間への明示的な読み取り/書き込みアクセスを持つ。エージェントはプライベートコンテキストを別のエージェントに誤ってリークできない。共有知識は明示的に共有名前空間に配置する必要がある。
これはエージェントが間違いを犯すから重要だ。機密性の高い推論を共有名前空間に書き込むエージェントは全員にそれを公開する。別のエージェントのプライベートメモを読んだエージェントは見るべきでないコンテキストによって汚染されるかもしれない。パーミッションシステムは官僚主義ではなく——各エージェントが自分のコンテキストを信頼できるようにするエージェント間の境界だ。
「トークンバジェット」が本当に意味すること
トークン対応の検索は最適化のように聞こえる。実際にはデザイン哲学だ。
目標は古いメモリを削除することではなかった——削除は情報を破壊する。目標は特定のセッションにロードされるものを制御することだった。recall()はファイルを返さない;関連性、新鮮さ、重要性でスコアリングされ、指定されたトークンバジェット内に収まるように切り詰められた合成サマリーを返す。
これはデータベースクエリよりも人間のメモリの働き方に近い。あるトピックについてのメモリ全体を検索しない——コンテキストでフィルタリングされた最も顕著な部分を検索する。システムがそのフィルタリングを行うので、エージェントは行う必要がない。
ファイルシステムのメタファー、追記のみの書き込み、仮想ノード、宣言的パーミッション——これらは実装上の選択ではない。同じ根本的な質問への答えだ:エージェントが記憶するとはどういうことか?
保存することではない。検索することでもない。今すぐに役立つ形で、重要なことを実際に引き継ぐこと。
