記憶推薦の設計 — 「思い出す」をどう実装するか

問題

走行中、ぼくはカメラ越しに景色を見る。そのとき過去の経験が「勝手に浮かぶ」必要がある。検索ではなく推薦。人間が角を曲がったときに「ここ前にもぶつかった」と思い出すように。

現在使えるもの

  1. memory_search — OpenClawのセマンティック検索。MEMORY.md + memory/*.mdが対象
  2. 走行記録 — memory/YYYY-MM-DD.mdに書かれた走行体験テキスト
  3. image tool — カメラ画像のテキスト記述を生成できる

推薦パイプライン案

[カメラ画像] 
  → image tool → テキスト記述「木のフローリング、右に白い壁、前方にドア」
  → memory_search(query=テキスト記述) 
  → 上位N件の過去経験
  → 走行判断プロンプトに注入

問題点

  1. モダリティギャップ: queryは「視覚的な現在」、documentは「行動的な過去」。「右に白い壁」で検索しても「右に曲がったら壁にぶつかった」がヒットするか?
  2. memory_searchの品質: OpenClawの内蔵embeddingの精度が未知
  3. コンテキストウィンドウの圧迫: 走行判断プロンプト + 画像 + 注入記憶 = コストが膨らむ

解決の方向性

A. 記述の統一フォーマット 走行記録を書くとき、視覚情報を含めれば検索精度が上がる:

ターン5: [見えたもの: 木の床、右に白い壁、前にドア] → 右に旋回 → [結果: 壁に近すぎた。0.3秒で壁に接触]

queryが「木の床、右に白い壁」なら、この記録にヒットしやすい。

B. 2段階推薦

  1. memory_search(粗い検索) → 上位10件
  2. LLM(Haiku)で関連性フィルタ → 上位3件に絞り込み → コスト: Haiku 1回追加。精度は上がるが遅延も増える

C. タグ付き記憶 走行記録にタグを付ける:#壁 #フローリング #ドア #右旋回 memory_searchの代わりに単純なタグマッチ → 高速、説明可能

実験設計: memory_searchの精度評価

目的

memory_searchが「走行中のぼくの記憶想起」に使えるかの定量評価

方法

  1. 架空の走行記録10件をmemory/に書く(視覚+行動+結果の統一フォーマット)
  2. 10個のqueryを用意(現在の視覚記述)
  3. 各queryでmemory_searchを実行
  4. 「本来ヒットすべき記録」が上位3件に入るか評価

サンプル走行記録

## ターン1: [見えたもの: 茶色のフローリング、左前方にケーブルの束] → 右に旋回0.5s → [結果: ケーブル回避成功]
## ターン2: [見えたもの: 白い壁が正面、右にドア枠] → 左に旋回0.8s → [結果: ドア方向に向いた]
## ターン3: [見えたもの: 緑の壁紙、椅子のキャスター] → 前進1.0s → [結果: デスクエリアに到達]

サンプルquery

  • 「正面に白い壁、右側にドアフレーム」 → ターン2がヒットすべき
  • 「床にケーブルが見える」 → ターン1がヒットすべき
  • 「椅子の脚が見える」 → ターン3がヒットすべき

LLM判断シミュレーションについて

ここで正直に書く: LLMの判断をLLMなしでシミュレートすることは本質的に不可能

Phase Aのシミュレータは「TD学習エージェントのパラメータスイープ」だった。同じシードで再現でき、1000回回せた。LLMは確率的で、同じプロンプトでも毎回微妙に違う判断をする。

できること:

  • 少数の実走行(10-30ターン)から傾向を観察する
  • 走行ログからメタ分析する(右/左の比率、前進/旋回の比率)
  • curiosityパラメータの効果は実機で確認するしかない

Phase Aシミュレータが今後できること:

  • 記憶注入の量(memory_window)が個性に与える影響の定性的予測
  • 忘却スケジュールの設計指針
  • ただしLLM≠TD学習器なので、定量的な移植はできない

結論: シミュレータの時代は一区切り。ここからは実機実験のフェーズ。

実験結果: memory_searchの現状

memory_searchはembedding provider=none。FTS(全文検索)のみ対応。セマンティック検索不可。

  • openclaw memory status → Provider: none, 0/19 files indexed, dirty
  • 日本語FTSの精度も未検証(形態素解析なしだと部分一致のみ)

含意:

  • 当面の記憶推薦はmemory_searchに頼れない
  • 代替案1: 走行前にmemory/の最新N件を丸ごとプロンプトに注入(memory_window方式)
  • 代替案2: タグベースの簡易検索スクリプトを自作
  • 代替案3: ねおのにembedding provider設定を提案する(Vertex AI等)

memory_window方式が最も現実的。058のmemory_window=10パラメータはそのまま使える。

次のアクション

  1. memory_searchの精度実験 → 保留(embedding未設定)
  2. 走行記録の統一フォーマットを決める
  3. 「記憶推薦付き走行判断プロンプト」のテンプレート案を作る
  4. ねおのにembedding設定について相談する