【Ollama】Ollama + Open WebUIでRAG機能を有効化する手順と「No embedding model found」エラーの解決法

問題の概要:RAG機能が有効にならない「No embedding model found」エラー

OllamaとOpen WebUIを組み合わせて、Retrieval-Augmented Generation (RAG) 機能を利用しようとすると、以下のようなエラーに遭遇することがあります。

Error: No embedding model found. Please pull an embedding model like 'nomic-embed-text' first.

このエラーは、Open WebUIの「RAG」タブでドキュメントをアップロードしようとした時や、チャットで「Web検索/ファイル」オプションを有効にした際に発生します。RAG機能のコアである「埋め込みモデル(Embedding Model)」が適切に設定・読み込まれていない状態です。これにより、アップロードしたPDFやテキストファイルの内容をベクトル化して検索可能な知識ベースとして利用することができません。

原因の解説:なぜ埋め込みモデルが必要なのか?

RAGシステムは、大まかに以下の3ステップで動作します。

  1. インデキシング: ドキュメントを埋め込みモデルでベクトル(数値のリスト)に変換し、ベクトルデータベースに保存します。
  2. 検索(Retrieval): ユーザーの質問を同じ埋め込みモデルでベクトル化し、データベースから類似する文書チャンクを検索します。
  3. 生成(Generation): 検索した文書をコンテキストとしてLLMに与え、質問に答えます。

「No embedding model found」エラーは、この最初のステップを実行するための埋め込みモデルがOllamaにインストールされていない、またはOpen WebUIがそのモデルを認識できていないことが原因です。Open WebUIはデフォルトで特定の埋め込みモデル(例: `nomic-embed-text`)を探しにいきますが、それが存在しないためエラーが発生します。

解決方法:ステップバイステップでのRAG機能有効化

以下の手順で、Ollama環境に埋め込みモデルを導入し、Open WebUIでRAG機能を完全に有効化します。

ステップ1: 埋め込みモデルのインストール

まず、Ollamaで埋め込みモデルをプル(ダウンロード)します。現在、Ollama公式ライブラリでサポートされている代表的な埋め込みモデルは `nomic-embed-text` です。ターミナルで以下のコマンドを実行してください。

ollama pull nomic-embed-text

ダウンロードが完了すると、ollama list コマンドでモデルがリストに表示されることを確認できます。

$ ollama list
NAME                    ID              SIZE      MODIFIED
nomic-embed-text:latest  e5a00b6a1a0a    74 MB     2 minutes ago
llama3.2:latest          a9a1e7b21234    4.1 GB    1 week ago

ステップ2: Open WebUIの環境変数設定

Open WebUI(Dockerコンテナで実行している場合が一般的)に、使用する埋め込みモデル名を伝える必要があります。最も確実な方法は、Docker Composeのdocker-compose.ymlファイルを編集することです。

既存のdocker-compose.ymlに、OLLAMA_EMBEDDINGS_MODEL環境変数を追加します。

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がホストマシンにある場合
      - OLLAMA_EMBEDDINGS_MODEL=nomic-embed-text # この行を追加!
    restart: always

volumes:
  open-webui:

ポイント: OLLAMA_BASE_URLの設定も確認してください。Dockerコンテナ内からホストのOllamaに接続するためにはhttp://host.docker.internal:11434が一般的です(Linux環境ではhttp://172.17.0.1:11434などに変更が必要な場合があります)。

設定を変更したら、コンテナを再起動します。

docker-compose down
docker-compose up -d

ステップ3: Open WebUI内での設定確認

