外部脳に、全体を掴む層を足して二層にした話
外部脳の検索を意味検索に変えた話の続きだ。前回は、vaultをキーワードで引くと取りこぼすので、Ollamaのローカル埋め込みで意味検索を足した。「gitleaks入れたときどうやった」みたいな曖昧な引き方でも、その日の日次ログが出るようになった。
これで具体を引くのはうまくなった。でも、使っているうちに別の穴に気づいた。全体を広く掴む入口が無いのだ。
点は引けるのに、面が見えない
意味検索でできるのは、ピンポイントで過去の一点を引き当てることだ。質問があって、それに近いノートを掘る。これは点を引く動きだ。
でも、人間が何かを思い出すときって、いきなり点には行かない。まず「自分は今こういう状況で、こういうものを動かしていて、だいたいこの辺の話だな」と全体を掴んでから、具体を掘る。
Claude Codeの外部脳には、この「広く掴む」側が無かった。起動時に読ませているはずの集約プロファイルを覗いたら、実は中身が空っぽだった。誰で、何を動かしていて、直近どういう流れなのか。それが一枚にまとまっていない。事実は個人情報のノートやmistakes、各プロジェクト、日次ログに散らばってはいるが、起動した瞬間に全体像を渡すものが無い。
だから毎回、セッションの頭で意味検索を何度か叩いて、断片から状況を組み立て直していた。点をいくつも引いて面を推測している。面そのものを最初から渡せばいいのに。
recallには二つの層が要る。広く掴む層と、具体を引く層だ。前者をmacro、後者をmicroと呼ぶことにする。意味検索で作ったのはmicroだけだった。今回はmacroを足す。
二度目の「思想だけ盗む」
前回、エージェントに長期記憶を持たせる TencentDB-Agent-Memory を評価して、結局は意味検索の一点だけ自分で足した、という話を書いた。あのツールには続きがあって、会話を事実・シナリオ・ペルソナへと4層に蒸留していく構造を持っている。一番上の層は「このユーザーはこういう人物だ」という像だ。
俺が欲しいmacroは、まさにこれだった。散らばった事実から要点だけ抜いて、人物像と現在地を一枚に煮詰めたもの。
ただし、丸ごとは持ってこない。前回と同じだ。あのツールは会話から自動で記憶を抽出する。でも俺は一番最初の外部脳の記事で、「何を覚えるかをAI任せにしない」と決めている。自動抽出は、その思想と正面からぶつかる。
なので、思想だけ盗む。「人物像を一枚に蒸留する」という発想はもらう。「それをAIが勝手にやる」という実装は捨てる。やるのは要点抜きだけで、手書きの一次ノートからしか作らない。
persona、手書きから蒸留する一枚
作ったのは persona.md という一枚のノートだ。vaultの直下に置いて、起動時に mistakes やTODOと並んで最初に読ませる。
中身は、誰なのか、作業スタイルと守ってほしい好み、いま動いているもの、直近の流れ、それと過去を掘るときの入口。それぞれ要約に潰しきらず、詳細は個人情報のノートや各プロジェクトのノートへリンクで繋ぐ。macroで掴ませて、必要なら micro へ降りられるようにしておく。
生成は /persona-refresh というコマンドにした。やることは、手書きの一次ノートを読んでまとめるだけ。会話ログからの自動抽出はしない。出典リンクは必須で、憶測で埋めるのは禁止。書いていい事実は、俺がどこかに手で書いたものに限る。AIは蒸留はするが、ネタを発明はしない。
一つ困るのは、こういう手動再生成は「いつ叩けばいいのか分からない」ことだ。叩き忘れると古いまま腐る。なので起動時に日付を見て、persona.md が無いか、最終更新から7日以上経っていたら、読む前に自動で再生成する。手動でいつでも叩けるし、放っておいても一週間で勝手に若返る。手動の制御は手放さないまま、腐敗だけ自動で止める。
MOC、検索が引けない「面」
persona と一緒に、MOC.md も置いた。Map of Content、ノートの地図だ。
これは Obsidian界隈で前からある考え方で、全ノートを束ねるドメイン別の索引を手書きで一枚作っておく。自分・環境とツール・ブログ・プロジェクト・ログ、といった区分けで、それぞれのハブノートへリンクを張る。
なんで検索があるのに索引が要るのか。検索は「点」を引く道具だからだ。クエリを投げて、近いものが返る。でも「このvaultにはそもそもどういう塊があるんだっけ」は、検索では掴めない。問いを立てる前の、地形そのものを見渡したい。それは手書きの地図にしかできない。検索が点を引くのに対して、MOCは面を見渡す。
これで外部脳のrecallが二層になった。起動するとまず persona と MOC で「お前は誰で、何を動かしていて、地図はこうだ」を広く掴む。そのうえで、個別の問いは vault-search の意味検索で点を引く。広く掴んでから、点に降りる。最初に欲しかった動きだ。
ついでに、もう一個評価した
macroを作るのに合わせて、もう一つメモリ系のOSSを見た。graphify という、コードやドキュメントを知識グラフに変えるツールだ。
これも丸ごとは要らない。グラフのデータベースを持つし、HTMLで可視化もする。個人のvaultには過剰だ。でも一個だけ、設計に良い発想があった。抽出した関係に確信度のラベルを付けるところだ。明示的に書いてある事実、推論で繋いだ関係、怪しいので人間が見るべきもの。この三段階を区別して、怪しいやつはレポートに晒して人間に判断させる。
外部脳にも同じ穴があった。今までClaude Codeがvaultに知識を書くとき、検証して書いた事実と、その場の推測が、同じ顔で並んでいた。次のセッションの自分は、両方を等しく事実として信じて動く。推測が事実の顔で居座って、それを土台にまた間違える。記憶が静かに汚染されていく。
なので、書き込みのルールにラベルを足した。同じ三段階だ。検証で裏が取れているものは無印のまま。未検証の推測は「推測」、裏が取れず判断待ちのものは「要確認」と明記する。読むときは、要確認が付いた記憶は鵜呑みにせず裏を取ってから使う。グラフのデータベースは要らないが、この目盛り一つは要る。これも思想だけもらって、実装は捨てた口だ。
振り返り
既製のメモリOSSを二つ評価して、両方から思想だけ抜いて、実装は自作のMarkdownで済ませた。Tencentからは「人物像を一枚に蒸留する」を、graphifyからは「記憶に確信度のラベルを付ける」を。どちらも丸ごと入れれば、専用のデータベースとAIの自動抽出が付いてくる。そこは要らない。
通底しているのは、最初の記事から変わらず「何を覚えるかをAI任せにしない」だ。蒸留はする、ラベルも付ける、でもネタを決めるのも、確信度を判定するのも人間側に残す。便利な自動化ほど、記憶の主導権をそっと奪っていく。そこだけは渡さない。
外部脳は、意味検索で点を引けるようになり(micro)、persona と MOC で面を掴めるようになった(macro)。recallが二層に揃った。あとはこれを使い倒しながら、また足りないところに気づくんだと思う。一度作って終わりじゃなくて、不便に気づくたびに一層ずつ足していく。たぶんずっとその繰り返しなんだろう。