nashsu/llm_wiki
質問のたびに資料を引き直すのをやめ、育っていく1つの wiki に書き溜める
どういうものか
手元の資料を放り込むと、LLM がそれを読んで、相互にリンクされた wiki を組み立てるデスクトップアプリ。Tauri v2(中身は Rust)と React で作られていて、macOS・Windows・Linux 向けの実行ファイルが配られている。PDF、Office 文書、EPUB/MOBI、画像、Web クリップなどを取り込める。Karpathy が公開した「LLM Wiki」という手順の実装として始まり、そこに大きく手を入れたものだ、と作者は明記している。
ふつうの RAG は、質問が来るたびに原文を探し、その場で答えを組み立てる。ここが違っていて、取り込んだときに一度きり知識を「編纂」し、以後はその wiki を更新していく。取り込みは2段階に分かれている。1回目の呼び出しで LLM が原文を読み、出てくる実体・概念・主張と、すでにある wiki との食い違いまで含めた分析を出す。2回目で、その分析をもとに wiki のページを書く。1回で読みながら書かせるより質が上がる、という理由で分けられている。生成された各ページには出典のファイル名が残るので、どの資料から来た記述かを辿れる。ファイルの中身はハッシュで照合されていて、変わっていない資料は取り込み直さない。
もう一つの柱が、ページ同士のつながりをグラフとして持っていること。関連の強さは、4つの手がかりを重みつきで足して決まる——直接リンクされているか、同じ原文から作られたか、共通の隣人がいるか、同じ種類のページか。いちばん重く見られているのは、同じ原文から作られたかどうかだ。そのうえでページのまとまりを自動で見つけ、つながりがほとんど無いページ(リンクが1本以下)、内部のリンクが薄いまとまり、複数のまとまりを繋いでいる要のページを「知識の穴」として並べる。質問に答えるときは、語で検索し、(設定すれば)ベクトル検索を足し、そこを起点にグラフを辿って関連ページを集め、文脈の枠に収まるよう配分してから LLM に渡す。
どんなときに使うか
同じ資料に、何度も違う角度から聞くとき
論文や仕様書のように、1回読んで終わりにならない資料が溜まっている場合に向く。知識を組み直すのは取り込みのときだけなので、同じ資料を毎回読み直させずに済む。
資料どうしの関係のほうを知りたいとき
「何が書いてあるか」ではなく「どれとどれが繋がっているか」を見たいときに、グラフの画面が効く。離れた分野のページが繋がっている箇所や、逆にほとんど繋がりを持たないページが並ぶので、自分が何を調べていないかが目に見える形で出てくる。
注意点
取り込みのたびに LLM を呼ぶ。 1つの資料につき2回の呼び出しが基本になるので、資料が多いほど費用と時間がかかる。接続先は OpenAI・Anthropic・Google・Ollama・独自エンドポイントから選べる、と README にある。外に出したくない資料なら、手元で動かす選択肢があるかどうかを先に確かめておくほうがいい。
ベクトル検索は初期状態では切れている。 設定で有効にすると、別途 embedding の接続先が要る。README は「有効にすると全体の再現率が 58.2% から 71.4% に上がった」と書いているが、どう測ったのかまでは書かれていない。数字は目安として読むところだと思っておくほうがよい。
ライセンスは GPL-3.0。 手元で使うぶんには関係しないが、自分の製品に組み込んで配る形にすると、公開の義務が付いてくる。MIT の道具と同じ感覚では扱えない。
まだ 0.x 台。 リリースはかなりの頻度で出ている。仕様が動く前提で触るものだと思っておくほうがよい。