ブラウザで動作するローカルLLMとRAGシステムを搭載したローカル完結のNotebookLMっぽい作業アプリを作りました
こんにちはssmzです!
タイトルの通り、自作NotebookLM風、AIエージェントの搭載された完全クローズドな作業アプリを一般公開しました。
作った経緯
僕は以前、仕事を少しでも気分良く、効率よくするためのWebサービス「Solacepace」というものを作りました。
これを使って、日々の業務をちょっとだけ軽くしているのですが、このサービスの特性上、ボードに好きなようにピンでメモを止めるように、ボード上にウィジェットというメモなどを配置させるので、整理しないと画面上がウィジェットだらけになってしまいます。

対策として、ワークスペース(ボード)をポケモンボックスのように名前をつけて切り替えて、関連するウィジェットを貼り付けて整理することができます。
僕は仕事上、コマンドやURLなどをたくさん管理していて、「あれってどこにいったっけ?」と管理している場所がわからなくなることが多く、煩わしさを覚えていました。
また、お目当ての情報がどこに管理されているのかを知っていても、いちいちそのワークスペースに切り替えなければならず、それも面倒だなと感じるようになってきました。
これらを解消するために、最近注目していたWebブラウザ環境でも動くローカルLLMの仕組みと、RAG(Retrieval-Augmented Generation(検索拡張生成))という、曖昧検索のパワーアップ版のような仕組みを利用して、「〇〇って何だっけ?」「〇〇のURL出してくれる?」「〇〇のコマンドを出しておいて」とAIに雑に指示を出して、必要な結果だけ確認できればよくないか?
と、フワッと思い始めたのがきっかけでした。
できること
こちらにデモ動画を用意しました。
1. データを記憶させる
あらかじめ、今後必要になりそうな情報を、雑に流し込みます。
流し込んだものを、そのままSolacepaceのウィジェットと同様に画面上に表示させておくことも可能です。
2. AIエージェントに記憶を検索させる
AIエージェントを稼働させ、AIに「〇〇って何だっけ?」のように雑に質問します。
すると、AIはRAGを使ってユーザーの質問と関連度の近しい記憶をかき集めてきて、回答を生成します。
なお、AIエージェントは、キャラクターとしての性格・役割を自由に設定可能です。

記憶に関係する質問だけでなく、通常のLLMと同様に日常的な会話も行うことができます。
会話のラリーも直近の会話以外は長期記憶としてRAGで扱えるような形に変形して自動的に管理されます。
LLMのモデルも以下のように2種類選べるようにしました。

日本語の質の高いモデルを選んでいますが、GeminiやChatGPTのようなクオリティまでいかないのと、ちょっとおかしな日本語の時もありますが、お遊び&ちょっとしたツールとして使う分には十分かなと感じています。
3. Youtube再生とポモドーロタイマー
Solacepaceでも実装していましたが、こちらでも同じ使い勝手で使えるようにしました。


Youtube再生は自動リピートで、一度URLを入れたら記憶されます。
4. 完全ローカル完結
ChatGPT、Gemini、Grokなどの巨大企業が提供するLLMを利用するにはAPIと呼ばれる外部サーバーへの通信(回答のリクエスト)が必要になります。
便利で高品質な反面、APIリクエストコスト(金銭的な課題)、外部サーバーへの情報送信(情報漏洩の課題)、外部サービス依存による問題(モデルやAPI制約の突然の変更の可能性)など様々な課題とトレードオフな状態にあります。
SOLIDでは、ローカルLMMと呼ばれる、自分のPCやスマホなどのデバイス上にインストールして使えるAIモデルを採用しました。
これにより上記した課題はだいたい解決することができます。(クオリティはそれなりですが)
ストレージについても、外部サーバーに頼らず(お金がかかるのとサーバー負荷が半端ない)、
ブラウザ標準のOPFS(Origin Private File System)、IndexedDBをフルに活用しています。
5. 長期記憶に特化
SOLIDは、長期記憶に耐える必要がありましたので、これを対策するために冒頭でも紹介したRAGという技術(考え方)を採用しました。
以前、僕はキャラチャットサービスを作っていたのですが、この時は会話の長期記憶を圧縮させて要約させたものを作って、GeminiなどにAPIリクエストしていました。
圧縮するため、細かい情報や重要ではないと判断された情報はどんどん欠落してしまう問題がありました。
RAGを使うことで、ユーザーの質問内容をもとに、これまで投稿された記憶、ユーザーとの会話などを管理しているデータベースを検索しにいき、関連度の近いものをピックアップし、その情報をもとにAIは回答を生成するので、かなり古い情報や、細かな情報でも欠落しにくい作りとしました。
日本語に特化した軽量のEmbedding Model(自然言語処理を行うAIの一種のようなもの)を採用しており、可能な限りの軽さと精度を両立させてみました。
今後の発展
作ったばかりなので、まだ何も考えていないというのが正直なところですが、日本語に強いLLMが出たら取り入れて最適化していきたいですね。
これから仕事で使っていく予定なので、気になったものや不具合があればちょこちょこアップデートしていこうかなと思っています。
SOLIDは超実験的に作ったアプリで、この技術を利用して、最終的には基本お金のかからない、完全ローカル完結キャラチャットサービスを作りたいなと考えています!
とりあえず使ってみる
SOLIDは個人的に利用しようと思っていましたが、一般公開しました。
全ての機能を無料&無制限で利用できます。
興味がありましたら、お試しください!
追記
ドメインのWhois設定に不備があり、年末年始にかけてSOLIDが読み込めない事象が発生していましたが、1/3解消しています(しているはずです)
