1. 問題の概要:Open WebUIでRAG機能が有効化できない
OllamaとOpen WebUIを組み合わせて、ローカル環境でRAG(Retrieval-Augmented Generation)機能を利用しようとする際、以下のような問題に直面することがあります。
- Open WebUIの設定画面で「RAG」セクションがグレーアウトしており、有効化できない。
- ドキュメントをアップロードしても、チャットで参照されない。
- エラーメッセージとして
No embedding model found. Please configure an embedding model in the settings to enable RAG.が表示される。
この問題は、RAGのコア機能である「埋め込み(Embedding)」と「ベクトルデータベース」が正しく設定されていないために発生します。本記事では、このエラーを解決し、Open WebUIで完全に機能するRAGシステムを構築する手順を詳しく解説します。
2. 原因の解説:RAG機能に必要な3つの要素
Open WebUIでRAGを動作させるには、以下の3つのコンポーネントが連携する必要があります。
2.1 埋め込みモデル (Embedding Model)
アップロードしたドキュメント(PDF、TXTなど)の文章を、意味を理解した数値のベクトル(埋め込みベクトル)に変換するための専用モデルです。会話用のLLM(例: Llama 3.2, Mistral)とは別物です。このモデルが設定されていないと、ドキュメントをベクトル化できないため、RAG機能は利用できません。
2.2 ベクトルデータベース (Vector Database)
埋め込みモデルで生成されたベクトルを保存・検索するためのデータベースです。Open WebUIはデフォルトでChromaDBを使用しますが、設定によりLanceDBなどにも切り替え可能です。このデータベースが起動していない、または接続できない場合もRAGは機能しません。
2.3 大規模言語モデル (LLM)
ユーザーの質問と、ベクトルDBから検索された関連文脈を基に、最終的な回答を生成するモデルです。これはOllamaで普段プルして使用しているモデル(llama3.2, mistralなど)です。
エラーNo embedding model foundは、この3要素のうち、最初の「埋め込みモデル」が不足していることを示しています。
3. 解決方法:ステップバイステップでのRAG有効化手順
ここからは、Docker Composeを使用してOpen WebUIを実行している環境を想定して、完全な手順を説明します。
ステップ1: 埋め込みモデルのダウンロード
まず、Ollamaで埋め込み用のモデルをプル(ダウンロード)します。軽量で性能が良いnomic-embed-textまたはall-minilmが推奨されます。
# ターミナルでOllamaコマンドを実行
ollama pull nomic-embed-text
ダウンロードが成功したか確認します。
ollama list
出力にnomic-embed-textが表示されれば成功です。
ステップ2: Open WebUIの設定変更 (docker-compose.yml)
Open WebUIのDocker Composeファイルを編集し、起動時に埋め込みモデルを認識させる環境変数を追加します。
# docker-compose.ymlの例
version: '3.8'
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
ports:
- "3000:8080"
volumes:
- open-webui:/app/backend/data
environment:
- OLLAMA_BASE_URL=http://host.docker.internal:11434 # Ollamaへの接続
- WEBUI_SECRET_KEY=your_secret_key_here
# 以下の環境変数を追加
- OLLAMA_EMBEDDING_MODEL=nomic-embed-text # ステップ1でプルしたモデル名
extra_hosts:
- "host.docker.internal:host-gateway"
restart: always
volumes:
open-webui:
重要なポイント: OLLAMA_BASE_URLがhttp://host.docker.internal:11434のように、ホストマシンのOllamaを正しく指していることを確認してください。Dockerコンテナ内からlocalhostではホストのサービスにアクセスできません。
ステップ3: Open WebUIの再起動と設定確認
設定を反映させるために、Open WebUIコンテナを再起動します。
# docker-compose.ymlがあるディレクトリで実行
docker-compose down
docker-compose up -d
ブラウザでOpen WebUI(通常は http://localhost:3000)にアクセスし、設定を確認します。
- 画面左下の歯車アイコン(Settings)をクリック。
- 左メニューから「Models」を選択。
- 「Embedding Models」セクションに、
nomic-embed-textが「Connected」と表示されていることを確認。
これで、メイン画面の「RAG」セクションがアクティブになっているはずです。
ステップ4: RAG機能のテスト
実際にドキュメントをアップロードしてRAGが機能するかテストします。
- Open WebUIのチャット画面を開く。
- 画面右上の「Workspace」ドロップダウンメニューから「Document Collections」を選択。
- 「Create Collection」をクリックし、名前(例: my-first-rag)を入力。
- 作成したコレクションを選択し、「Upload Document」ボタンからテスト用のPDFやテキストファイルをアップロード。
- チャット画面に戻り、画面下部の「RAG」トグルスイッチをONにする。
- 「Collection」で先ほど作成したコレクション(my-first-rag)を選択。
- アップロードしたドキュメントの内容に関連する質問を入力し、回答が文脈を参照して生成されるかを確認。
4. よくあるエラーとその対処法
エラー1: 「Failed to connect to the embedding model」
原因: OLLAMA_BASE_URLの設定が間違っているか、Ollamaサービス自体が起動していない。
解決策:
# ホストマシンでOllamaが起動しているか確認
ollama serve
# 別のターミナルで
curl http://localhost:11434/api/tags
JSON形式でモデルリストが返ってくればOllamaは正常です。Docker ComposeのOLLAMA_BASE_URLを確認・修正してください。
エラー2: ドキュメントをアップロードしても検索されない
原因: チャット時のRAGトグルがOFFになっている、または別のコレクションが選択されている。
解決策: チャット画面でRAGをONにし、正しいドキュメントコレクションが選択されていることをダブルチェックします。また、質問がドキュメントの内容とある程度関連しているか確認します。
エラー3: パフォーマンスが遅い
原因:</strong 埋め込みモデルやLLMが重い、またはホストマシンのリソース(RAM, CPU)不足。
解決策: より軽量な埋め込みモデル(all-minilm)に切り替えてみます。
ollama pull all-minilm
その後、docker-compose.ymlのOLLAMA_EMBEDDING_MODELの値をall-minilmに変更し、再起動します。
5. まとめ・補足情報
OllamaとOpen WebUIでRAGを有効化するには、「埋め込みモデルの準備」「環境変数による設定」「ベクトルDBの自動起動」という3ステップが鍵となります。特にNo embedding model foundエラーは、設定の抜け漏れによって頻発するため、本記事の手順に沿って確認することをお勧めします。
補足情報:
- サポートされるファイル形式: Open WebUIのRAGは、PDF、TXT、DOCX、PPTX、Excel、Markdownなど幅広い形式をサポートしています。
- ChromaDBの永続化: デフォルトでは、アップロードしたドキュメントのベクトルデータはコンテナ内に保存されます。コンテナを削除すると失われるため、永続化するには
docker-compose.ymlのvolumes設定でChromaDBのデータディレクトリをホストにマウントすることを検討してください。 - より高度な設定: デフォルトのChromaDBではなく、LanceDBを使用したい場合は、Open WebUIの設定ファイル(
config.json)をカスタマイズする必要があります。詳細はOpen WebUIの公式ドキュメントを参照してください。
このセットアップが完了すれば、完全にローカル環境で動作する、プライバシーを保護した強力なRAGアシスタントを手に入れることができます。独自のマニュアルや資料を学習させ、効率的な情報検索ツールとして活用してみてください。