🕌

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:対話インターフェース
  • Ollamallama3 などのモデルを動作させる
  • 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

2. .env ファイルを作成

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の登録

以下でKnowledge Baseを登録します。

  • Open WebUI Documentation
  • Assistance

Knowledge Baseの登録

docs-main/docsを登録します。

Knowledge Baseの登録

登録されたデータが画面右に表示されます。

Knowledge Baseの登録

Knowledge Baseに対応するModelを登録します。

Modelの登録

  • Model名
    Open WebUI
  • Model ID
    open-webui
  • Base Model
    使用したいLLMを指定
  • Knowledge Base
    Open WebUI Documentation

Modelの登録

Modelの登録

登録したModelを選択します。
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 to docker/updating.md: Use docker pull and restart the container."

回答にevidenceとして参照先が示されていることがわかります。

LLMを使用


日本語に対応した設定を行い、日本語の文書を登録

Tutorialに従ってOpen WebUIのRAGを設定しました。
ですが、私たちが日常生活で使用しているのは日本語です。
そこで、RAGで日本語を使用するための設定を行います。

Settings > Admin Settings > Documents と辿ります。

  • Embedding Model に以下を設定してダウンロードアイコンをクリックすると、Open WebUIEmbedding Modelをダウンロードします。
    sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
  • Hybrid Searchoffになっていたらonにします。
    True
  • Reranking Model に以下を設定します。
    hotchpotch/japanese-reranker-xsmall-v2

Settings > Admin Settings > Documents

私は fair-communications.net というサイトを運営しているので、そのコンテンツをRAGに投稿します。

同様にKnowledge Baseを登録します。
Knowledge Baseの登録

同様にKnowledgeを登録します。
Knowledgeの登録

同様にModelを登録します。
Modelの登録

LLMを使用


まとめ

本記事では、OllamaとOpen WebUIを組み合わせてローカルで完結するRAG環境を構築する手順を紹介しました。

商用APIに依存せず、手元のPCで自由に情報検索・質問応答ができるのは非常に強力です。ぜひあなたのプロジェクトにも取り入れてみてください。


リンク・参考資料

以上です。
最後までお読み頂き、ありがとうございました!

Discussion