カテゴリ
エージェント
ステータス
研究中技術スタック
モデル
今のAIエージェントは、会話が終わるとすべてを忘れてしまう。この研究実験では、生物の記憶に着想を得た構成として、エピソード記憶(何が起きたか)、意味記憶(何が正しいか)、手続き記憶(どうやるか)の3種類を実装した。記憶の減衰はエビングハウスの忘却曲線に従い、重要な情報は保ちながら、関係の薄い細部は自然に忘れていく。
3種類の記憶ストアを実装し、30日にわたる100回の模擬対話セッションで保持の様子を検証した。エピソード記憶は、ユーザーの反応から導いた重要度(1〜10)とともに対話のやり取りを保存する。意味記憶は事実とエンティティ間の関係をNeo4jのナレッジグラフへ抽出する。手続き記憶は行動のパターンとユーザーの好みを記録する。記憶の減衰はエビングハウスの忘却曲線R = e^(-t/S)に従い、Sつまり安定度は検索に成功するたびに大きくなる。
pgvectorがエピソード記憶を保持し、埋め込みによる検索を担う。Neo4jが意味記憶のナレッジグラフを、エンティティと関係のトリプルとして保持する。LangGraphが記憶のライフサイクル、すなわち符号化、統合、検索、減衰を管理する。エビングハウスの忘却曲線はPythonで実装し、安定度のパラメータを設定できるようにした。
この実験から得られた、もっとも重要な知見です。
忘却曲線が記憶の膨張を防ぐ
減衰なしでは100セッション後に記憶が12,000件まで膨れ、検索のレイテンシが4倍に悪化した。エビングハウス曲線を入れると、有効な記憶は約800件で安定し、検索は一貫して100ms未満に収まった。
意味記憶が会話を越えた推論を可能にする
エンティティと関係をナレッジグラフへ抽出しておくことで、「このユーザーはPythonのプロジェクトでどのツールを好むか」といった、複数の会話をまたぐ統合が必要な問いにも、好みのノードを辿って答えられた。
手続き記憶で同じ指示が60%減る
ユーザーがJavaScriptよりTypeScript、unittestよりpytestを好むと学習した後、エージェントはこれらについて確認を求めなくなった。会話の摩擦が測れる形で減った。
重要度の判定が最大の難所
どの記憶が重要かを自動で決めるのは本質的に難しい。最も有効だったのは、明示的な信号すなわちユーザーの訂正や繰り返される言及と、暗黙的な信号すなわち会話の長さや追加の質問を組み合わせる方法だった。
各会話は3つの段階を通る。1つ目は検索で、現在のクエリの埋め込みと新しさに基づいて、関連するエピソード記憶、意味記憶、手続き記憶を取得する。2つ目は拡張生成で、取得した記憶を新しさと重要度で重み付けしてシステムプロンプトへ注入する。3つ目は統合で、会話の後に新しいエピソードを作り、事実をナレッジグラフへ抽出し、手続きのパターンを更新する。夜間のバッチが、検索されなかった記憶の安定度を下げていく。
100回の模擬セッションを通じて、記憶ストアは約800件で安定した。減衰がない場合は12,000件まで増える。検索のレイテンシは100ms未満を維持した。ユーザーの好みの推定精度は20セッション目で89%に達した。会話をまたぐ推論は、統合が必要な問いの73%で成功した。記憶を活用した応答は4.2/5、記憶を持たない応答は3.1/5と評価された(評価者15名)。
検証を進めるうえで解決が必要だった技術的な課題です。
記憶の衝突と矛盾
ユーザーの好みが変わると、古い記憶が新しい記憶と矛盾する。新しい記憶が古い記憶を上書きする時間的な重み付けを入れ、矛盾を検知した場合は古い項目へ印を付けて減衰を早めるようにした。
プライバシーと選択的な忘却
ユーザーは特定の記憶を消す手段を必要とする。「住所を忘れて」といった要求である。3つの記憶ストアすべてから該当項目を削除し、ナレッジグラフへも削除を伝播させる、対象を指定できる削除APIを作った。