見出し画像

Google NotebookLMをローカルで再現した。プライバシーも課金も気にしない知識管理ツール

Google NotebookLMを使ったことがあるだろうか。

PDFやドキュメントをアップロードすると、
AIがその内容を理解して質問に答えてくれるサービスだ。

引用付きで、
どの文書のどこを根拠にしているかまで示してくれる。

便利である。

ただ、
プライバシーと利用制限の2つが引っかかる。

読み込ませたい資料ほどGoogleに送りたくないし、
無料枠の上限にもすぐ引っかかる。

ローカルで動けば両方解決する。

だから作ってみた。


一度失敗している

正直に書くと、
これは2回目の挑戦だ。

1回目はUIを作り込み、
バックエンド完成度90%まで行って没にした。

ローカルの7Bモデルで本家相当の体験ができるか?
という最も重要な問いに答えないまま作り進めたからだ。

完成間際に試したら、
品質が実用レベルに達していなかった。


2回目は順序を変えた。

まず技術検証(Spike)をやる。
使い物になると確認してから作る。

Spikeで分かったこと

  • 埋め込みモデル

  • PDF抽出

  • RAGパイプライン

  • LLM回答品質

の4つを検証した。

埋め込みモデルはmultilingual-e5-largeを使用した。

nomic-embed-textと比較して類似度スコアが安定して高く
速度も速い。

LLMはQwen3 8B。平均応答11.5秒、引用付与率100%。
検索距離0.12〜0.23で、全クエリで関連チャンクがTop1に出現した。
(検証時点では、Qwenを使用したが、
 運用段階に入ってからは、gpt-oss:20bを使用している
 日本語出力の精度はやはりこちらが有利)

Spike全項目クリアで本実装に進んだ。

作ったもの

本家に寄せた3カラム構成のWebアプリだ。

実際のイメージ
本家にある機能はある程度模倣した

左にソースパネル(PDF/DOCX/PPTX/EPUB/HTML/CSV/URL対応)、
中央にチャット(SSEストリーミング)、
右にノート(ピン留め保存)。


インターネット接続不要で完全にローカル環境で動作可能。
(ただし、URL経由などで情報を取得する部分については、
 言わずもがなインターネットを使用する)


一番こだわったのは引用の扱い。

回答中の「[ソース1]」バッジをホバーすると
ファイル名・ページ番号・スニペット・関連度バーが出る。

ソースを表示するときのイメージ

クリックでソースパネルにハイライト、
ダブルクリックで該当ソースにジャンプ。


AIがそう言ったから

ではなく、

この文書のこのページにこう書いてあるから

を見えるようにしている。

本家との違い

本家にあってこちらにない最大のギャップは
Studio生成機能。
(ポッドキャスト生成、Mind Map、スライド生成等)

次フェーズで着手予定。


逆に本家にない機能がある。

マルチスレッドチャット(同じソースに複数会話)

複数のチャットを設けられる


設定UI
(温度・top_k・閾値・リランキングをブラウザから変更)

任意に設定を変更できる


メタクエリ検出(「全体の要約は?」のような俯瞰的質問をRegex+LLMで検出し、通常検索とは別パスで回答)

そして無制限利用

何回質問しても電気代だけしかかからない。

テストと品質管理

バックエンド67件、フロントエンド28件、E2Eテストも書いた。

品質ベースラインテストでは、
固定PDFに5つの質問を投げ、引用のsource_idと応答時間を自動検証する。

LLMの出力は非決定的だから
正しいソースを引用しているかを基準にした。

根拠が正しければ、回答もだいたい正しい。


今後もこのような、
完全ローカルで動作するツールなどを作成していきます。
フォローしてもらえると!


いいなと思ったら応援しよう!