Skip to content

Latest commit

 

History

History
514 lines (389 loc) · 38.9 KB

File metadata and controls

514 lines (389 loc) · 38.9 KB

LLM Wiki

LLM Wiki Logo

自分で育つパーソナル知識ベース。
LLM があなたの文書を読み、構造化された Wiki を構築し、継続的に最新の状態に保ちます。

これは何ですか?主な機能技術スタックインストールクレジットライセンス

English | 中文 | 日本語 | 한국어


概要

主な機能

  • 2 段階 Chain-of-Thought インジェスト — LLM がまず分析を行い、その後ソース追跡可能な Wiki ページを生成。増分キャッシュ対応
  • マルチモーダル画像インジェスト — PDF 内の埋め込み画像を抽出し、Vision LLM で事実ベースのキャプションを生成。画像対応の検索結果、ライトボックスプレビュー、元資料の該当位置へのジャンプに対応
  • マルチフォーマット文書解析 — PDF、Office 文書、EPUB/MOBI、Org mode、画像、メディア、Web クリップ、URL の一括インポートに対応し、内蔵・クラウド・ローカル MinerU による PDF 処理を選択可能
  • 柔軟なモデル設定 — プロジェクト単位のモデル設定、Chat/Ingest の個別ルーティング、カスタム Provider、リクエストヘッダー、ストリーミング出力に対応
  • 原資料に基づく検索 — 「原資料のみ」モードで、インポートした原資料だけに基づいて回答
  • プロジェクト管理と移行 — 完全なプロジェクトアーカイブを端末間でインポート/エクスポートし、既存 Wiki ページからインデックスを再構築可能
  • 4 シグナル知識グラフ — 直接リンク、ソース重複、Adamic-Adar、タイプ親和性による関連度モデル
  • Louvain コミュニティ検出 — 知識クラスタを自動発見し、凝集度を評価
  • グラフインサイト — 意外な関連や知識の空白を検出し、ワンクリックで Deep Research を起動
  • ベクトル意味検索 — LanceDB ベースの任意 OpenAI 互換エンドポイントによる埋め込み検索(オプション)
  • 永続インジェストキュー — 直列処理、クラッシュ復旧、キャンセル、リトライ、進捗の可視化に対応
  • フォルダインポート — ディレクトリ構造を保持した再帰インポート。フォルダパスを LLM の分類ヒントとして利用
  • ソースフォルダの自動監視raw/sources/ の外部変更を検出し、インジェスト・削除クリーンアップを同期
  • Deep Research — LLM が検索トピックを最適化生成し、Tavily / SerpApi / SearXNG によるマルチクエリ Web 検索結果を自動で Wiki 化
  • Rust バックエンド Chat Agent — Wiki / Source / Graph / Web 検索、workspace ファイル生成、shell 承認、キャンセル、ストリーミング tool event に対応するツール実行型チャット runtime
  • Agent Skills — ローカル SKILL.md フォルダをスキャンして有効化し、チャット内の /skill で選択。Agent が必要に応じて Skill 指示を読み込みます
  • 生成物プレビュー — Agent が作成した Markdown、HTML、画像などの workspace ファイルを生成物として表示し、プレビューとフォルダをすばやく開く操作に対応
  • Mermaid 図表レンダリング — チャットとプレビューで Mermaid コードブロックを直接描画し、構文エラーはコンパクトなエラーカードで表示
  • 非同期レビューシステム — LLM が人間の判断を要する項目を作成し、定義済みアクションと事前生成された検索クエリを付与
  • Chrome Web Clipper — Web ページをワンクリックで取り込み、知識ベースへ自動インジェスト
  • ローカル HTTP API + MCP Server + AI Agent Skill127.0.0.1:19828 の JSON API と同梱 MCP Server でハイブリッド検索、ファイル読み取り、グラフ探索、ソース再スキャンを提供。専用の agent skill はワンコマンドで Claude Code / Codex に追加可能(npx skills add …

これは何ですか?

LLM Wiki は、手元の文書を整理された相互リンク付きの知識ベースへ自動変換するクロスプラットフォームのデスクトップアプリです。従来の RAG のように毎回ゼロから検索して回答するのではなく、LLM が資料から永続的な Wiki を増分的に構築・維持します。知識は一度コンパイルされた後は継続的に更新され、質問のたびに再推論する必要はありません。

このプロジェクトは、LLM を使ってパーソナル知識ベースを構築する方法論である Karpathy の LLM Wiki パターン に基づいています。llm_wiki は nash_su によって作成・メンテナンスされ、コアアイデアを実用的なデスクトップアプリとして実装し、大幅な拡張を加えています。

LLM Wiki アーキテクチャ

クレジット

基礎となる方法論は Andrej Karpathyllm-wiki.md に由来します。これは LLM を使って個人 Wiki を増分的に構築・維持する設計パターンを記述したものです。元の文書は抽象的な設計パターンであり、本プロジェクトはその具体的な実装に大幅な拡張を加えたものです。

元の設計から継承したもの

コアアーキテクチャは Karpathy の方法論を忠実に踏襲しています。

  • 3 層アーキテクチャ: 原資料(不変)→ Wiki(LLM 生成)→ Schema(ルールと設定)
  • 3 つのコア操作: Ingest(インジェスト)、Query(クエリ)、Lint(チェック)
  • index.md をコンテンツ目録および LLM のナビゲーション入口として利用
  • log.md をパース可能な時系列操作記録として利用
  • [[wikilink]] 構文による相互参照
  • すべての Wiki ページに YAML frontmatter を付与
  • Obsidian 互換 — Wiki ディレクトリをそのまま Obsidian の vault として利用可能
  • 人間がキュレーションし、LLM が維持する という基本的な役割分担

Obsidian 互換

変更点と追加機能

1. CLI からデスクトップアプリへ

元の設計は、LLM エージェントにコピーして使う想定の抽象的なパターン文書でした。本プロジェクトでは、それを完全なクロスプラットフォームのデスクトップアプリとして実装しています。

  • 3 カラムレイアウト: 知識ツリー / ファイルツリー(左)+ チャット(中央)+ プレビュー(右)
  • アイコンサイドバー — Wiki、ソース、検索、グラフ、Lint、レビュー、Deep Research、設定をワンクリックで切り替え
  • 可変サイズのカスタムパネル — 左右パネルをドラッグでリサイズ可能。最小/最大サイズ制約付き
  • アクティビティパネル — ファイル単位のインジェスト進捗をリアルタイム表示
  • 全状態の永続化 — 会話、設定、レビュー項目、プロジェクト構成が再起動後も保持される
  • シナリオテンプレート — リサーチ、読書、自己成長、ビジネス、汎用の 5 種類。各テンプレートが purpose.md と schema.md を事前構成

2. Purpose.md —— Wiki の存在意義

元の設計には Schema(Wiki の動作ルール)はありますが、その Wiki がなぜ存在するのかを正式に定義する場所はありませんでした。本プロジェクトでは purpose.md を追加しています。

  • 目標、主要な問い、調査範囲、変化しつづける仮説を定義
  • LLM が毎回のインジェストとクエリでコンテキストとして読み込む
  • 利用パターンに基づいて LLM が更新を提案
  • schema とは別物。schema は構造ルール、purpose は方向性と意図

3. 2 段階 Chain-of-Thought インジェスト

元の設計では、LLM が読み取りと書き込みを同時に行う 1 段階のインジェストが想定されていました。本プロジェクトでは品質を大きく高めるため、これを2 回の連続した LLM 呼び出しに分割しています。

ステップ 1(分析): LLM が資料を読む → 構造化された分析を出力
  - 主要なエンティティ、概念、論点
  - 既存 Wiki コンテンツとの関連
  - 既存知識との矛盾や緊張関係
  - Wiki 構造に対する推奨事項

ステップ 2(生成): LLM が分析結果を受け取る → Wiki ファイルを生成
  - frontmatter 付きの資料サマリー(type, title, sources[])
  - 相互参照を持つエンティティページ/概念ページ
  - index.md、log.md、overview.md の更新
  - 人間の判断が必要なレビュー項目
  - Deep Research 用の検索クエリ

元の設計を超えるインジェストの強化点:

  • SHA256 増分キャッシュ — インジェスト前にソースファイルの内容ハッシュを確認。未変更ファイルは自動でスキップし、LLM トークンと時間を節約
  • 永続インジェストキュー — 並行 LLM 呼び出しを防ぐ直列処理。キューはディスクに保存され、アプリ再起動後に自動復元。失敗タスクは最大 3 回まで自動リトライ
  • フォルダインポート — ディレクトリ構造を保持した再帰インポート。フォルダパスを分類のコンテキストとして LLM に渡す(例: 「papers > energy」で分類を補助)
  • ソースフォルダの自動監視raw/sources/ 配下でアプリ外から追加・変更・削除されたファイルを自動検出し、アプリ内操作と同じインジェスト/削除ライフサイクルで処理
  • キューの可視化 — アクティビティパネルにプログレスバー、待機中/処理中/失敗タスク、キャンセル・リトライボタンを表示
  • 自動 embedding — ベクトル検索を有効にしている場合、新規ページのインジェスト後に自動で embedding を生成
  • ソース追跡可能性 — 生成されたすべての Wiki ページの YAML frontmatter に sources: [] フィールドが付与され、貢献元の原資料ファイルにリンク
  • overview.md の自動更新 — Wiki の最新状態を反映するグローバルサマリーページを、インジェストのたびに再生成
  • 資料サマリー生成の保証 — LLM が漏らした場合でも資料サマリーページが必ず作成されるフォールバック
  • 言語対応生成 — LLM はユーザーが設定した言語(英語または中国語)で応答
  • ソースの段階的レンダリング — 大規模なソースフォルダでもスクロールに合わせて段階的に描画し、ソース画面の応答性を維持

4. 関連度モデルを備えた知識グラフ

知識グラフ

元の設計では相互参照のための [[wikilinks]] には触れているものの、グラフ分析はありません。本プロジェクトでは完全な知識グラフ可視化と関連度エンジンを構築しました。

4 シグナル関連度モデル:

シグナル 重み 説明
直接リンク ×3.0 [[wikilinks]] で結ばれたページ
ソース重複 ×4.0 同一の原資料を共有するページ(frontmatter の sources[] 経由)
Adamic-Adar ×1.5 共通の隣接ノードを持つページ(隣接ノードの次数で重み付け)
タイプ親和性 ×1.0 同一ページタイプ間のボーナス(entity↔entity、concept↔concept)

グラフ可視化(sigma.js + graphology + ForceAtlas2):

  • ページタイプまたはコミュニティでノードを色分け。リンク数に応じてノードサイズを変更(√ スケーリング)
  • 関連度の重みに応じてエッジの太さと色を変化(緑=強い、グレー=弱い)
  • ホバー操作: 隣接ノードは表示を維持、非隣接ノードを淡くし、エッジは関連度スコアラベル付きでハイライト
  • ズーム操作(拡大、縮小、画面にフィット)
  • 位置キャッシュにより、データ更新時のレイアウトの揺れを防止
  • 色分けモードに応じて、凡例がタイプ集計とコミュニティ情報を切り替え

5. Louvain コミュニティ検出

元の設計にはありません。Louvain アルゴリズム(graphology-communities-louvain)により知識クラスタを自動発見します。

  • 自動クラスタリング — 事前定義のページタイプとは独立に、リンクのトポロジーから自然にまとまるページ群を発見
  • タイプ/コミュニティの切り替え — ノードの色分けをページタイプ(エンティティ、概念、ソース…)か、発見された知識クラスタかでワンクリック切り替え
  • 凝集度スコア — コミュニティごとに内部エッジ密度(実エッジ数/可能エッジ数)を算出。低凝集(< 0.15)のクラスタには警告を表示
  • 12 色のカラーパレット — クラスタ間の視認性を確保
  • コミュニティ凡例 — 代表ノードのラベル、メンバー数、凝集度を表示

Louvain コミュニティ検出

6. グラフインサイト —— 意外な関連と知識の空白

元の設計にはありません。システムがグラフ構造を自動分析し、行動につながるインサイトを提示します。

意外な関連:

  • コミュニティをまたぐエッジ、タイプをまたぐリンク、周縁ノード↔ハブの結合といった想定外の関係を検出
  • 複合的なサプライズスコアで、注目すべき関連をランキング
  • 確認済みとしてマークすると一覧から除外可能

知識の空白:

  • 孤立ページ(次数 ≤ 1)— Wiki の他の部分とほとんど繋がっていないページ
  • 疎なコミュニティ(凝集度 < 0.15、3 ページ以上)— 内部の相互参照が弱い知識領域
  • ブリッジノード(3 つ以上のクラスタを接続)— 複数の知識領域をつなぐ重要な結節点ページ

インタラクション:

  • インサイトカードをクリックすると、対応するノードとエッジをグラフ上でハイライト。再クリックで解除
  • 知識の空白とブリッジノードには Deep Research ボタンを付属。overview.md + purpose.md を読み込んだドメイン認識型のトピックでリサーチを起動
  • 開始前に編集可能な確認ダイアログにリサーチトピックと検索クエリを表示。ユーザーが調整してから実行可能

グラフインサイト

7. 最適化されたクエリ検索パイプライン

元の設計では、LLM が関連ページを読み取る単純なクエリが説明されています。本プロジェクトでは、オプションのベクトル検索と予算制御を備えた多段階の検索パイプラインを構築しました。

フェーズ 1: トークン化検索
  - 英語: 単語分割 + ストップワード除去
  - 中国語: CJK バイグラム分割(每个 → [每个, 个…])
  - タイトル一致ボーナス(+10 点)
  - wiki/ と raw/sources/ の両方を検索

フェーズ 1.5: ベクトル意味検索(オプション)
  - 任意の OpenAI 互換 /v1/embeddings エンドポイントで埋め込みを生成
  - LanceDB(Rust バックエンド)に保存し、高速な ANN 検索を実行
  - コサイン類似度により、キーワードが一致しなくても意味的に関連するページを発見
  - 結果をマージ: 既存ヒットをブースト + 新規発見を追加

フェーズ 2: グラフ拡張
  - 上位の検索結果をシードノードとして利用
  - 4 シグナル関連度モデルで関連ページを発見
  - 2 ホップ走査(減衰付き)で深層の関連も拾う

フェーズ 3: 予算制御
  - 設定可能なコンテキストウィンドウ: 4K → 1M トークン
  - 比例配分: Wiki ページ 60%、チャット履歴 20%、index 5%、システムプロンプト 15%
  - 検索 + グラフ関連度の総合スコアでページを優先順位付け

フェーズ 4: コンテキスト組み立て
  - 番号付きページと本文(サマリーだけではない)を投入
  - システムプロンプトに purpose.md、言語ルール、引用形式、index.md を含める
  - LLM に番号形式での引用を指示: [1]、[2] など

ベクトル検索は完全にオプションです。デフォルトでは無効で、設定画面からエンドポイント、API キー、モデルを個別に指定して有効化できます。無効時はトークン化検索 + グラフ拡張にフォールバックします。ベンチマークでは、ベクトル検索を有効にすると全体の再現率が 58.2% から 71.4% に向上しました。

8. 永続化対応のマルチ会話チャット

元の設計には単一のクエリインターフェースしかありません。本プロジェクトでは本格的なマルチ会話サポートを構築しました。

  • 独立したチャットセッション — 会話の作成、リネーム、削除
  • 会話サイドバー — トピック間をすばやく切り替え
  • 会話単位の永続化 — 各会話を .llm-wiki/chats/{id}.json に保存
  • 設定可能な履歴の深さ — コンテキストとして送信するメッセージ数を制限(デフォルト: 10)
  • 引用パネル — 回答ごとに折りたたみ可能なセクションを表示し、参照した Wiki ページをタイプとアイコンでグループ化
  • 引用情報の永続化 — 参照ページはメッセージデータに直接保存され、再起動後も安定
  • 再生成 — 最後の回答をワンクリックで再生成(直近の assistant + user メッセージ対を削除して再送信)
  • Wiki に保存 — 価値のある回答を wiki/queries/ に保管し、自動インジェストでエンティティ/概念を知識ネットワークに抽出

9. Rust バックエンド Chat Agent と Skills

元の設計にはありません。チャットはブラウザ内だけの TypeScript ループではなく、Rust バックエンドの Agent runtime で実行されます。

  • ツール実行型 Agent — Wiki 検索、Source 検索、Graph 検索、Web 検索、AnyTXT、workspace ファイルツール、承認済み shell コマンド、Skill ファイル読み取りを選択可能
  • Skill 管理 — プロジェクト単位・ユーザー単位の Skill フォルダをスキャンし、有効/無効を切り替え、会話ごとに /skill 補完で Skill を選択
  • 生成 workspace 出力 — Agent ツールが作成したファイルは agent-workspace/ 配下に保存され、生成物として表示・プレビュー・フォルダオープンできます
  • ユーザー入力フォーム — Skill は単一選択、複数選択、自由入力などの構造化入力を要求でき、Skill ごとの専用 UI をハードコードする必要はありません
  • より安全な実行モデル — プロジェクト workspace 内のコマンドはスムーズに継続し、外部 shell コマンドは引き続き明示的な承認を要求します

10. 思考過程(Thinking / Reasoning)の表示

元の設計にはありません。<think> ブロックを出力する LLM(DeepSeek、QwQ など)向けです。

  • ストリーミング表示 — 生成中は 5 行のローリング表示と不透明度のフェードで表示
  • デフォルトで折りたたみ — 完了後は思考ブロックを隠し、クリックで展開
  • 視覚的な分離 — 思考内容はメインの回答とは別のスタイルで表示

11. Markdown レンダリング: KaTeX 数式と Mermaid 図表

元の設計にはありません。チャットとプレビューでよりリッチな Markdown 表示をサポートします。

  • KaTeX レンダリング — インライン $...$ とブロック $$...$$ の数式を remark-math + rehype-katex で描画
  • Milkdown 数式プラグイン — プレビューエディタが @milkdown/plugin-math でネイティブに数式を描画
  • 自動検出 — むき出しの \begin{aligned} などの LaTeX 環境を自動的に $$ で囲む
  • Unicode フォールバック — 数式ブロック外のシンプルなインライン表記用に 100 以上の記号マッピング(α, ∑, →, ≤ など)
  • Mermaid コードブロック — fenced mermaid ブロックをフローチャート、シーケンス図など Mermaid 対応の図表として直接描画
  • コンパクトな Mermaid エラー — 構文エラーは小さなエラーカード内に収め、チャット画面に生の parser 出力を広げません

12. レビューシステム(非同期 Human-in-the-Loop)

元の設計ではインジェスト中に人間が関与することが推奨されています。本プロジェクトでは非同期レビューキューを追加しました。

  • インジェスト中に LLM が人間の判断を要する項目をフラグ付け
  • 定義済みアクションタイプ: ページ作成、Deep Research、スキップ。任意のアクションを LLM が捏造(ハルシネーション)しないよう制約
  • インジェスト時に検索クエリを生成 — LLM がレビュー項目ごとに最適化された Web 検索クエリを事前生成
  • ユーザーは好きなタイミングでレビュー可能。インジェスト処理を妨げない

13. Deep Research

Deep Research

元の設計にはありません。LLM が知識の空白を特定したときに利用します。

  • Web 検索 — Tavily、SerpApi、SearXNG 経由で関連資料を取得。本文全文の抽出に対応(要約による切り詰めなし)
  • プロバイダー個別設定 — Tavily と SerpApi はそれぞれ独立した API キー。SerpApi は検索エンジンを選択可能、SearXNG はインスタンス URL と検索カテゴリを設定
  • トピックごとに複数の検索クエリ — インジェスト時に LLM が検索エンジン向けに最適化して生成
  • LLM によるリサーチトピックの最適化 — グラフインサイトから起動した場合、LLM が overview.md + purpose.md を読み込み、汎用的なキーワードではなくドメイン固有のトピックとクエリを生成
  • ユーザー確認ダイアログ — リサーチ開始前に、編集可能なトピックと検索クエリを表示
  • LLM による統合 — 検索結果を既存 Wiki への相互参照付きのリサーチページに統合
  • 思考過程の表示 — 統合中の <think> ブロックを折りたたみセクションとして表示し、最新内容に自動スクロール
  • 自動インジェスト — リサーチ結果を自動的に処理し、エンティティ/概念を Wiki に抽出
  • タスクキュー — 最大 3 件の同時実行
  • リサーチパネル — 高さが動的に変わる専用サイドバー。ストリーミング進捗をリアルタイム表示

14. ブラウザ拡張(Web Clipper)

Chrome 拡張 Web Clipper

元の設計では Obsidian Web Clipper が言及されています。本プロジェクトでは専用の Chrome 拡張(Manifest V3)を構築しました。

  • Mozilla Readability.js による正確な記事抽出(広告、ナビゲーション、サイドバーを除去)
  • Turndown.js による HTML → Markdown 変換。テーブルにも対応
  • プロジェクトセレクター — クリップ先の Wiki を選択(複数プロジェクト対応)
  • ローカル HTTP API(ポート 19827、tiny_http)— 拡張 ↔ アプリ間の通信
  • 自動インジェスト — クリップした内容が 2 段階インジェストパイプラインを自動的に起動
  • クリップ監視 — 3 秒ごとに新しいクリップをポーリングして自動処理
  • オフラインプレビュー — アプリが起動していなくても抽出済みコンテンツを表示

15. 複数フォーマットのドキュメントサポート

元の設計はテキスト/Markdown が中心です。本プロジェクトではドキュメントの意味構造を保持した構造化抽出に対応しています。

フォーマット 抽出方法
PDF 内蔵 pdf-extract(Rust)+ ファイルキャッシュ。複雑なレイアウト向けに MinerU Cloud、Local API、Pipeline を任意で利用可能
DOCX docx-rs — 見出し、太字/斜体、リスト、テーブルを構造化 Markdown へ
PPTX ZIP + XML — スライド単位で抽出し、見出し/リスト構造を保持
XLSX/XLS/ODS calamine — 正しいセル型、複数シート対応、Markdown テーブルに変換
EPUB/MOBI 電子書籍のメタデータ、章、本文を抽出し、インジェスト可能なコンテンツへ変換
画像 ネイティブプレビュー(png, jpg, gif, webp, svg など)
動画/音声 内蔵プレイヤー
Web クリップ Readability.js + Turndown.js → クリーンな Markdown

MinerU は任意機能です。複雑な PDF には MinerU Cloud、公式 Local API、またはローカル Pipeline モードを利用できます。ローカルモードではファイルを外部へ送信せず、抽出画像はプロジェクト管理下の wiki/media に保存されます。失敗時は内蔵解析へフォールバックします。

16. ファイル削除のカスケードクリーンアップ

元の設計には削除機構がありません。本プロジェクトではインテリジェントなカスケード削除を追加しました。

  • 資料ファイルを削除すると、対応する Wiki サマリーページも自動削除
  • 3 種類のマッチングで関連 Wiki ページを特定: frontmatter の sources[] フィールド、資料サマリーページ名、frontmatter のセクション参照
  • 共有エンティティの保護 — 複数の資料にリンクされたエンティティ/概念ページは、ページ自体を削除せず、削除された資料だけを sources[] から取り除く
  • index のクリーンアップ — 削除されたページを index.md から除去
  • wikilink のクリーンアップ — 削除済みページを指す失効した [[wikilinks]] を、残りの Wiki ページから除去

17. 設定可能なコンテキストウィンドウ

元の設計にはありません。LLM に渡すコンテキスト量をユーザーが設定できます。

  • 4K から 1M トークンまでのスライダー — LLM ごとの能力に合わせて調整可能
  • 比例配分された予算 — ウィンドウが大きいほど Wiki コンテンツの取り分も増える
  • 60/20/5/15 の配分 — Wiki ページ/チャット履歴/index/システムプロンプト

18. クロスプラットフォーム互換

元の設計はプラットフォーム非依存の抽象パターンです。本プロジェクトでは実際のクロスプラットフォーム問題に対処しています。

  • パス正規化 — 22 以上のファイルで統一の normalizePath() を利用し、バックスラッシュ → スラッシュに変換
  • Unicode セーフな文字列処理 — バイトベースではなく文字ベースでスライス(CJK ファイル名でのクラッシュを防止)
  • macOS のクローズ=隠す — 閉じるボタンでウィンドウを隠す(アプリはバックグラウンドで継続)。Dock アイコンクリックで復元、Cmd+Q で終了
  • Windows / Linux の終了確認 — 終了時に確認ダイアログを表示し、誤操作によるデータ消失を防止
  • Tauri v2 — macOS、Windows、Linux のネイティブデスクトップ
  • GitHub Actions による CI/CD — macOS(ARM + Intel)、Windows(.msi)、Linux(.deb / .AppImage)の自動ビルド

19. その他の追加機能

  • 多言語対応 — 英語と中国語の UI(react-i18next)
  • 設定の永続化 — LLM プロバイダー、API キー、モデル、コンテキストサイズ、言語を Tauri Store で保存
  • Obsidian 設定 — 推奨設定入りの .obsidian/ ディレクトリを自動生成
  • Markdown レンダリング — 枠線付きの GFM テーブル、整形されたコードブロック、チャットとプレビュー内での wikilink 処理
  • マルチプロバイダー LLM 対応 — OpenAI、Anthropic、Google、Ollama、カスタム。プロバイダーごとにストリーミングとヘッダーを調整
  • 設定可能な LLM タイムアウト — 遅いローカルモデルや長時間処理に合わせてリクエスト時間を調整
  • 設定可能な Firecrawl — API キーとカスタム Base URL により、ホスト型・セルフホスト型の両方に対応
  • 折りたたみ可能なファイルサイドバー — Knowledge/Files ナビゲーションを折りたたみ、状態を保持
  • プロジェクト保守 — ZIP による移行用インポート/エクスポートと wiki/index.md の再構築
  • dataVersion シグナル — Wiki コンテンツの変更に合わせてグラフと UI を自動リフレッシュ

技術スタック

レイヤー 技術
デスクトップ Tauri v2(Rust バックエンド)
フロントエンド React 19 + TypeScript + Vite
UI shadcn/ui + Tailwind CSS v4
エディタ Milkdown(ProseMirror ベースの WYSIWYG)
グラフ sigma.js + graphology + ForceAtlas2
検索 トークン化検索 + グラフ関連度 + 任意のベクトル検索(LanceDB)
ベクトル DB LanceDB(Rust、組み込み、オプション)
文書解析 pdf-extract + MinerU Cloud/Local + docx-rs + calamine + EPUB/MOBI 抽出
多言語対応 react-i18next
状態管理 Zustand
LLM ストリーミング fetch(OpenAI、Anthropic、Google、Ollama、カスタム)
Web 検索 Tavily、SerpApi、SearXNG JSON API

インストール

ビルド済みバイナリ

Releases からダウンロードできます。

  • macOS: .dmg(Apple Silicon + Intel)
  • Windows: .msi
  • Linux: .deb / .AppImage

ソースからビルド

# 前提条件: Node.js 20+, Rust 1.91+, protoc
#   macOS:   brew install protobuf
#   Linux:   sudo apt install protobuf-compiler
#   Windows: choco install protoc
git clone https://github.com/nashsu/llm_wiki.git
cd llm_wiki
npm install
npm --prefix mcp-server ci && npm run mcp:build   # mcp-server/dist は Tauri リソースとして同梱されます
npm run tauri dev      # 開発モード
npm run tauri build    # 本番ビルド

Chrome 拡張

  1. chrome://extensions を開く
  2. 「デベロッパーモード」を有効にする
  3. 「パッケージ化されていない拡張機能を読み込む」をクリック
  4. extension/ ディレクトリを選択
  5. Alt+Shift+L(macOS は Command+Shift+L)で現在のページを直接クリップ。chrome://extensions/shortcuts で変更できます

クイックスタート

  1. アプリを起動し、新規プロジェクトを作成(テンプレートを選択)
  2. 設定 で LLM プロバイダー(API キー + モデル)を構成
  3. 必要に応じて 設定 から Web 検索プロバイダーとソースフォルダの自動監視を構成
  4. ソース からドキュメント(PDF、DOCX、MD など)をインポート
  5. アクティビティパネル で LLM が Wiki ページを自動生成する様子を確認
  6. チャット で知識ベースに質問
  7. 知識グラフ で関連を探索
  8. レビュー で対応が必要な項目を確認
  9. Lint を定期的に実行し、Wiki の健全性を維持

ローカル HTTP API + MCP Server + AI Agent Skill

LLM Wiki は組み込みのローカル HTTP API(http://127.0.0.1:19828 でリッスン、Token 認証、ローカルホストのみ)を提供します。Claude CodeCodex などの AI エージェント、または HTTP リクエストを発行できる任意のスクリプトから、直接知識ベースを問い合わせることができます。

  • GET /api/v1/health — サーバー状態(認証不要)
  • GET /api/v1/projects — プロジェクト一覧
  • GET /api/v1/projects/{id}/files / files/content — ファイルツリーと本文の取得
  • POST /api/v1/projects/{id}/searchハイブリッド検索(キーワード + ベクトル)。modetokenHitsvectorHits を返し、各結果に vectorScore を付与
  • POST /api/v1/projects/{id}/chat — 非ストリーミングの Rust バックエンド Agent chat エンドポイント。assistant message、references、usage、tool events を返し、Wiki / Source / Web / AnyTXT 検索に対応します。mode: "deep" では証拠収集範囲を広げます
  • GET /api/v1/projects/{id}/graph — wikilinks の知識グラフ
  • POST /api/v1/projects/{id}/sources/rescan — バックエンドの再スキャンをトリガー
  • POST /api/v1/projects/{id}/pages/embed — 外部で作成・更新された単一の wiki/*.md ページを、ベクトル DB 全体を再構築せずにインデックス化

設定 → API + MCP から API を有効化し、Token を発行できます。必要に応じて、ローカルからの認証なしアクセスも切り替えられます。

MCP 互換クライアント向けに、LLM Wiki には mcp-server/ も同梱されています。npm run mcp:build でビルドしたあと、設定 → API + MCP に現在のマシンに合ったパス入りの MCP クライアント設定が表示され、そのままコピーできます。MCP ツールは同じ API を利用するため、エージェントはプロジェクト一覧、ファイル読み取り、ハイブリッド検索、グラフ参照、ソース再スキャン、同じ Rust バックエンド Agent chat エンドポイントの呼び出しをカスタム HTTP 実装なしで実行できます。

ワンコマンドで AI エージェントを接続

LLM Wiki 用の agent skill は別リポジトリで管理されています。Claude Code / Codex / skills 互換のランタイムにインストールできます。

npx skills add https://github.com/nashsu/llm_wiki_skill.git --skill llm-wiki

インストール後、エージェントは「自分の LLM Wiki に X について何が書かれている?」「自分の知識ベースで Y を検索して」「自分の Wiki グラフで Z の近傍を表示して」「ソースを再スキャンして」といった依頼に対し、ローカルで動いているアプリと直接通信して応答します。デフォルトは読み取り専用で、アプリ内で確認できるよう Wiki ページのパスを引用します。

  • Skill リポジトリ: https://github.com/nashsu/llm_wiki_skill
  • トリガー制約: 「ノートを検索して」「Obsidian / Notion / Logseq を見て」のような汎用的な依頼には意図的に反応しません。LLM Wiki / my wiki / 知識庫 / 知識ベース を明示した場合のみ起動します。

プロジェクト構成

my-wiki/
├── purpose.md              # 目標、主要な問い、調査範囲
├── schema.md               # Wiki 構造ルール、ページタイプ
├── raw/
│   ├── sources/            # アップロードされた文書(不変)
│   └── assets/             # ローカル画像
├── wiki/
│   ├── index.md            # コンテンツ目録
│   ├── log.md              # 操作履歴
│   ├── overview.md         # 全体概要(自動更新)
│   ├── entities/           # 人物、組織、製品
│   ├── concepts/           # 理論、手法、技術
│   ├── sources/            # 資料サマリー
│   ├── queries/            # 保存されたチャット回答 + リサーチ
│   ├── synthesis/          # 資料横断の分析
│   └── comparisons/        # 比較ページ
├── .obsidian/              # Obsidian vault 設定(自動生成)
└── .llm-wiki/              # アプリ設定、チャット履歴、レビュー項目

Star History

Star History Chart

ライセンス

このプロジェクトは GNU General Public License v3.0 でライセンスされています。詳細は LICENSE を参照してください。