引言#
情報検索と生成型 AI アプリケーションを構築する際、Retrieval-Augmented Generation (RAG) モデルは、知識ベースから関連情報を検索し、正確な回答を生成する強力な能力により、ますます多くの開発者に支持されています。しかし、エンドツーエンドのローカル RAG サービスを実現するには、適切なモデルだけでなく、強力なユーザーインターフェースと効率的な推論フレームワークの統合も必要です。
ローカル RAG サービスを構築する際、デプロイが容易な Docker 方式を利用することで、モデル管理とサービス統合を大幅に簡素化できます。ここでは、Open WebUI が提供するユーザーインターフェースとモデル推論サービスに依存し、Ollama を通じてbge-m3
埋め込みモデルを導入し、文書ベクトル化による検索機能を実現し、Qwen2.5 がより正確な回答生成を行えるようにします。
本記事では、Docker を使用して Open WebUI を迅速に起動し、Ollama の RAG 機能を同期させ、Qwen2.5 モデルと組み合わせて効率的な文書検索と生成システムを実現する方法について説明します。
プロジェクト概要#
このプロジェクトでは、以下の主要ツールを使用します:
- Open WebUI : ユーザーとモデルが対話するための Web インターフェースを提供します。
- Ollama : 埋め込みと大規模言語モデルのモデル推論タスクを管理します。Ollama の
bge-m3
モデルは文書検索に使用され、Qwen2.5 は回答生成を担当します。 - Qwen2.5 : モデル部分はアリババが提供する Qwen 2.5 シリーズを使用し、検索強化生成サービスに自然言語生成を提供します。
RAG サービスを実現するために、以下のステップが必要です:
- ユーザーインターフェースとして Open WebUI をデプロイします。
- Ollama を設定して Qwen2.5 シリーズモデルを効率的にスケジュールします。
- Ollama が設定した
bge-m3
という埋め込みモデルを使用して検索ベクトル化処理を実現します。
Open WebUI のデプロイ#
Open WebUI はシンプルな Docker 化ソリューションを提供しており、ユーザーは多くの依存関係を手動で設定する必要なく、直接 Docker を通じて Web インターフェースを起動できます。
まず、サーバーにDockerがインストールされていることを確認してください。未インストールの場合は、以下のコマンドで迅速にインストールできます:
次に、Open WebUI のデータを保存するためのディレクトリを作成します。これにより、プロジェクトの更新後にデータが失われることはありません:
次に、以下のコマンドを使用して Open WebUI を起動できます:
Nvidia GPU をサポートする Open WebUI を実行したい場合は、以下のコマンドを使用できます:
ここでは、Open WebUI のサービスをマシンの 3000 ポートに公開しています。ブラウザを通じてhttp://localhost:3000
にアクセスすることで使用できます(リモートアクセスの場合はパブリック IP を使用し、3000 ポートを開放してください)。/DATA/open-webui はデータストレージディレクトリであり、必要に応じてこのパスを調整できます。
もちろん、Docker インストール方式の他にも、pip、ソースコードのコンパイル、Podman などの方法で Open WebUI をインストールすることもできます。その他のインストール方法については、Open WebUI 公式ドキュメントを参照してください。
基本設定#
- 登録するアカウント情報を入力し、強力なパスワードを設定してください!!!
Important
最初に登録したユーザーは自動的にシステム管理者に設定されるため、必ず最初の登録者であることを確認してください。
- 左下のアバターをクリックし、管理者パネルを選択します。
- パネル内の設定をクリックします。
- 新しいユーザーの登録を許可しないように設定します(オプション)。
- 右下の保存をクリックします。
Ollama と Qwen2.5 の設定#
Ollama のデプロイ#
ローカルサーバーに Ollama をインストールします。現在、Ollama はさまざまなインストール方法を提供しており、Ollama の公式ドキュメントを参照して最新の0.3.11
バージョンをインストールしてください(Qwen2.5 はこのバージョンからサポートされています)。インストールの詳細については、私が以前書いた記事:Ollama:入門から上級までを参照してください。
Ollama サービスを起動します(Docker 方式で起動する場合は必要ありませんが、11434 ポートを公開する必要があります):
Ollama サービスが起動した後、http://localhost:11434
にアクセスすることで Ollama サービスに接続できます。
Ollama Libraryは、意味ベクトルモデル(bge-m3
)やさまざまなテキスト生成モデル(Qwen2.5 を含む)を提供しています。次に、文書検索と質問応答生成のニーズに合わせて Ollama を設定します。
Qwen2.5 モデルのダウンロード#
Ollama を通じて Qwen2.5 をインストールします。コマンドラインでollama pull
コマンドを実行して Qwen2.5 モデルをダウンロードできます。たとえば、Qwen2.5 の 72B モデルをダウンロードする場合、以下のコマンドを使用します:
このコマンドは Ollama のモデルリポジトリから Qwen2.5 モデルを取得し、実行環境を準備します。
Qwen2.5 は 72B、32B、14B、7B、3B、1.5B、0.5B など、さまざまなモデルサイズを提供しており、ニーズや GPU メモリのサイズに応じて適切なモデルを選択できます。私は 4x V100 のサーバーを使用しているため、直接 72B モデルを選択できます。出力速度が速く、わずかな性能損失を受け入れられる場合は、q4_0
量子化バージョンqwen2.5:72b-instruct-q4_0
を使用できます。出力速度が遅くても構わない場合は、qwen2.5:72b-instruct-q5_K_M
を使用できます。4x V100 のサーバーでは、q5_K_M
モデルのトークン生成が明らかに遅延しますが、Qwen2.5 の性能を試すためにq5_K_M
モデルを選択しました。
メモリが少ない個人用コンピュータには、14B または 7B モデルの使用をお勧めします。以下のコマンドでダウンロードできます:
または
Open WebUI と Ollama サービスを同時に起動している場合、管理者パネルからモデルをダウンロードすることもできます。
bge-m3 モデルのダウンロード#
Ollama でbge-m3
モデルをダウンロードします。このモデルは文書ベクトル化処理に使用されます。コマンドラインで以下のコマンドを実行してモデルをダウンロードします(または Open WebUI インターフェースからダウンロードします):
これで、Ollama の設定が完了しました。次に、Open WebUI で RAG サービスを設定します。
RAG の統合と設定#
Open WebUI で Ollama の RAG インターフェースを設定#
Open WebUI 管理インターフェースにアクセス#
Open WebUI を起動した後、Web ブラウザを通じてサービスアドレスに直接アクセスし、管理者アカウントでログインして管理者パネルに入ります。
Ollama インターフェースの設定#
Open WebUI の管理者パネルで、設定をクリックし、外部接続のオプションを確認します。Ollama API のアドレスがhost.docker.internal:11434
であることを確認し、右側のverify connectionボタンをクリックして Ollama サービスが正常に接続されているか確認します。
意味ベクトルモデルの設定#
Open WebUI の管理者パネルで、設定をクリックし、次に文書をクリックして、以下の手順を順に完了します:
- 意味ベクトルモデルエンジンを Ollama に設定します。
- 意味ベクトルモデルを
bge-m3:latest
に設定します。 - その他の設定はデフォルトのままにしておきます。ここでは、ファイルの最大アップロードサイズを 10MB、最大アップロード数を 3、Top K を 5、ブロックサイズとブロックオーバーラップをそれぞれ 1500 と 100 に設定し、PDF 画像処理を有効にしました。
- 右下の保存をクリックします。
RAG サービスのテスト#
これで、完全なローカル RAG システムが実現しました。Open WebUI のメインインターフェースで任意の自然言語の質問を入力し、対応する文書をアップロードすることができます。システムは意味ベクトルモデルを使用して文書をベクトル化し、Qwen2.5 モデルを使用して文書を検索し、回答を生成してユーザーに返します。
Open WebUI のユーザーチャットインターフェースで、検索したい文書をアップロードし、質問を入力して送信をクリックすると、Open WebUI は Ollama のbge-m3
モデルを呼び出して文書ベクトル化処理を行い、その後 Qwen2.5 モデルを呼び出して質問応答生成を行います。
ここでは、GPT が生成したテキストを含むシンプルなtxt
ファイルをアップロードしました。内容は以下の通りです:
その後、3 つの質問をしました:
- エイヴンが森で出会った奇妙な生物は何ですか?
- エイヴンが洞窟で見つけた古い石板には何が刻まれていましたか?
- エイヴンが祭壇の中心で見つけた宝物は何ですか?
下の画像は回答結果です:
まとめ#
Open WebUI と Ollama を利用することで、高効率で直感的なローカル RAG システムを簡単に構築できます。bge-m3
意味ベクトルモデルをテキストベクトル化に使用し、Qwen2.5 生成モデルと組み合わせることで、ユーザーは統一された Web インターフェースで文書検索と強化生成タスクの効率的なインタラクションを行うことができます。データプライバシーを保護するだけでなく、生成型 AI のローカルアプリケーション能力を大幅に向上させます。