SabaKore

VPSのローカルLLMに、自分の文書について質問する(RAG)

RAGは、長い文書を毎回モデルに全文読ませずに、文書の内容にもとづいて答えさせる仕組みです。 文書を細かく分けて、あらかじめ検索できる形にしておき、質問に関係する部分だけをモデルに渡します。 社内の規程やマニュアル、自分のメモに質問したいときに使えます。文書もモデルも自分のVPSの中に置くので、外に出しません。 ここでは、Open WebUIのチャット画面を入れてある前提で、文書を使えるようにするところまでを説明します。

1仕組みを知っておく

  1. 分ける:文書を、小さな塊(チャンク)に分けます。
  2. 数値にする(埋め込み):各チャンクを、意味を比べられる数値の列(ベクトル)にします。
  3. しまう:その数値を、検索用のデータベース(ベクトルDB)に入れます。
  4. 探して渡す:質問されたら、関係しそうなチャンクだけを取り出し、モデルに渡して答えさせます。

Open WebUIでは、最初からこの仕組みが入っています。標準の埋め込みの処理はサーバーのCPUで動き、 公式によると、1ワーカーあたり約500MBのメモリを使います。モデルのぶんに、このぶんが上乗せになります。

2文書を入れる

  • そのチャットだけで使う:チャットの入力欄に、ファイルをドラッグ&ドロップします。
  • 何度も使う文書:Workspace > Knowledge でナレッジベースを作り、文書を入れます。チャットの入力欄で # を入力すると、ナレッジベースを指定できます。Workspace > Models でモデルにひも付ければ、そのモデルは、いつでもその知識を使えます。

まず数件の文書で試してください。標準の設定のままで動きます。

3ローカルモデル向けの設定の目安

手元で動かす小さなモデルは、一度に読める長さ(コンテキスト)が短めです。公式は、8,000トークン以下のローカルモデル向けに、 次の設定を勧めています。場所は Settings > Admin > Documents です。

項目標準ローカルモデル向けの目安
Text Splittercharactertoken
Markdown Header SplittingOnOn
Chunk Size10001000
Chunk Overlap100100
Top K(渡すチャンクの数)33〜5
Full Context Mode—Off

Top Kを増やすと、モデルに渡す文章が長くなり、会話の続きを覚えておく余地が減ります。 フォローアップの質問が途中で切れるときは、Top Kを下げてください。

4(任意)埋め込みをOllamaに替える

標準の埋め込みはCPUで動くので、メモリの小さいVPSでは負担になります。Ollamaの埋め込み用モデルに替えると、 Open WebUI側のメモリを減らせます(公式は、外部の埋め込みを使うとRAMを大きく節約できるとしています)。 公式が例に挙げているのは nomic-embed-text です。

sudo docker exec -it open-webui ollama pull nomic-embed-text

取得したら、Settings > Admin > Documents の Embedding Model で、Ollamaのそのモデルを指定します (環境変数では RAG_EMBEDDING_ENGINE=ollama)。埋め込みモデルを替えたら、入れてある文書を、すべて再インデックスしてください。前の方式で数値にした文書は、新しい方式では検索できません。

5うまくいかないとき

  • 文書の一部しか使われない:Ollamaの標準のコンテキスト長が短く(公式によると、GPUのメモリが24GiB未満なら4,096トークン)、 取り出した内容が大きく切り詰められています。Bypass Embedding and Retrieval か Full Context Mode を有効にするか、モデルのコンテキスト長を増やします (Settings > Admin > Models の編集 → Advanced Params)。 コンテキスト長を増やすと、メモリも増えます(メモリの見積もりツール)。
  • モデルが内容を認識しない:文書の読み取り(抽出)がうまくいっていない可能性があります。 公式は、Apache TikaやDoclingなどの抽出エンジンを使い、アップロード後に抽出結果を確かめるよう案内しています。 画像の中の文字(スキャンしたPDFなど)は、TikaかDoclingに替えて、OCRを有効にしないと読めません。
  • 検索の精度が低い:埋め込みモデルを替えて、全文書を再インデックスします。
  • フォローアップの応答が遅い:標準では、毎回の質問のたびに文書の内容を読み直します。 環境変数 RAG_SYSTEM_CONTEXT=True にすると、読み直しを減らせます(公式の記載)。
  • 複数の人で、たくさんの文書を入れる:標準のベクトルDB(ChromaDB)は、複数のワーカーで使うと動作が止まることがあります。 公式は、規模が大きくなったら、PGVectorに替えるよう案内しています。

よくある質問

文書は何件くらいまで扱えますか

公式は、1人で数件程度なら、設定を変えなくても多くの場合は足りるとしています。文書が100件ほど、または使う人が10人ほどになると、設定が重要になります。当サイトでは件数の上限を測っていません。

日本語の文書でも、きちんと検索できますか

埋め込みモデルによって、日本語の検索の精度は変わる可能性があります。当サイトは精度を測っていないため、保証はできません。自分の文書で試して、答えが合っているかを確かめてください。

文書の内容は、外に出ますか

この手順は、文書の処理もモデルも、自分のVPSの中で完結します。外部の埋め込みサービス(OpenAIなど)を設定しなければ、文書は外へ送られません。

ToolkITBoxのAIツール・解説と併用する

姉妹サイトの、この記事と相性のいいページです。

内容はOpen WebUI公式のEssentialsとRAGのトラブルシューティングで確認した範囲です(確認日 2026-10-27)。項目名や既定値は、バージョンアップで変わることがあります。