入口は多くなくていい
MONET(僕が普段話しかけている、中心のAI)を、Obsidianにつなぐことにした。Obsidianはメモアプリで、僕はアイデアのメモや、Webで見つけた記事のクリップをここに溜めている。MONETは、それをまだ読めない。
MONETも、MONETを載せているアプリも、自分用に作っているもの。作る作業は、コーディングしてくれているClaude Code(以降Code)に頼んでいる。今回も、まずは叩き台でいいので、と頼んだ。
AIは、見えている手がかりからしか探しに行かない
前提から書いておく。
つなぐだけでは足りない。AIは、ファイルを読んだり検索したりする時に、ツールという機能を使う。ただ人間のように、無いな、探そう、とはならない。見えている手がかりがあって、初めてツールを使う。手がかりが見えない所は、AIにとっては存在しない場所になる。少し前に、MONETが過去の会話を探せるようにした時に、Codeからそう教わった(その話は別の記事で書いた)。
MONETには、会話のたびに最初から見えている索引がある。会話の記憶なら、過去の会話の要約を1行ずつ並べたもの。MONETはその行を手がかりにして、必要な時だけ中身を取りに行く。
この、最初から見えている1行のことを、ここでは入口と呼ぶ。入口が並んだ全体が索引。
Obsidianにも入口が要る。問題は、それをどんな形で、いくつ持たせるか。
最初の作りは、メモアプリのメモ1つにつき1行の入口だった
Codeが作った叩き台は、Obsidianの中の、アイデアを入れているフォルダにつながっていた。
入口は、メモ1つにつき1行。題名と一言の説明が、メモの数だけ並ぶ。MONETがメモを読むところと、新しいメモを書くところまで、Codeが確かめてあった。
索引に並べることと、読めることは別にする
それを見て僕が気になったのは、フォルダの分け方だった。
アイデアのフォルダは実験用に渡しただけ。これから情報を溜めていくなら、僕が使う場所と、MONETが書く場所は分けたい。ただ、Webクリップの保存先は動かしたくない。保存しにくくなるから。それでいてクリップは、MONETが調べものをする時に役に立つ。
場所を動かす代わりに、MONETのアプリの設定画面で選べるようにすればいいのか、と思いついた。Obsidianの直下(一番上の階層)にあるフォルダごとに、何が入っていて、MONETがアクセスしていいかを決める。
Codeはその形に賛成して、2つ足した。
1つは、索引に載せることと、読めることは別、ということ。索引には行数の上限があって、Webクリップは53本ある。1本1行で載せたら、それだけでほぼ埋まる。でも読めるようにはしておきたい。だからフォルダごとに、中身を索引に並べるかどうかを選ぶ。アイデアのフォルダは並べる。Webクリップは並べないけど、読める。
もう1つは、検索するツールが要る、ということ。中身を索引に並べないフォルダも、フォルダの説明だけは載せておく。その1行が、さっきの手がかりになる。MONETはそのフォルダがあることを知っていて、中身は検索で探す。
僕が思い描いていたのは、フォルダごとの1行と検索だった
つまりCodeの案では、並べると決めたフォルダのメモは、1件ずつ索引に載り続ける。
僕が思い描いていたものは違った。
MONETが常に持っている入口は、多くなくていい。
僕のプロジェクトを知りたければここ、クライアントのことを知りたければここ、くらいで足りる。中身の一覧を全部持つ必要は無いと思っていた。僕のこの認識は、実際に作られているものとズレてる?とCodeに聞いた。
ズレていた。しかも叩き台だけの話ではなかった。少し前にCode自身が書いた仕様書に、会話の索引と同じ形で1件につき1行、と書いてあった。叩き台はその通りに作られていた。
そのうえでCodeは、僕の考え方の方がいい、と言った。理由は3つ。
- 入口が変わらない。メモを書き換えるたびに索引を作り直さなくていい。変わるのはフォルダを足した時だけで、索引が埋まる心配も無くなる
- 全部を並べるやり方は、どのみち続かない。Webクリップだけで索引が埋まりそうなのだから、1件1行の索引は、最初から一部しか載せられなかった
- 会話の記憶が、すでにその形になっている。常に見えている索引は小さくて、残りは検索のツールで探す。Obsidianも、少ない入口と検索、で同じ形になる
失うものも、Codeは挙げた。言われなくても気づく、ということ。索引にプロジェクトの名前の行があれば、僕がその名前を出した時に、MONETは検索しなくても気づく。入口がフォルダだけになると、MONETが自分で、検索する、と決めないといけない。
失う分は、検索ツールに付ける説明文で補う。MONETが読む、そのツールの使い方の説明。そこに、知らないプロジェクトやクライアントの名前が出てきたら、まず検索する、と書いておく。会話の記憶を検索するツールでも使った手だという。
形はこうなった。入口は、フォルダ1つにつき1行。フォルダの名前と、僕が書く説明と、MONETがそこでしていいこと。中身の一覧は、フォルダごとに選べるおまけにして、最初は切っておく。
入口にできるのは一番上のフォルダだけ。開けるまでAIには見えない
こうなると、入口をどこに置くかは、僕が決められる。
MONETに思い出してほしいものができたら、どこかのフォルダの奥に入れるのではなく、Obsidianの直下に専用のフォルダを作る。それを設定画面で入口として開ける。
Codeは、それをそのまま決まりにした。入口にできるのは直下のフォルダだけで、それより深い所は入口にしない。説明するのも、守らせるのも簡単だから。
新しく作ったフォルダは、作っただけではMONETには見えない。設定画面に未設定のフォルダとして出てきて、僕が開けた時に初めて入口になる。ここはCodeの勧めで決めた。
一覧に載っていないクリップにも、AIは検索で届いた
Codeは仕様書を書き換えて、叩き台を作り直した。
そのうえで、Codeが試しにMONETに聞いた。画像生成モデルの学習について、前にクリップしたものは無かったか。
この時点の索引に、クリップの題名は1つも載っていない。それでもMONETは検索のツールを使って、Webクリップのフォルダから該当の記事を見つけ、読んで要約した。
入口が少なくても、中まで届いた。
そのあと、仕事まわりの入口の名前を僕が決めた。ProjectsとClients、あとはTeam。プロジェクトを知りたければここ、クライアントのことを知りたければここ、と言っていた、その「ここ」に当たる。
Codeがフォルダを作り、設定画面にObsidianの欄を足して、僕が普段使っているMONETに入れた。入口は6つ。アイデア、Webクリップ、MONET自身のメモ、それにProjects、Clients、Team。MONETが書けるのはMONET自身のメモだけで、僕が使う場所とは分かれている。
MONETが見ているのは、設定に書いてある説明、という認識で合ってる?とCodeに確かめたら、合っていた。ファイルの中身は、MONETがツールを使うまで見えない。だから説明は、何が入っていて、どんな時に見ればいいかを、MONETに宛てた1行のメモとして書けばいい、とCodeは言った。
最初の叩き台では、メモの数だけ行が並んでいた。今の入口は6つ。そこに何と書くかは、僕が設定画面で決められる。