Gemma 4 E4B LLM Wiki

集めたノートを、生きた Karpathy LLM ウィキに。
vault と対話し、考えをつなぎ、抜けを見つけ、クイズとフラッシュカードを作る —
Gemma 4 E4B は Obsidian の中でローカルに動きます。API キーも Ollama もサーバーも不要。

English · 日本語

Built with Gemma 4 E4B GPL-3.0 licensed No server

Obsidian 1.11.4+ Runtime: LiteRT-LM GPU: WebGPU No API key Tests Downloads

⬇ コミュニティストアから入れる
▶ 動くところを見る — 全機能を 23 シーンで。インストール不要。

> ☔️ 保存したもの、そのあとどうしていますか? > 切り抜いた記事。保存した投稿。講座のノート。読むつもりだった論文。整っては見えるのに、ほとんど読み返されていない vault — 多すぎるからではありません。一つずつ開いてみるまで、そこに何があるのか分からないからです。 **Gemma 4 E4B が、すでにあるノートから [Andrej Karpathy の LLM ウィキ](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) を組み上げます。** - 🧠 **1 つのノートにも、vault 全体にも問いかけられます** — 答えはあなたが実際に書いたものに基づき、出典はモデルが生成するのではなくプラグインが列挙します。 - 📇 **ノート 1 枚につき要約カード 1 枚、そしてその全体を見渡す索引** — 何があるのかを、一つずつ開かずに把握できます。 - 🔗 **関連が判明したノート同士のリンク** — そしてタグは、ノートごとに勝手に増えた語ではなく 1 つの共通語彙から引かれます。それがあって初めて、ノートは互いを見つけられます。 - 📚 **まとまりが見えてきたところに立つ概念ページ** — ノートの上に書かれ、それぞれへリンクを張り下ろします。 - 🔍 **抜けと矛盾を可視化** — 2 つのノートの主張が両立しない、という指摘も含みます。 - 🎓 **どのノートからでもクイズとフラッシュカードを** — 貯めただけで終わらせず、読み返すものにするために。 - 💬 **モードを選ばずに、ただ聞く** — Vault モードは、どの質問もまず生のノート全体を検索します。ノートに書いてあることは出典付きで、そのあとに Gemma 4 E4B 自身の答えが、自身のものだと分かる形で続きます。「どのノートに書いてある?」と聞けばノートがリンクで返ります。取り込みも設定も不要です。4B のモデルですから、モデル自身の知識は API の向こうのどれよりも弱い — だからその部分は常に注意書きを付け、ウィキには決して書き込まれません。 書き出されるものはすべて、あなたの vault の中のプレーンな Markdown です。 **あなた自身のノートがモデルによって書き換えられることはありません。** ウィキはその上に築かれる独立した層であり、ノートはあなたが書いたままの姿で残ります。 **そしてモデルは、すでに Obsidian の中にあります。** Gemma 4 E4B は [LiteRT-LM](https://github.com/google-ai-edge/LiteRT-LM) と WebGPU を通じて Obsidian 自身のプロセスの中で動きます — **API キーも、Ollama も、LM Studio も、localhost のサーバーも、アカウントも、サブスクリプションも不要**。 プロバイダーを選ぶ必要すらありません。**ノートがどこかにアップロードされることは決してありません。アップロード先のサーバーそのものが存在しないからです。** ここでのプライバシーは、ポリシーに書かれた約束ではなく、アーキテクチャの性質です。 初回のダウンロード(約 3 GB のモデルと WebAssembly ランタイム。どちらも [プライバシー](#-プライバシー) に記載)を終えたあとは、推論はローカルで動き、ネットワークはもう必要ありません。 このプラグインは **[Andrej Karpathy の LLM-wiki パターン](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f)** を実装しています。あなたの生のノートが *モデルによって* 書き換えられることはありません — 不変性の制約が縛るのは LLM であって、あなたではありません。チャットで間違いに気づいたとき、自分でノートを直すのがごく普通の対処です(ウィキ側が変更を検知し、再取り込みを提案します)。その上に、相互リンクされた独立したウィキ層が作られます。ノート 1 枚につきカード 1 枚、そして **1 バイトでも書き込まれる前に、ページ全文が必ずあなたに提示されます。** そこから先は、1 つのノート、あるいはウィキ全体を根拠にした対話、そのどちらからでも作れる小テスト、同じタグを共有するページ群をまたぐコンセプトページの生成、そして lint・来歴・矛盾チェックによる自己劣化の検出へと広がります。**出典はプラグインが列挙するものであり、モデルに引用させることは決してありません** — 引用は、小さなローカルモデルが誰にも気づかれないまま間違える、まさにその一点だからです。 書き出されるものはすべて、あなたの vault の中のプレーンな Markdown です。データベースに囲い込まれるものは何もなく、読み返すのに別のプラグインも要りません。設定自体もノートです。**タグ語彙と命名ルールは `schema.md` に置かれ**、手で編集すればプラグインはそれに従います。**すべての操作は `log.md` に追記され**、いつ何をしたのかを常に確認できます。そして **`skills/` に Markdown ファイルを置くだけで、⚡ メニューにあなた自身のコマンドが増えます。** > [Andrej Karpathy の LLM Wiki パターン](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) の中核ループは実装され、動作しています。レビューを挟んで `gemma-wiki/` 層へ取り込み、相互リンクを張り、`gemma-wiki/index.md` のカタログと追記専用の `gemma-wiki/log.md` を保ち、インデックス優先で根拠を伴うチャットを行い、出典は決定的に付与されます。答えはそれを生んだ材料のそばに保存され(読み返すためのものであり、検索対象にはなりません)、モデルを使わない点検→修復パスと、単一タスクのスキルが揃っています。以下のベンチマークは実使用時の実測値です。 ## 🚀 クイックスタート 1. **インストール。** 設定 → コミュニティプラグイン → 閲覧 → **Gemma 4 E4B LLM Wiki** を検索 → インストール → 有効化。 2. **パネルを開く。** 左のリボンにある、本と閃きのアイコンをクリックします。 3. **開いているノートについて何か聞く。** 最初の質問のとき、モデルをダウンロードしてよいか確認されます — 約 3 GB、1 回だけ、途中で切れても再開できます。それ以降の答えは、あなたの GPU から返ります。 4. **ウィキを作る。** パネルを **Wiki** に切り替え、**Scan a folder** を押し、ノートのフォルダにチェックを入れ、下書きされたカードを読んでから承認します。承認するまで何も書き込まれません。 最初の答えが返ってこないときは、コマンドパレットから **Check setup (diagnostics)** を実行してください。必要な 5 つのうち、どれが欠けているかを示します。 ## 📑 目次 - [🚀 クイックスタート](#-クイックスタート) - [🚫 向いていない方](#-向いていない方) - [📋 動作要件](#-動作要件) - [✨ 主な機能](#-主な機能) - [💬 ノートと対話する — 完全にオフラインで](#-ノートと対話する--完全にオフラインで) - [⌨️ コマンド一覧](#️-コマンド一覧) - [🔌 ほかの AI プラグインとの違い](#-ほかの-ai-プラグインとの違い) - [🤔 なぜ作ったのか](#-なぜ作ったのか) - [❓ よくある質問](#-よくある質問) - [🔧 仕組み](#-仕組み) - [📊 ベンチマーク](#-ベンチマーク) - [🗺️ ロードマップ](#️-ロードマップ) - [🔒 プライバシー](#-プライバシー) - [📜 ライセンス](#-ライセンス) - [💖 クレジット](#-クレジット) ## 🚫 向いていない方 正直に、このタブを閉じてよい 6 つの理由: - **スマートフォンやタブレットで使いたい。** デスクトップ専用で、しかも構造的にそうです。WebGPU と約 3 GB のディスクが必要です。 - **マシンに WebGPU がない。** ここ数年の内蔵 GPU なら問題ありません。VM、リモートデスクトップ、古い GPU はたいてい不可です。`[Test] Check WebGPU` コマンドがワンクリックで教えてくれます。 - **GPU が 2 枚ある Windows ノートで遅い方が使われる。** ランタイムは高性能アダプタを要求しますが、どちらのカードを Obsidian に渡すかは Windows が決めます。*Check setup (diagnostics)* が使用中の GPU を表示します。Intel か AMD の内蔵グラフィックスで、専用カードも積んでいるなら、設定 → システム → ディスプレイ → グラフィック で Obsidian を追加して「高パフォーマンス」にし、再起動してください。スキャンも回答も専用カードでは数倍速くなります。 - **3 GB の空きがない。** モデルは一度だけダウンロードされ、プラグインフォルダに置かれます。 - **フロンティアモデル並みの知識が要る。** Gemma 4 E4B は 4B モデルです。あなたのノートを読むのは得意で、広い世界のことは苦手です。Vault モードは一般的な質問にも答えますが、ChatGPT の代わりにはなりません。 - **元資料が PDF・画像・Office 文書。** 読めるのは Markdown ノートだけです。先にクリップするか変換してください。 どれにも当てはまらなければ、このページの続きはあなたのためのものです。 ## 📋 動作要件 - Obsidian 1.11.4 以降、**デスクトップ専用**(macOS / Windows / Linux。モバイル非対応。このプラグインは `isDesktopOnly: false` の形では公開されません) - WebGPU が使える GPU とブラウザランタイム(Obsidian 同梱の Electron / Chromium) - [`litert-community/gemma-4-E4B-it-litert-lm`](https://huggingface.co/litert-community/gemma-4-E4B-it-litert-lm) モデル用に約 3 GB の空きディスク容量。一度だけダウンロードされ、ディスクにキャッシュされます - さらに LiteRT-LM の WebAssembly ランタイム用に約 20〜31 MB。初回使用時に取得されます。ランタイムは 4 種類のバリアントで配布されますが、あなたのマシンが読み込むのは常にそのうち 1 つだけで、どれを使うかはライブラリ自身の機能検査が決めます。ダウンロードされるのもその 1 つだけです - ネットワークアクセスは、これらの初回ダウンロードのときだけ必要です。それ以降ネットワーク呼び出しは行いません > **この vault を同期している場合は、モデルファイルを除外してください。** ダウンロード先は > `/.obsidian/plugins/gemma-litert-wiki/gemma-4-E4B-it-web.litertlm` です。Obsidian は > プラグインに vault の外の書き込み先を与えないためです。したがって iCloud、Dropbox、および > 「コミュニティプラグイン」を有効にした Obsidian Sync は、いずれも約 3 GB をすべてのマシンへ > 複製してしまいます。各マシンが自分で一度ダウンロードするほうが、はるかに短時間で済みます。 > ウィキフォルダ自体は普通の Markdown なので、通常どおり同期して問題ありません。 > > なお `data.json`(ナレッジフォルダ名を保持しています)は同期されないことが多い点に注意して > ください。片方のマシンでフォルダ名を変更しても、もう片方はそれを知りません。現在はウィキ > らしきフォルダを見つけると、2 つ目を作る前に確認するようになっていますが、最もきれいな > 対処は両方で同じ名前に変更することです。 ## ✨ 主な機能 **Karpathy ループ** — 生のノートは読み取り専用のまま、プラグインは独立した `gemma-wiki/` 層を保守します。 - **Ingest(取り込み)** — ノート 1 枚につき厳密な JSON 抽出を 1 回(要約、タグ、要点、目立つ言及、そして `high`/`med`/`low` の自己申告の確信度をフロントマターに記録)。加えて、インデックスのカタログから関連ページを選ぶ検証付きの多肢選択を行います。すべてレビューモーダルでプレビューされ、承認なしには何も書き込まれません。取り込み済みのノートにはファイルエクスプローラー上でバッジが付きますが、これは純粋な UI の装飾で、ノートのファイル自体には手を触れません。 - **Scan(半自動の取り込み)** — あなたが指定したフォルダを走査して新規・変更されたノートを見つけ、それぞれのカードを下書きし、**確信度の低い順に並べた** 1 つのリストでまとめてレビューします。人の目を最も必要とするページから読むことになります。ページにすべきでなかったものはチェックを外してください。範囲はオプトインです。フォルダ一覧を空のままにすると、vault 全体を走査するのではなく、Scan は実行を拒否します。 - **index.md / log.md** — クエリ経路が最初に読む、1 ページ 1 行のカタログと、追記専用で grep しやすい活動ログ。 - **Query(Wiki モード)** — ストップワードを除いたインデックス優先の検索。カタログと直近のログは常に同行するので、「今日は何を追加した?」のようなメタ質問も機能します。答えは検索された材料のみを根拠とし、それ以外は正直に断ります。 - **ウィキ全体への質問は、語彙が一致したページではなく全ページを根拠にします。** *「自分のページ同士は何でつながっているか」* はコレクションの形についての問いなので、ページ要約に対してスコアリングしても何も一致しません — 質問中の語がどの要約にも現れないからです。その結果モデルは 0 件のページを渡され、「何も与えられなかった」と正しく報告します。この種の問いを投げる 2 つのチップにはそのフラグが付いており、`loadPages` は予算いっぱいまで詰めて止まります。 - **答えをノートとして保存** — すべての返信に保存アクションがあります(同じレビューゲートを通ります)。保存先は **あなた自身のノート** で、元になったノートのそばに、`gemma — Summarize — The perfect espresso shot` のような名前で置かれます。ファイルエクスプローラーを見た瞬間に、モデルが書いたものであることと、何についてのものかの両方が分かります。さらにフロントマターには、どのモデルが、どの出典から書いたかが記録されます — コピー&ペーストが静かに壊してしまう 2 つの情報です。保存先はあなたのフォルダ、あなたの整理体系の中であり、ウィキフォルダを削除しても生き残ります(プラグインが所有するものは、どれもそうは作られていません)。そして、あなたの普通のノートであるがゆえに、保存された答えがかつて決して持てなかった性質を持ちます — **取り込み可能である** ということです。Scan すれば他のノートと同じようにカードになります。これが、何かが材料になる唯一の経路です。ウィキが検索するものはすべて、あなたが書いたノートに由来するからです。 - **検索されうるものはすべて、あなたが書いたノートに由来します。** これは慣習ではなく構造として成り立っています。検索対象は `cards/`(取り込んだノート 1 枚につきカード 1 枚)と `concepts/`(それらのカードをまたいで作られる)だけです。 - **保存された答えが検索されることはありません。** Karpathy の gist は「探索は積み重なるべきだ」と述べていますが、信頼については何も述べていません。そこに汚染のループがあります — 誤った、あるいは古くなった答えが、ノートと同じ重みで文脈に再び入り込むのです。ですから保存された答えは検索対象にまったく含まれません。それはあなたの普通のノートであり、読み返すために保たれ、どのモデルがどの出典から書いたかをフロントマターに記録しています。戻ってくる経路はただ 1 つ、意図的で人間的なもの — あなたが内容を判断し、自分で書いた他のものと同じように取り込むことです。 - **コンセプトページ** — 2 つ以上のページが共有するタグや言及を選ぶと、プラグインはそれらの *上* に立つページを書き、各ページへリンクを張り下ろします。取り込みの影響はここまで波及し、メンバー一覧は双方向に自己修復します。 **正直さを保つ仕組み** — 誰もレビューしないウィキこそ、このプラグインが対抗しようとしている失敗の形です。 - **Review board(レビュー盤)** — ページが劣化する 3 つの経路を 1 つのキューにまとめます。自己申告の確信度が低いもの、**ソースのずれ**(取り込み後に生のノートが変更されたもの。`source_hash` で検出)、そして陳腐化。コンセプトの概要も対象です。 - **Provenance spot-check(来歴の抜き取り確認)** — ページの要点を生のノートまで遡り、それぞれの元になった文を探し、辿れなかったものにフラグを立てます。 - **Contradiction sweep(矛盾の走査)** — 同じタグを共有するページの組を調べ、食い違う主張を探します。最近変更された組から順に見ます。モデルの理由を引用してフラグを立てるだけで、**編集は一切しません** — どちらが誤りだったかを決めるのはあなたです。 - **Tidy the wiki(ウィキの手入れ)** — まず点検し、あなたがチェックしたものだけを直す 1 つのコマンドです。点検にモデルは使いません。孤立ページ、削除済みページを指しているインデックス項目、インデックスに載っていないページ、そしてページのタグが語彙からどれだけ離れたか。4 つの修復(リンクを相互にする、死んだインデックス項目を落とす、語彙を作り直す、それを既存ページに適用する)は常に提示され、点検が何かを見つけた項目には最初からチェックが入っています。各修復はそれぞれのプレビューを挟んで順番に実行されます。選択肢が検出結果に縛られることはありません。妥当な初期値を選ぶのに十分な点検であっても、唯一の入口として十分だとは限らないからです。 - **バックグラウンド計数**(既定でオフ) — 新規・変更されたノートの *件数* を定期的に数え、ステータスバーのチップに表示します。数えるだけでモデルは走りません。下書きが作られるのは、あなたがクリックしたときだけです。 **設定もノートとして** — ルールは、読めて、編集できて、バージョン管理できるプレーンな Markdown として存在します。 - **`schema.md`** — タグ語彙、命名ルール、**拒否リスト**(手で削除したタグは戻ってきません)、そして **エイリアス表**。リタグを承認すると「古いタグは新しいタグを *意味する*」という対応が記録され、まだ `llm-eval` を付けたままのページが `evals` についてのページだと認識できるようになります。プラグインがこのファイルを書き換える前には直前の版が隣に保存されます(`schema.md.bak.<日付>`、最新 5 つを保持)— 生成ファイルの中で唯一、失うと取り戻せないものだからです。**ウィキを整える(Tidy the wiki)** が、ページで実際に使われているタグから語彙を組み直し — 近い意味のタグはローカルの Gemma がまとめます — さらにそれを既存ページに適用します。チェックは 2 つに分かれており、それぞれ個別のプレビューを挟みます。語彙の組み直しは設定画面のボタンからも実行できます。 - **`skills/`** — ⚡ メニューの項目 1 つにつきファイル 1 つ。フロントマターに名前・アイコン・モードを書き、本文がプロンプトになります。本文中の `> [!info]` コールアウトはドキュメントであり、モデルに渡る前に取り除かれます。`fill: true` にすると、送信せずに入力欄にプロンプトを置いて待ちます — 何かに向けて狙いを定める必要があるスキル向けです。README と 2 つの例が同梱されており、これらには `stamp:` ハッシュが付いています。後のリリースで改善できますが、**あなたがそのファイルを編集していた場合はそのままです** — 以後それは永久にあなたのものになります。 - **すべてのフォルダに README があり**、そこに何を置くべきかを説明します。レイアウトは設定画面に行ごとの状態付きで表示され、scaffold が組み立てるのと同じ一覧から生成されます。 **チャットパネル** — shadcn 風のモノクロ、テーマ変数駆動。 - **2 つの根拠モード**: *This note*(開いているファイル)と *Wiki*(取り込み済みのページ群)。 - すべての答えに付く **決定的な Sources 行** — 実際に使われたものをプラグインが正確に列挙し、クリックできます。引用がモデルに委ねられることはありません。 - **`+` 添付** — 任意のノートをあいまい検索で選び、取り外せるコンテキストのピルとして追加できます。どちらのモードでも使えます。 - **⚡ Skills** — 単一タスクの定型プロンプト。*Quiz*、*Flashcards*、*Find gaps*、加えて編集可能なファイルとしての *Action items* と *Unclear bits*、さらに `skills/` に置いたものすべて。スキルファイルはフロントマターとプロンプトなので、メニューが持つのは *問い* です。何かを **する** もの(Scan する、ノートを取り込む、整形する)は、代わりに入力欄の上のチップになります。 - **スキルは必要なモードを自分で宣言し、モードが違うときは灰色になります。** 勝手にモードを切り替えたりはしません — メニュー項目が、パネルの根拠を黙って変えてしまうべきではないからです。同梱のスキルはすべてノート単位です。Wiki モードでは何も検索できなかったためで、語彙ベースのスコアラーはプロンプトの語をページ要約と突き合わせるのに、*「この教材から練習問題を作って」* は複利についてのページと語彙を 1 つも共有しないからです。 - **✨ Improve formatting** — 生のノートに書き込む唯一のアクションであり、このプラグインで最も制約の強い呼び出しです。構造・書式・誤字のみを対象とし、言い回しと文体は保存されます。書き込む前に結果全文をプレビューします。長いノートは見出しと空行で、それぞれコンテキストウィンドウに収まるパスへ分割され、1 パスずつ書き直されて縫い合わされます。選択範囲があれば 1 セクションに絞られます。 - **入力欄の上の 3 つの固定チップ** — パネルの中で決して消えない唯一の部分です。Wiki モードでは *Scan a folder* と *Find connections*。スキャン実行中は最初のものが **Stop scan** に変わります(コマンドパレットから始めた場合も同様)。ウィキが空でも並び替えは起きません。何も取り込んでいない状態でウィキに質問すれば「ここには何もありません」と答えますが、**その答え自体が、それを直すためのボタンを連れています。** 対処法が問題と一緒に移動するので、これが何なのかをまだ探っている人から他のチップを隠さずに済みます。 - 応答のストリーミング表示、入力中スピナー、停止ボタン、コピー/再生成、自動で伸びる・展開できる入力欄、チャットのクリア、各所のホバーツールチップ。 **プラグイン全体が従うエンジニアリング上のルール**: - モデルへの操作はすべて **1 回の構造化された問い合わせ** です。ツールのループも多段の計画もありません。小さなローカルモデルは連鎖が苦手で、1 つのスキーマを埋めるのは得意だからです。 - **同時に走る操作は 1 つだけ。** エンジンもステータス行も時計も 1 つしかないので、2 つ目を始めようとすると、すでに何が動いているかを名指ししたメッセージとともに拒否されます。そして入口になりうる扉はすべて閉じます — チップは灰色になり、スキルメニューも何が動いているかを 1 行添えて灰色になり、チャット入力も受け付けません。ストリーミング中の応答も 1 つの操作として数えます。当初はそうなっておらず、応答の途中で *Formatting* を押すと同じ GPU 上で 2 つ目の呼び出しが始まっていました。 - すべての書き込みは **プレビュー→承認のゲート** を通ります。生のノートを変更する機能はちょうど 2 つ(Improve と Suggest tags & links)で、どちらも必ずプレビューされます。 - 根拠づけとは **材料が主題である** ということであり、モデルが使ってよい語彙がそれだけ、という意味ではありません。両モードとも同じ線を守ります。*あなたの材料* についての問いはそこからのみ答え、答えられないときは正直に断ります。*ある語の意味* についての問いは説明し、材料が述べていることと語の意味とを分けて示します。モードによって違うのは範囲であって、ルールではありません。Wiki モードでは、その区別が文面上で見えている必要があります。Sources 行が、あなたが今見ていないページを指しているからです。 - プロンプトは 4 つの場合を区別します。これらをひとまとめにすることが、小さなモデルが自信たっぷりに誤った拒否を返す原因だからです。材料が答えていない **事実の問い**(そう言う)、材料を使って作業せよという **指示**(実行する。フラッシュカードを求められて、ノートの *中* にフラッシュカードを探しに行き、断っていたことがありました)、ノートが使っている語の **説明の要求**(説明する。ノート自身の文をそのまま返すのは答えではありません)、そして **解釈できなかった要求**(理解できなかったと伝え、聞き直す)。最後のものが最も重要です。断片を投げると *「提供されたノートには X に関する情報がありません」* と返ってきていましたが、これはノートに情報があったかもしれないと示唆してしまいます。実際にはモデルが質問を理解できなかっただけなのに。 - 機能ごとの入力予算は、設定値からではなく **エンジンが実際に許可したコンテキストウィンドウ** から導きます。`Engine.create` から読み戻すのです。LiteRT-LM は `maxNumTokens` を切り詰めることがあり、要求値から導いた予算はその場合すべて上振れしてしまいます。 - **通知の語彙は 1 つ**(`src/notify.ts`)。6 種類がそれぞれ 1 つの意味だけを持ち、手で選んだ 10 個の数値ではなく 3 つの表示時間を使い、呼び出し側がミリ秒を決めることはありません。`noop` にはあえて印を付けていません — 正しく何もしなかったコマンドは、出来事ではないからです。失敗が生の例外を表示することはありません。操作の名前を挙げ、理由の 1 行目を示し、残りがどこにあるかを伝えます。警告とエラーは `log.md` にも追記されます。トーストは記録ではないからです。 - **3 つの面に、それぞれ 1 つの仕事。** トーストは *瞬間* なので、開始と結果を伝えます。実行は瞬間ではないので、進捗はステータスバーに置かれます。常に見えていて、ノートを覆わず、誤って消してしまうこともなく、クリックすればもう一度説明させられます。そして結果のダイアログが **自分から開くのは、あなたが一度も目を離さなかったときだけ** です。数分かかるスキャンの間にノートへ戻っていたなら、ダイアログはステータスバーで待ち、あなたが求めるまで、入力中の画面を奪ったりはしません。 ## 💬 ノートと対話する — 完全にオフラインで 本と閃きのリボンアイコンをクリックするとサイドパネルが開きます。モードは 3 つ、ピル型のトグルで切り替えます。それぞれ読むものが違い、パネル題名の下のチップがそれを数字付きで示します — *Your notes · 379 files*、あるいは *gemma-wiki/ · 12 cards, 2 concept pages* — ので、広い 2 つのモードが同じに見えることはありません。 - **This note**(既定)— 現在開いているノートのみから答えます。 - **Vault** — vault 内の生のノートすべてを、タイトル・タグ・見出し・本文で語彙検索します(wiki フォルダは除外)。ノートが見つかれば、答えは **From your notes** と Sources 行で始まり、続いて **Gemma 4 E4B adds** としてモデル自身の答えが注意書き付きで並びます。見つからなければ、その旨を一行で示し、ついでに触れているノートがあればその名を挙げて、そこで止まります。Gemma 4 E4B には尋ねません。ノートに何も無かったと報告する行の下にモデルの創作が続くのは、別種のものが二つ並ぶだけだからです。ボタンを押せば尋ねられます。「どのノートに書いてある?」と聞けば、まずノートがリンクで並び、モデルが一行ずつ説明を添えます — 探すのはプラグイン、読むのはモデルです。4B のモデルに vault の検索はできませんし、させません。vault そのものについて聞かれて何も一致しなければ、フォルダ構成と最近編集したタイトルから答えます。 pill の横に **Notes first** のチェックがあり、既定でオンです。外すと検索をせず Gemma 4 E4B が直接答え、タイトル下のチップがその旨を示します。Vault に戻るたびにチェックは自動でオンに戻ります。 - **Wiki** — Karpathy の Query 経路です。まず `gemma-wiki/index.md` のカタログを読み、最も一致するページを読み込み、そこからのみ答えます(カタログと直近の活動ログも併せて渡されるので、「今日は何を追加した?」のようなメタ質問も機能します)。カードは圧縮されているので、一度に 30 ページを抱えられるのはこのモードだけです。「ノート同士のつながりは?」は生のノートでは答えられず、ここで答えます。その種の質問を Vault で尋ねると、答えの下でそう伝え、Wiki へ — まだ何も取り込んでいなければ Scan a folder へ — 案内します。 どのモードでも、答えは Obsidian 自身のプロセスの中で動くモデルからストリーミングで届きます。すべての答えの末尾には決定的な **Sources** 行が付き(クリック可能。モデルに引用させるのではなく、プラグインが列挙します)、メッセージごとに **コピー/再生成/ノートとして保存** のアクションがあります。両モードとも、材料があなたのノートについての問いに答えていないときは正直に断り、また材料が使っている語については、オウム返しにするのではなく説明します — 材料が述べていることと、語の意味とを分けたまま。**間違ったモードで尋ねた質問は、失われずに振り分けられます**。This note で vault について尋ねたり、Wiki で一般的な質問をしたりすると、断りの文に答えられるモードへのボタンが付き、ワンクリックでそこで聞き直せます(打ち直し不要)。Vault モードにこのカードはありません。すでに探したあとだからです。空のパネルには各モードに合った例文が 3 つ表示され、ほかの 2 モードの名前と用途も示されます。設定の **Standing instructions** は、言語・長さ・口調などをすべてのモードのすべての答えに添えます。答えが何を根拠にしてよいかは緩めません。**+** ボタンで追加のノートを、取り外せるコンテキストのピルとして添付できます。**⚡ skills** メニューは、開いているノートに対して単一タスクの定型プロンプト(*Quiz*、*Flashcards*、*Find gaps*)を実行します。 ## ⌨️ コマンド一覧 すべてコマンドパレット(Cmd/Ctrl + P)の *Gemma Wiki* にあります。 **訊く** | コマンド | 何をするか | |---|---| | **Chat with active note (local Gemma)** | チャットパネルを開きます — This note / Wiki の各モード、`+` 添付、⚡ スキル、ノートとして保存。[上のセクション](#-ノートと対話する--完全にオフラインで) を参照してください。 | **ノートをウィキに取り込む** | コマンド | 何をするか | |---|---| | **Ingest this note into wiki (local Gemma)** | 厳密な JSON 抽出を 1 回(要約、タグ 3 つ、要点 3〜5 個、目立つ言及、自己申告の確信度)と、インデックスからの検証付き関連ページ選択。レビューモーダルでプレビューされ、承認されたときだけ書き込まれます。生のノートがプラグインによって変更されることはありません。取り込み済みのノートにはファイルエクスプローラーでバッジが付きます。 | | **Scan a folder into the wiki (batch, local Gemma)** | 同じ抽出をフォルダ単位で、新規・変更されたノートに対してだけ行います。**各フォルダの件数を数え、実行前に所要時間を見積もる** ダイアログが開き、前回の選択を覚えています。まずすべてを下書きし、そのあと **確信度の低い順に並んだ** 1 つのレビューリストを表示します。範囲はオプトインで、あなたがフォルダにチェックを入れない限り vault を走査することはありません。 | | **Stop the running scan** | スキャン実行中だけパレットに現れます。同時に *Scan a folder* チップも *Stop scan* に変わります。モデルの呼び出しは中断できないため、**処理中のノートは最後まで終えて保持されます。** そこまでに下書きされたものはすべてレビューリストに送られ、残りは次回のスキャンで提示されます。停止によって作業が失われることはなく、何かが書き込まれることもありません。 | | **Suggest tags & links for active note (local Gemma)** | 1 つのノートについて、フロントマターのタグと関連ウィキページへのリンクを提案します。プレビューを挟みます。 | **上の層を作る** | コマンド | 何をするか | |---|---| | **Build a concept page from a tag or mention (local Gemma)** | 2 つ以上のページが共有するタグや言及を選ぶと、それらの *上* に立ち、各ページへリンクを張り下ろすページを書きます。メンバー一覧は双方向に自己修復します。 | **正直に保つ** | コマンド | 何をするか | |---|---| | **Review board (low-confidence, drifted, and stale pages)** | ページが劣化する 3 つの経路を 1 つのキューに。自己申告の確信度が低いもの、`source_hash` で検出したソースのずれ、そして陳腐化。 | | **Find contradictions in wiki (local Gemma)** | 同じタグを共有するページを調べ、食い違う主張を探します。最近変更された組から順に。理由を引用してフラグを立て、**編集は一切しません。** | | **Provenance spot-check (local Gemma)** | ページの各要点を生のノートの文まで遡り、辿れなかったものにフラグを立てます。1 回につき 8 ページ。どの 8 ページかはモデルを使わずに決めます — メンションと要点が元のノートに最も裏づけられていないページが先です。 | | **Tidy the wiki (check, then fix what you approve)** | 5 つの保守コマンドを 1 つに。モデルを使わない点検が、孤立ページ、死んだインデックス項目、インデックスに載っていないページ、タグのずれ、そしてコンセプトページを作れるだけのページが集まっているのにまだページがない主題を報告します。そのうえで 4 つの修復(リンクを相互にする、死んだインデックス項目を落とす、タグ語彙を作り直す、それを既存ページに適用する)がまとめて提示され、点検が見つけた項目にはチェックが入った状態になり、それぞれのプレビューを挟んで順番に実行されます。 | **あなた自身のノートに書き込む — これだけがそうします** | コマンド | 何をするか | |---|---| | **Improve formatting of active note (local Gemma)** | 構造、リスト、誤字のみ。言い回しと文体は保存されます。長いノートは見出しと空行で、それぞれコンテキストウィンドウに収まるパスへ分割され、1 パスずつ書き直されてバイト単位で正確に縫い合わされます。開始前にパス数が伝えられます。選択範囲があれば 1 セクションに絞られます。書き込む前に結果全文をプレビューします。 | **セットアップと診断** | コマンド | 何をするか | |---|---| | **Check setup (diagnostics)** | 最初の回答が成り立つために必要な 5 つ(デスクトップ、WebGPU、ディスク空き容量、ランタイム、モデル)を点検し、それぞれについて何をすればよいかを一文で示します。バグ報告にそのまま貼れるテキストも添えます。含まれるのはバージョン・ハードウェア・ファイルサイズだけで、vault の中身は一切入りません。常に利用できます。 | | **Download model (one-time, ~3GB)** | 最初のコマンドが引き金を引くのを待たず、進捗を表示しながらモデルをダウンロードしてキャッシュします。 | | **[Test] Check WebGPU** | 使用可能な WebGPU アダプタがあるかを確認します。*(`[Test]` コマンドは、Settings → Model → Developer commands をオンにしない限り表示されません。)* | | **[Test] Load WASM runtime (no model download)** | モデルなしで LiteRT-LM の WASM ランタイムだけを読み込み、ランタイムの問題とモデルの問題を切り分けます。 | | **[Test] Fix grammar of selection** | 選択範囲に対して実際の生成を走らせ、prefill / decode 速度と最初のトークンまでの時間をコンソールに記録します。 | | **[Test] JSON reliability test (5 runs)** | 選択範囲に対して構造化 JSON 生成を 5 回独立に実行し、成功率として報告します。モデルが取り込みパイプラインを確実に駆動できるかを見るリスクテストです。 | | **[Test] Benchmark this machine** | 固定のベンチマーク用ノート 5 本(短い英文・長い英文・日本語・コード中心・リンクの羅列)をそれぞれ 1 回ずつ抽出にかけ、お使いの GPU でのカード 1 枚あたりの秒数、コールドスタート、最初のトークンまでの時間、prefill / decode のスループットを報告します。貼り付け可能な Markdown をクリップボードと `benchmark.md` に書き出します。どこにも送信されません — 上の表にご自分のハードウェアを載せたい場合は、結果用の issue に貼ってください。 | | **[Test] Where the time goes (since the last reset)** | 各ステップ — 取り込み、語彙の整理、コンセプトページ、来歴チェック — がモデルの中で費やした時間を、呼び出し回数と全体に占める割合とともに報告します。自分で計測し直すのではなく累積値を読むので、実際に行った作業そのものを表します。クリップボードにコピーし、`benchmark.md` に追記します。 | | **[Test] Mark now, so the next report covers only what follows** | 目印を記録し、次回のレポートがそれ以降の作業だけを対象にするようにします。リセットではなく目印なのは、2 つの実行が重なりうるからです — 手動で 1 本取り込んでいる最中に背景でスキャンが走る、というのは普通に起きます。カウンタを 0 に戻すと、一方の時間がもう一方に付け替えられてしまいます。 | ## 🔌 ほかの AI プラグインとの違い 最初の 1 行だけが、このプロジェクトに言えてほかには言えないことです。表の残りは、おおむねその代償です。 | | このプロジェクト | プロバイダーに依存するプラグイン | |---|---|---| | **モデルが動く場所** | Obsidian 自身のレンダラープロセスの中。入れておく別プログラムも、起動しておくものも、動かし続けるものもありません。 | ほかの何か — Ollama、LM Studio、クラウドのエンドポイント、ドキュメント変換サービス。「完全にローカル」を掲げるものも例外ではありません。そこでのローカルとは、自分で入れて常駐させておくデーモンのことです。 | | **用意するもの** | プラグインを入れるだけ。初回起動時にモデルを一度ダウンロードします。 | プラグインを入れ、そのうえでもう半分を用意します。動かすアプリか、取得して支払う API キーか。 | | **初回以降** | ネットワーク通信は一切ありません。 | クラウドなら操作ごとにリクエストが飛び、ローカルデーモンならキーを押した瞬間にそれが生きている必要があります。 | | **使えるモデル** | 1 つ。Gemma 4 E4B と、今後 LiteRT-LM が対応するもの。持ち込みはできません。 | 好きなもの。フロンティアのクラウドモデルも含め、レンダラーに収まる規模より遥かに高性能です。16 以上のプロバイダー対応はこの分野では珍しくありません。 | | **モバイル** | 不可。しかも構造的に不可で、WebGPU と約 3 GB のディスクを必要とします。 | 可。プロバイダーに HTTP で到達できる限り動きます。 | | **読めるもの** | Markdown のノート。 | Markdown に加えて、PDF・画像・Office 文書も扱えることが多いです。ファイルを直接受け取るプロバイダー経由か、変換バックエンド経由で。 | | **インターフェースの言語** | 英語。この README は日本語版もありますが、プラグインの画面自体は翻訳されていません。 | 多言語対応であることが多いです。11 言語対応のものも存在します。 | | **動かすコスト** | ディスク約 3 GB を一度きり。 | ローカルデーモンなら無料、クラウドならトークン課金。 | | **ディスク上のインデックス** | なし。wiki は vault 内の素の Markdown です。埋め込みは作らず、ノートを開くたびに再構築することもなく、2 台目のマシンで作り直す必要もありません。 | 別個の埋め込みインデックスを持つことが多いです。数千ノートで数百 MB、端末ごとに再構築され、そうしたプラグインを 2 つ使えば 2 つ分になります。 | | **有料プラン** | なし。GPL-3.0 ライセンスで全機能、アカウント不要。 | 無料枠と有料機能の組み合わせがこの分野では一般的です。 | | **唯一の可動部** | 推論 API はなく、設定するものもありません。ただし WebGPU ランタイムには数ギガバイトの重みを HTTP 経由でしか渡せないため、プラグインはループバックサーバーを一時ポートで立て、自分のディスク上のモデルとランタイムのバイト列を自分自身に供給します。`127.0.0.1` にバインドし、推論エンドポイントは持たず、プラグインが読み込まれている間だけ存在します。 | `localhost:11434`、あるいはベンダーの HTTPS エンドポイント。自分で設定するアドレスであり、クラウドの場合はそこへ自分のノートが送られます。 | これは「レンダラー内ローカルのほうが *優れている*」という主張ではありません。Obsidian の中で動く Gemma 4 E4B は、API の向こうのフロンティアモデルより弱く、読めるファイルの種類は少なく、話せる言語も少なく、スマートフォンでは決して動きません。その代わりに得られるのは、ほかに入れるものがなく、動かし続けるものがなく、初回ダウンロード以降は何もマシンの外へ出ていかないことです。そしてそれに意味があるのは、出力の品質が保たれる場合だけです。以下のベンチマークは、まさにそこを — この手法が弱い箇所も含めて — 正直に確かめるためにあります。 ## 🤔 なぜ作ったのか 「ローカル AI」を謳う Obsidian プラグインの多くは、いまも独立して動く 2 つ目のアプリケーションに依存しています。プラグインが何かをする前に、Ollama や LM Studio をインストールし、バックグラウンドで起動しておかなければなりません。ノートが自分のマシンから出ていかないという意味ではローカルですが、「プラグインを入れればそれで動く」という意味ではローカルではありません。 このプロジェクトはもっと狭い問いを立てます。**Electron と WebGPU がすでに提供しているものだけを使って、モデルをプラグインとまったく同じプロセスの中で動かせるか?** 答えは、端から端まで検証した結果([ベンチマーク](#-ベンチマーク) 参照)、短くて範囲の明確なテキスト処理については「はい」です。それが Karpathy 流のウィキ(実体・概念の抽出、相互参照、矛盾検出)を丸ごと支えるのに十分かどうかは、このプロジェクトが検証済みの一歩ずつ、公開されたコミット履歴の中で取り組んでいる、まだ開かれた問いです。 ## ❓ よくある質問 **何かアップロードされますか?** いいえ。サーバーがありません。プラグインが接続するのは 2 つのホストだけで、モデルとランタイムをそれぞれ 1 回ダウンロードするためです。どちらも [プライバシー](#-プライバシー) に記載しています。 **Ollama や LM Studio、API キーは必要ですか?** 不要です。モデルは Obsidian 自身の中で動きます。別のモデルに差し替えられないのも、そのためです。 **自分のノートは書き換えられますか?** 頼んだときだけです。あなたが書いたノートに書き込むコマンドは **Improve formatting** と **Suggest tags & links** の 2 つで、どちらも保存の前に結果の全体を見せます。それ以外はすべて、別の `gemma-wiki/` フォルダに書き込まれます。 **スマートフォンやタブレットで動きますか?** 動きません。WebGPU と、Obsidian モバイルにはない Node の API、そして約 3 GB のディスクが必要です。 **Windows のノート PC で遅いのですが。** Windows が Obsidian を内蔵 GPU で動かしているのかもしれません。**Check setup (diagnostics)** が使用中の GPU を示します。直し方は [向いていない方](#-向いていない方) にあります。 **ノートは何語で書かれている必要がありますか?** 英語・日本語・中国語のノートは [手動テスト手順](docs/tri-lingual-test.md) で確認しています。インターフェース自体は英語のみです。 **答えの質はどうですか?** あなたが書いたものを読むのは得意で、広い世界のことは苦手です。4B のモデルだからです。ノートについての答えには出典が並び、モデルが自分の知識から付け加えた部分には、そうだと分かる表示が付きます。 **削除するには?** ウィキを消すには `gemma-wiki/` フォルダを削除します。ノートから作り直せますが、`chats/` だけは別なので、残したい場合は先に移してください。モデルは `.obsidian/plugins/` の下の、このプラグイン自身のフォルダにあります。そのフォルダを消せば 3 GB が空きます。 ## 🔧 仕組み ローカルモデルを Obsidian のレンダラーの中で動かすと(既存の LiteRT-LM の Web 例がすべて動いている、Chrome 拡張の offscreen ドキュメントではなく)、通常のブラウザタブでは表面化しない Electron 固有の問題が 2 つ現れました。 1. **`file://` の script タグがブロックされる。** LiteRT-LM の WASM ローダーは、Emscripten のグルーコードを読み込むために `