Ollama × Open WebUI でローカルRAG環境を構築する
はじめに
ローカル環境でLLM(大規模言語モデル)とRAG(Retrieval-Augmented Generation)を組み合わせて、柔軟な質問応答システムを構築したいと考えたことはありませんか?
本記事では、以下のOSSを組み合わせて、ローカルで動作するRAGシステムを構築する手順と活用例を紹介します。
- Ollama:ローカルで動作するLLMホスト
- Open WebUI:Ollamaを操作するためのWeb UI
- 任意の埋め込み・再ランキングモデルを使ったRAG構成
用語解説
-
Embedding
意味を数値に変換します。テキストを高次元のVector(数値の配列)に変換するプロセスです。このVectorは「意味的な特徴」を保持しており、似た意味のテキスト同士が近い距離になるように設計されています。ユーザの質問と、事前に用意したドキュメントを数値的に比較する際に使用されます。 -
Reranking
Embeddingで取得した「似ているドキュメント」を、より精密なモデルで再評価し、「本当に関連性が高い順に並び替える」プロセスです。Embeddingは高速だが粗いため、意味的に似ていても文脈的にズレた結果が混ざることがあるため、Rerankingで精度を補います。 -
次元数
Vectorの次元数はEmbeddingの要素数を指します。次元数はEmbedding Modelに依存します。次元数が変わるとVector Databaseのインデックスを再構築する必要があります。そのため、どのEmbeddingを採用するかは慎重に検討しなければなりません。 -
Embedding → ざっくり「それっぽい」チャンクを探す
-
Reranking → その中から「一番使える」情報を厳選
この2段階処理によって、ユーザの質問に対し、より正確で文脈に合った回答を生成できるようになります。デフォルトのOpen WebUIでは、Rerankingが設定されていません。そのため、2段階処理をonにし、Rerankingに使用するモデル(RAG_RERANKING_MODEL)を指定する必要があります。
補足
Open WebUIでは、設定情報の保存にSqLite3を使用しています。他のdockerで使用したイメージを他のcontainerで使おうとしても、設定が内部のSqLite3に保存されている設定が書き換わりません。そのため、手動で設定する必要があります。
目的
本記事では、以下を目標とします:
- ローカルで動作するRAG環境のDocker構成を用意する
- 任意のWebページやテキストファイルを対象に知識ベースを構築する
- Open WebUIから自然言語で質問し、回答を得る
システム構成
今回の構成は以下の通りです:
[Open WebUI] ⇄ [Ollama LLM API] ⇄ [RAG Pipeline]
↑
ローカルモデル
- Open WebUI:対話インターフェース
-
Ollama:
llama3
などのモデルを動作させる - RAG:指定したEmbedding/Rerankingモデルで知識検索
環境要件
- Docker / Docker Compose
- GPUがあると高速(ただしCPUでも動作可能)
- macOS, Windows WSL2, Linux いずれも可
セットアップ手順
1. リポジトリをクローン
✅ ソースコードと環境構築用の Docker 構成は以下で公開しています:
https://github.com/kondonator/ollama-open-webui-rag
git clone https://github.com/kondonator/ollama-open-webui-rag.git
cd ollama-open-webui-rag
.env
ファイルを作成
2. cp .env.example .env
3. Docker Compose 起動
docker compose up
-
localhost:3000
にアクセスすると Open WebUI にログイン可能です。 - 初回ログイン時に
WEBUI_SECRET_KEY
を使用します。
モデルのダウンロード(Ollama)
Ollama にあらかじめ LLM モデルをダウンロードしておきます。
ollama run llama3
🧠 他にも
mistral
,gemma
,phi3
などを使用可能。
RAGの使い方
チュートリアルに従って作業を実施
こちら にOpen WebUIのRAGのチュートリアルがあるので、それに従って作業を行います。
main.zip をダウンロードして展開します。
Workspace > Knowledge > + と辿り、Knowledge Baseを登録します。
以下でKnowledge Baseを登録します。
- Open WebUI Documentation
- Assistance
docs-main/docsを登録します。
登録されたデータが画面右に表示されます。
Knowledge Baseに対応するModelを登録します。
-
Model名
Open WebUI -
Model ID
open-webui -
Base Model
使用したいLLMを指定 -
Knowledge Base
Open WebUI Documentation
登録したModelを選択します。
Tutorialに以下の例が乗っているので、こちらに沿った形で質問をしてみます。
User: "How do I configure environment variables?"
System: "Refer to Section 3.2: Use the.env
file to manage configurations."
User: "How do I update Open WebUI using Docker?"
System: "Refer todocker/updating.md
: Usedocker pull
and restart the container."
回答にevidenceとして参照先が示されていることがわかります。
日本語に対応した設定を行い、日本語の文書を登録
Tutorialに従ってOpen WebUIのRAGを設定しました。
ですが、私たちが日常生活で使用しているのは日本語です。
そこで、RAGで日本語を使用するための設定を行います。
Settings > Admin Settings > Documents と辿ります。
-
Embedding Model に以下を設定してダウンロードアイコンをクリックすると、Open WebUIにEmbedding Modelをダウンロードします。
sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 -
Hybrid Searchがoffになっていたらonにします。
True -
Reranking Model に以下を設定します。
hotchpotch/japanese-reranker-xsmall-v2
私は fair-communications.net というサイトを運営しているので、そのコンテンツをRAGに投稿します。
同様にKnowledge Baseを登録します。
同様にKnowledgeを登録します。
同様にModelを登録します。
まとめ
本記事では、OllamaとOpen WebUIを組み合わせてローカルで完結するRAG環境を構築する手順を紹介しました。
商用APIに依存せず、手元のPCで自由に情報検索・質問応答ができるのは非常に強力です。ぜひあなたのプロジェクトにも取り入れてみてください。
リンク・参考資料
- 📘 GitHubリポジトリ:kondonator/ollama-open-webui-rag
- 🔗 Ollama公式
- 🔗 Open WebUI公式
- 🔗 Tutorial: Configuring RAG with Open WebUI Documentation
- 🧠 sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
- 🧠 hotchpotch/japanese-reranker-xsmall-v2
以上です。
最後までお読み頂き、ありがとうございました!
Discussion