引言#
情報検索と生成 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 をデプロイします。
- Qwen2.5 シリーズモデルを効率的にスケジュールするために Ollama を構成します。
- Ollama で構成された
bge-m3
という名前の埋め込みモデルを使用して、検索ベクトル化処理を実現します。
Open WebUI のデプロイ#
Open WebUI は、ユーザーが多くの依存関係を手動で構成する必要なく、Docker を介して Web インターフェースを直接起動できるシンプルな Docker 化ソリューションを提供します。
まず、サーバーにDockerがインストールされていることを確認してください。インストールされていない場合は、以下のコマンドで迅速にインストールできます:
curl https://get.docker.com | sh
次に、Open WebUI のデータを保存するためのディレクトリを作成します。これにより、プロジェクトの更新後にデータが失われることはありません:
sudo mkdir -p /DATA/open-webui
次に、以下のコマンドを使用して Open WebUI を起動できます:
docker run -d -p 3000:8080 \
--add-host=host.docker.internal:host-gateway \
-v /DATA/open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main
Nvidia GPU をサポートする Open WebUI を実行したい場合は、以下のコマンドを使用できます:
docker run -d -p 3000:8080 \
--gpus all \
--add-host=host.docker.internal:host-gateway \
-v /DATA/open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:cuda
ここでは、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 serve
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 pull 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 モデルの使用をお勧めします。以下のコマンドでダウンロードできます:
ollama pull qwen2.5:14b
または
ollama pull qwen2.5:7b
Open WebUI と Ollama サービスを同時に起動している場合は、管理者パネルからモデルをダウンロードすることもできます。
bge-m3 モデルのダウンロード#
Ollama でbge-m3
モデルをダウンロードします。このモデルは文書ベクトル化処理に使用されます。コマンドラインで以下のコマンドを実行してモデルをダウンロードします(または Open WebUI インターフェースからダウンロードします):
ollama pull bge-m3:latest
これで、Ollama の設定が完了しました。次に、Open WebUI で RAG サービスを設定します。
RAG の統合と設定#
Open WebUI で Ollama の RAG インターフェースを設定#
Open WebUI 管理インターフェースにアクセス#
Open WebUI を起動した後、Web ブラウザを介してサービスアドレスに直接アクセスし、管理者アカウントでログインして管理者パネルに入ります。
Ollama インターフェースの設定#
Open WebUI の管理者パネルで、設定をクリックします。外部接続のオプションが表示されるので、Ollama API のアドレスがhost.docker.internal:11434
であることを確認し、右側の接続を確認ボタンをクリックして 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
ファイルをアップロードしました。内容は以下の通りです:
# 奇幻森林の冒険
## 引言
遠い王国の境界に、神秘的な奇幻森林があります。そこには多くの奇妙な生物と古代の魔法が棲んでいると言われています。入る勇気のある者は少なく、入った者は二度と戻ってこないと言われています。物語の主人公は若き冒険者、エイヴンです。
## 第一章:エイヴンの決意
エイヴンは冒険と探検を愛する若者で、幼い頃から奇幻森林に関する多くの物語を聞いてきました。家族や友人は彼に行くなと勧めましたが、彼は自分がこの森林の秘密を明らかにする運命にあると固く信じていました。ある朝、彼は荷物を整え、勇気と好奇心を持って森林に向かいました。
### 1.1 出発前の準備
出発前に、エイヴンは町で最も有名な図書館に行き、奇幻森林に関する資料を調べました。彼は、古い手稿に森林に入るルートと、いくつかの危険な生物を避ける方法が記録されていることを発見しました。エイヴンはこの手稿を自分のノートにコピーし、必要なときに参考にすることにしました。
### 1.2 初めての横断
エイヴンが森林に入ると、外界とはまったく異なる空気を感じました。空気には濃厚な花の香りが漂い、奇妙な音がかすかに聞こえました。森林の初日、エイヴンは特に危険に遭遇しませんでしたが、何かが暗闇から彼を見守っていることを感じました。
## 第二章:神秘的な生物
翌日、エイヴンは森林の奥深くに進みました。しかし、あまり遠くに行かないうちに、彼は奇妙な生物に出会いました。それは光を放つ小さな鹿で、全身が柔らかな青い光を放っていました。最初、エイヴンは驚きと恐怖を感じましたが、この小鹿は彼を攻撃する意図はなく、彼を隠れた洞窟へと導きました。
### 2.1 洞窟の秘密
洞窟の中で、エイヴンは古い石板を見つけました。石板には奇妙な記号が刻まれていました。小鹿はこれらの記号の意味を知っているようで、エイヴンを一歩一歩解読に導きました。実は、これらの記号は強力な魔法を記録しており、彼が森林の中で失われた宝物を見つける手助けをするものでした。
### 2.2 助けを得る
エイヴンは小鹿の助けを受け入れ、これらの記号の秘密を解き明かすことに決めました。彼らは洞窟の中で数日を過ごし、エイヴンは森林の資源を利用して薬や武器を作る方法を学びました。これにより、彼の森林での生存能力は大幅に向上しました。
## 第三章:最終試練
小鹿の導きにより、エイヴンはついに森林の奥深くに到達しました。そこには古代の祭壇があり、最も勇敢な冒険者だけが祭壇の試練を通過し、最終的な宝物を得ることができると言われています。
### 3.1 恐怖に立ち向かう
祭壇の周りにはさまざまな罠や幻覚が散りばめられていました。エイヴンはこれらの障害を乗り越えるために、自分の内なる恐怖に立ち向かわなければなりませんでした。最終的に、彼は知恵と勇気を使ってすべてを克服し、祭壇に入る資格を得ました。
### 3.2 宝物の発見
祭壇の中心で、エイヴンは光り輝く宝石を見つけました。この宝石は運命を変える力を持っていると言われています。エイヴンは宝石を手に取り、その中の強大な力を感じました。彼は、これは単なる宝物ではなく、奇幻森林の秘密を解く鍵である可能性があることを理解しました。
## 結論
エイヴンは奇幻森林の一部の秘密を明らかにし、伝説の英雄となりました。彼の冒険の物語は、さらに多くの若い冒険者を鼓舞し、勇気と知恵を持って未知の世界を探索する旅に出るように促しました。
その後、次の 3 つの質問をしました:
- エイヴンが森林で出会った奇妙な生物は何ですか?
- エイヴンが洞窟で見つけた古い石板には何が刻まれていましたか?
- エイヴンが祭壇の中心で見つけた宝物は何ですか?
下の画像は回答結果です:
まとめ#
Open WebUI と Ollama を活用することで、高効率で直感的なローカル RAG システムを簡単に構築できます。bge-m3
意味ベクトルモデルをテキストベクトル化に使用し、Qwen2.5 生成モデルと組み合わせることで、ユーザーは統一された Web インターフェースで文書検索と強化生成タスクの効率的なインタラクションを行うことができます。データプライバシーを保護するだけでなく、生成 AI のローカルアプリケーション能力を大幅に向上させます。