Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】How I Built a Private, Multi-User “Chat with Your Documents” App That Runs 100% Offline

2025年10月01日に「Dev.to」が公開したITニュース「How I Built a Private, Multi-User “Chat with Your Documents” App That Runs 100% Offline」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

完全にオフラインで動作する、複数ユーザー対応のAI文書チャットアプリを開発。データが外部に出ず、高いプライバシーを確保した。FlaskやLangChain、Ollamaなどのオープンソース技術を使い、ローカル環境で機密文書の質問応答を実現している。

ITニュース解説

この解説は、プライベートな環境で複数の人が自分のドキュメントと会話できるAIアプリケーションを、完全にオフラインで動作させる方法について理解を深めるものだ。近年、AI技術の発展は目覚ましいが、多くの便利なAIツールはユーザーのデータを外部のサーバーに送信する必要がある。これにより、企業の機密情報や個人のプライベートな記録を扱う際に、データプライバシーの懸念が生じるという課題があった。このアプリケーションは、その課題を解決し、ユーザーが自身のデータを完全に管理しながらAIの恩恵を受けられるように設計されている。

このプロジェクトの核心的な目標は複数ある。第一に、全てのデータ処理をユーザー自身のコンピューター内で完結させる「100%ローカル処理」を実現することだ。これにより、会社の戦略文書や個人の財務記録など、いかなる情報も外部のサーバーに送信されることなく処理されるため、データ流出のリスクがなくなる。第二に、「チームや家族」での利用を想定し、複数のユーザーがそれぞれ独立した知識ベースを持ち、管理者がユーザー全体を一元的に管理できる機能を提供すること。第三に、効率的で賢いシステムであること。具体的には、ドキュメントが新しく追加されたり、内容が変更されたりした場合のみ、必要な部分だけをAIが処理し直すことで、時間とコンピューターのリソースを節約する仕組みを取り入れている。そして最後に、導入が非常に簡単なこと。複雑な設定作業を必要とせず、単一の実行ファイルと簡単なインストールスクリプトで誰でもすぐに使えるように設計された。

このアプリケーションは、多くの優れたオープンソース技術を組み合わせて構築されている。ウェブサーバーとして機能する「Flask(フラスク)」は、軽量で柔軟なバックエンドを提供し、複数のユーザーが同時にアクセスしてもスムーズに動作するよう、「Gunicorn(ユニコーン)」がその性能を向上させている。AIの核となる部分は、「Ollama(オラマ)」というツールが担当する。これは、Llama 3やGemmaのようなオープンソースの「大規模言語モデル(LLM)」や、言葉や文章の意味を数値データ(ベクトル)に変換する「埋め込みモデル」を、ユーザーのコンピューター上で実行する役割を持つ。ドキュメントの情報をAIが検索しやすい形(ベクトル)で保存する場所には、「ChromaDB(クロマディービー)」という、データが永続的にディスクに保存されるベクトルデータベースが使われる。そして、これらの各コンポーネントをうまく連携させ、ドキュメントの読み込みから質問への回答まで、AIによる情報処理全体の流れを管理するのが「LangChain(ラングチェーン)」というフレームワークだ。ユーザーのログインや権限管理には、シンプルなデータベースである「SQLite(エスキュライト)」と、安全なセッション管理のための「PyJWT(パイジェイダブリューティー)」を使った独自の認証システムが導入されている。

このアプリケーションを動かすために必要なコンピューターの性能は、利用目的や規模に応じて柔軟に対応できる。最も重要なのは、AIモデルをコンピューターのメモリ(RAM)に読み込むための容量だ。例えば、8〜16GBのRAMを搭載した一般的なノートパソコンでも、小型で効率的な「gemma3:4b」のようなモデルを使えば、ほとんどのドキュメント質問応答タスクで十分な結果が得られる。24GBのRAMを持つコンピューターでは、より高品質な回答が期待できる中型モデル「gemma3:12b」を非常にスムーズに実行できる。さらに、オフィスで複数のチームメンバーが利用する場合、NVIDIA A6000のような高性能なGPU(グラフィック処理装置)を搭載したサーバーに導入すれば、「gemma3:27b」のような大規模モデルでも、チーム全体で問題なく利用できる。このように、このアプリケーションは個人利用のノートパソコンから、チーム向けの専用サーバーまで、幅広い環境で利用できるように設計されている。