ブラウザでOpen WebUI (通常は http://localhost:3000) にアクセスし、設定を確認します。

  1. 画面左下の「設定(歯車アイコン)」をクリック。
  2. 「一般設定」タブを選択。
  3. 「Embedding Model」の項目にnomic-embed-textが選択されていることを確認します。ここで手動で選択することも可能です。

Open WebUI設定画面 (※注: イメージ図の説明。実際の画面をキャプチャしてください)

ステップ4: RAG機能の動作テスト

設定が完了したら、実際にRAG機能をテストします。

  1. Open WebUIのチャット画面を開きます。
  2. 画面右上の「Web検索/ファイル」トグルスイッチをオンにします。
  3. トグルスイッチの横にある「ファイルのアップロード」アイコンをクリックし、テスト用のテキストファイルやPDFをアップロードします。
  4. ファイルが「処理済み」と表示されたら、そのファイルの内容について質問をしてみましょう。

例えば、「アップロードした文書の要約を書いてください」や、「文書の中で『AI』という単語はどのような文脈で使われていますか?」などの質問が可能です。LLMが文書の内容を参照して回答を生成すれば、RAG機能は正常に動作しています。

コード例・コマンド例:トラブルシューティングと高度な設定

エラーケース1: 環境変数が反映されない

Docker Composeを使わずにdocker runで直接起動している場合は、コマンドラインで環境変数を設定します。

docker run -d 
  -p 3000:8080 
  -v open-webui:/app/backend/data 
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 
  -e OLLAMA_EMBEDDINGS_MODEL=nomic-embed-text  # 環境変数を設定
  --name open-webui 
  ghcr.io/open-webui/open-webui:main

エラーケース2: 異なる埋め込みモデルを使用したい場合

Ollamaがサポートする他のモデル(例えば、多言語対応の`bge-m3`など、今後追加されるモデル)や、自分でModelfileを作成したカスタム埋め込みモデルを使用したい場合があります。その場合は、まずそのモデルをプルし、環境変数を変更します。

# カスタム埋め込みモデルの作成例 (Modelfile)
# FROM nomic-embed-text:latest
# # 必要に応じてパラメータ調整
# PARAMETER temperature 0

# モデルの作成
ollama create my-embed -f ./Modelfile

# Open WebUIの環境変数を変更
# docker-compose.yml 内の OLLAMA_EMBEDDINGS_MODEL を以下に変更
# OLLAMA_EMBEDDINGS_MODEL=my-embed

Open WebUI APIを直接叩く例(デバッグ用)

問題が解決しない場合、Open WebUIのバックエンドAPIが埋め込みモデルを認識しているか確認できます。

# Open WebUIコンテナ内で実行する場合
curl http://localhost:8080/api/config

# レスポンスのJSONに以下のような`embedding_model`の項目があるか確認
# {
#   "ollama_api_url": "http://host.docker.internal:11434",
#   "embedding_model": "nomic-embed-text",
#   ...
# }

まとめ・補足情報

OllamaとOpen WebUIでRAG機能を有効化するには、「埋め込みモデルのインストール」「Open WebUIへのモデル名の伝達(環境変数設定)」の2点が必須です。これにより、ローカル環境で完全にプライベートな、文書を理解するチャットボットを構築する強力な基盤が手に入ります。

補足情報:

  • パフォーマンス: 埋め込みモデル`nomic-embed-text`は軽量ですが、大規模なドキュメントを一度に処理すると時間がかかることがあります。ドキュメントは適切なサイズ(数ページ〜数十ページ)に分割してアップロードすることをお勧めします。
  • 次のステップ: RAGの精度を高めるには、Open WebUIの「ワークスペース」機能を使って特定のドキュメントセットに特化した知識ベースを作成したり、チャンクサイズやオーバーラップなどのパラメータを調整する方法を学ぶと良いでしょう。
  • 代替ソリューション: より高度なRAGシステムが必要な場合は、LangChainやLlamaIndexなどのフレームワークと、ChromaDBやQdrantなどの専用ベクトルデータベースをOllamaと組み合わせるアーキテクチャも検討してください。

この手順に従うことで、「No embedding model found」エラーは解消され、Open WebUIの強力なRAG機能をフルに活用できるようになるはずです。ローカルLLMと自身のデータを組み合わせた、パーソナルAIアシスタントの構築を楽しんでください。

この記事は役に立ちましたか?