
WindowsでOllamaを用いたLocal LLM環境をセットアップしてObsidianの拡張機能で生成AIによるタグ付けを行ってみた
さがらです。
WindowsでOllamaを用いたLocal LLM環境をセットアップしてObsidianの拡張機能で生成AIによるタグ付けを行ってみたので、その内容をまとめてみます。
※先に結論として、私のPCでは利用できるLLMに限りがあり精度もあまり良くありませんでした。試した中で一番精度が良かったのはAI Tagger Universe
プラグインでGemini APIのgemini-2.0-flash
を用いた場合でした。(他のクラウドサービスのLLMは試せていません。)
検証背景
最近の生成AIの流れも受け、個人のタスク管理や情報整理をNotionからObsidianに移行している最中です。
この移行作業を行う中でObsidian上での情報分類をどう行うか考えていたのですが、バックリンクなどの機能があることも理解した上で色々考えて、「最低限のフォルダ構成でノートをとにかく雑に書けるようにする」、「情報分類はタグをベースに行う」という方針となりました。(参考までに、タスク管理はKanbanを採用しました。)
この方針となった主な理由は、Notion上でも1つのデータベースに全部のページを管理してタグ付けで情報分類を行っていたので、それに近しい運用ができると考えたためです。Tag Wranglerがあればタグの管理もできそうと感じました。
この時、「Obsidianに移行してMarkdownベースでまとめているなら、LLMベースで自動でタグ付けしてくれないかな。でもLLMのコストは抑えたいな。」と雑に感じて調べていたらLocal LLMを利用できる拡張機能がいくつかあったので、「これを試してみよう!」となったことが今回の検証に繋がっています。
前提条件:検証環境について
前提条件として、私は本記事の検証を以下の環境で行いました。
- OS:Windows 11
- PC:Surface Laptop 6
- CPU:Intel(R) Core(TM) Ultra 5 135H 3.60 GHz
- RAM:16GB
- ObsidianのVault保存場所:Googleドライブ(Drive for Desktopを入れて、Googleドライブをマウントして利用)
WindowsでOllamaを用いたLocal LLM環境をセットアップ
まず、OllamaをインストールしてLocal LLM環境をセットアップします。
以下のURLから、Windows用のダウンロードを行います。
exeファイルを起動し、インストールします。
Ollamaが起動したらチャット画面が表示されるので、使いたいモデルを選択し適当に質問を行います。これにより、モデルのダウンロードが行われます。(本当はgpt-oss:20b
を使おうとしたのですが、500 Internal Server Error: model requires more system memory (13.4 GiB) than is available (13.2 GiB)
と表示されてしまいました。`)
ダウンロードが完了したら、質問に対する回答が返ってきます。これでLocal LLMの準備は完了です!
生成AIによるタグ付け用の拡張機能の選定
Obsidianには生成AIによるタグ付け用の拡張機能がいくつかあるのですが、ダウンロードが多い順にAI TaggerとAI Tagger Universeがあるのでこの2つを試してみます。
- 参考:AI Tagger Universeの設定画面
- 参考:AI Taggerの設定画面
拡張機能:AI Tagger Universeを試す
ということで、AI Tagger Universeを試します。
セットアップ
Obsidianを開いて、拡張機能をインストールします。
設定画面を開き、Local LLMの設定を行います。使用するLocal LLMのツールに合わせてエンドポイントも書いてあるのが親切ですね!Model name
は記述式なのですが、deepseek-r1:8b
と入力すればOKでした。
Tagging mode
では、新しいタグを生成するのか、既存のタグだけを使用するのか、この2つのハイブリッドにするのか、を選択可能です。今回はハイブリッドの方法にしてみます。(下図のように設定しました。)
Excluded files and folders
では、タグ付けのために不要なフォルダを除外設定できます。
残りの設定についてはデフォルトの設定にしておきます。
実際にタグ付けをしてみる(Local LLMのdeepseek-r1:8bの場合)
以下のNotionからエクスポートしてきたノートについて、拡張機能でタグ付けを行ってみます。ノートを開いた状態で、左のAnalyze and tag current note
を押してみます。
すると、約90秒後にObsidianの画面の右上に下図のようにタイムアウトの表示がされました…。
先程のノートは6212文字だったので、もっと軽量な822文字のノートで行ってみましたが、結果は変わらずタイムアウトでした…
実際にタグ付けをしてみる(Local LLMのgemma3:1bの場合)
deepseek-r1:8b
が自身のPCだと耐えられないのではと仮定して、gemma3:1b
で再度試してみます。
すると、先程deepseek-r1:8b
では失敗したタグ付けが、無事に成功しました!6212文字の方はボタンを押してから10秒ほど、822文字の方はボタンを押してから4秒ほどでタグ付けが行われました。
しかし、matchedExistingTags-BigQuery
やsuggestedTags-network
など、タグに本来不要な文字列が入っていたり、matchedExistingTags
と書いてあるけれどBigQueryタグはまだ作成していなかったり、という精度としては悩ましい状況でした…
実際にタグ付けをしてみる(Local LLMのqwen3:4bの場合)
Local LLMでもう一度別のモデルとして、qwen3:4b
でも試してみます。
しかし、822文字のノートでもタイムアウトとなりました…。
実際にタグ付けをしてみる(Gemini APIのgemini-2.0-flashの場合)
最後に、本来の趣旨とは離れているのですが、クラウドサービスを用いた場合にどうなるかも確認してみます。Google Cloudプロジェクトがあればすぐに発行できるGemini APIでgemini-2.0-flash
を使用してみます。
すると、6212文字も822文字のノートも、どちらもボタンを押してから1秒ほどでタグ付けが行われました!タグ付けの精度もLocal LLMのgemma3:1b
より良さそうです。
おまけに私のノートの中でも最長クラスの165516文字のノートでも試してみたのですが、これも1秒ほどでタグ付けが行われました!クラウドサービスの力は凄いですね…
拡張機能:AI Taggerを試す
もう一つの拡張機能であるAI Taggerも試してみます。(Local LLMは私の環境だと難しそうということがわかったので、AI TaggerではGemini APIだけ試します。)
セットアップ
Obsidianを開いて、拡張機能をインストールします。
こちらの拡張機能の設定はシンプルで、API Keyと使用するモデルを入れるだけで設定は完了となります。
実際にタグ付けをしてみる(Gemini APIのgemini-2.0-flashの場合)
タグ付けを行う際は、対象のノートを開いてGenerate tags!
を押すだけです。
実際にタグ付けを行った結果が以下となります。それぞれタグの生成自体は1秒ほどで行うことが出来ました!しかし、各ノートの中で全く関連のないDocker
、redis
、clipping
のタグがついたり、Docker
とdocker
で表記揺れしている点が見受けられました。
まとめ
実際に検証を行ってみたまとめは、下記のとおりです。
- Local LLM
- 私のPC(Surface Laptop 6)では、
gemma3:1b
しかまともに動かなかった gemma3:1b
では、タグ付けの精度に怪しいところがあった
- 私のPC(Surface Laptop 6)では、
- クラウドサービスのLLM
- Gemini APIで
gemini-2.0-flash
だけを試したが、165516文字のノートであっても1秒でタグ付けが行われた。クラウドサービスは凄い…
- Gemini APIで
- Obsidianの生成AIを用いたタグ付けの拡張機能
- AI TaggerとAI Tagger Universeを試したが、同じモデルで試したときのタグ付けの精度はAI Tagger Universeの方が優れていた
- ただ、100%そのままのタグ付けを利用できるかというとそうではないため、自分の場合はベースラインのタグ付けを行う際に利用するレベルに留まりそう
今回の検証を通して、Local LLMもそんな簡単ではないことをしみじみと感じましたね…。
今後の展望としては、Claude Codeなど使ってコンテキストを明確にしながらタグ付けを指示すると、より良い結果が得られるかもしれないと感じています。時間が取れたらこちらもやってみます!