システムの内部は、主に三つのPythonコンポーネントで構成されている。ウェブサーバーとしての「main_app.py」、ユーザーの認証と権限管理を行う「auth.py」、そしてAIによるドキュメント処理の核となる「local_rag_chroma.py」だ。

特に重要な「local_rag_chroma.py」は、ドキュメントの管理とAIによる情報検索に関する全ての処理を担う。ここには「KnowledgeBaseManager」というクラスがあり、ドキュメントの読み込みから、AIが理解できる形への変換、そして保存まで、一連の処理全体を管理する。このシステムは、非常に効率的なドキュメント同期機能を備えており、コンピューターのディスク上のファイルの状態と、データベースに記録されたファイルのメタデータ(作成日時や最終更新日時など)を比較する。これにより、新しく追加されたファイル、内容が変更されたために更新が必要なファイル、または削除されたファイルを正確に識別し、必要な部分だけを処理し直すことで、システムの起動時や再同期の際にかかる時間を大幅に短縮できる。ドキュメントの読み込みでは、PDFファイルやWord文書、テキストファイルなど様々なファイル形式に対応し、それぞれ適切なツールを使って内容を抽出する。抽出されたドキュメントは、そのままでは長すぎるため、「RecursiveCharacterTextSplitter」という技術を用いて、AIが処理しやすいように適切なサイズの小さな塊(チャンク)に分割される。これらのチャンクは、Ollamaを通じてローカルで動作する埋め込みモデルによって、AIが意味を理解できる数値の並び(ベクトル)に変換される。そして、このベクトル化されたデータは、ChromaDBに保存され、後でユーザーから質問があった際に、関連する情報を素早く検索できるようにする。チームや個人ごとにデータが混ざらないよう、それぞれ独立したデータベースコレクションが作成され、情報が適切に分離されて管理される。

次に、「auth.py」が担当するマルチユーザーシステムは、アプリケーションのセキュリティと使いやすさを保証する。このシステムは、シンプルなSQLiteデータベースを使って、ユーザー情報、セッション情報、そしてアプリケーションの利用状況の記録などを管理する。ユーザーのパスワードは、そのままの形で保存されることはなく、「ソルト化」と「ハッシュ化」という技術によって安全に変換されてからデータベースに記録されるため、万が一データベースが不正にアクセスされたとしても、パスワードが漏洩するリスクが低減される。ユーザーがログインすると、システムは「JSON Web Token(JWT)」と呼ばれる一時的な「通行手形」を発行し、その後のAPIリクエスト(アプリケーションへの要求)にはこのJWTを使って認証を行う。また、特定のAPI機能へのアクセスを制限するために、「デコレーター」という仕組みが使われる。例えば、管理者だけがアクセスできる機能には、その権限を持つユーザーだけが利用できるようにアクセス制限がかけられる。これにより、アプリケーションが成長して新しい機能が追加されても、簡単にセキュリティを確保できる。

最後に、「main_app.py」は、これらの全てを連携させるウェブサーバーとしての役割を果たす。このFlaskアプリケーションは、ユーザーインターフェース(ユーザーが操作する画面)からのリクエストを受け付けるAPIエンドポイントを多数定義する。中でも最も重要なのが「/api/ask」というエンドポイントで、ユーザーが入力した質問を受け付け、RAGシステムを通じて回答を生成する。このアプリケーションは、各ユーザーのセッションと選択された知識ベースごとに、別々のAI処理チェーンと会話履歴を保持する仕組みを持っている。これにより、複数のユーザーが同時に利用しても、それぞれの会話が混ざり合うことなく、独立して管理されるため、メモリの無駄遣いを防ぎ、スムーズな利用体験を提供する。

最終的に、このアプリケーションは、あらゆる種類のドキュメントコレクションを、ユーザー専用の対話型AIアシスタントに変える、強力で実用的なツールとなる。中小企業にとっては、高価なクラウドサービスに頼ることなく、チーム内で安全な知識ベースを構築できる。開発者やフリーランサーは、自身のプロジェクトやクライアントの仕事のために、強力でプライベートなRAGシステムを基盤として利用できる。そして個人ユーザーや家族は、財務記録から研究論文まで、機密性の高い自分のファイルを安全に整理し、それらについてAIに質問できる。これは、現代のAIの力を最大限に活用しながらも、ユーザー自身がデータの制御権を完全に保持するという、まさに両方の良い部分を組み合わせた解決策を提供している。

関連コンテンツ

関連IT用語

関連ITニュース