VPSのローカルLLMに、自分の文書について質問する(RAG)
RAGは、長い文書を毎回モデルに全文読ませずに、文書の内容にもとづいて答えさせる仕組みです。 文書を細かく分けて、あらかじめ検索できる形にしておき、質問に関係する部分だけをモデルに渡します。 社内の規程やマニュアル、自分のメモに質問したいときに使えます。文書もモデルも自分のVPSの中に置くので、外に出しません。 ここでは、Open WebUIのチャット画面を入れてある前提で、文書を使えるようにするところまでを説明します。
1仕組みを知っておく
- 分ける:文書を、小さな塊(チャンク)に分けます。
- 数値にする(埋め込み):各チャンクを、意味を比べられる数値の列(ベクトル)にします。
- しまう:その数値を、検索用のデータベース(ベクトルDB)に入れます。
- 探して渡す:質問されたら、関係しそうなチャンクだけを取り出し、モデルに渡して答えさせます。
Open WebUIでは、最初からこの仕組みが入っています。標準の埋め込みの処理はサーバーのCPUで動き、 公式によると、1ワーカーあたり約500MBのメモリを使います。モデルのぶんに、このぶんが上乗せになります。
2文書を入れる
- そのチャットだけで使う:チャットの入力欄に、ファイルをドラッグ&ドロップします。
- 何度も使う文書:
Workspace > Knowledgeでナレッジベースを作り、文書を入れます。チャットの入力欄で#を入力すると、ナレッジベースを指定できます。Workspace > Modelsでモデルにひも付ければ、そのモデルは、いつでもその知識を使えます。
まず数件の文書で試してください。標準の設定のままで動きます。
3ローカルモデル向けの設定の目安
手元で動かす小さなモデルは、一度に読める長さ(コンテキスト)が短めです。公式は、8,000トークン以下のローカルモデル向けに、 次の設定を勧めています。場所は Settings > Admin > Documents です。
| 項目 | 標準 | ローカルモデル向けの目安 |
|---|---|---|
| Text Splitter | character | token |
| Markdown Header Splitting | On | On |
| Chunk Size | 1000 | 1000 |
| Chunk Overlap | 100 | 100 |
| Top K(渡すチャンクの数) | 3 | 3〜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ツール・解説と併用する
姉妹サイトの、この記事と相性のいいページです。
- Local LLM Memory Estimator
モデルファイルとKVキャッシュから、必要なメモリを見積もる — toolkitbox.net
- メモリはどれだけ要るか
モデルファイルとKVキャッシュ(会話の長さで増える分)の考え方 — toolkitbox.net
- LLM API Cost Calculator
APIの月額を見積もり、自前のVPSと比べる材料にする — toolkitbox.net
- 自前のVPSでAIを動かす
必要なメモリの見積もりと、公開してはいけないもの — toolkitbox.net
- LLMをローカルで動かす
Ollama・LM Studio・llama.cppの入れ方とモデルの入手先 — toolkitbox.net
- CIDR Calculator
ファイアウォールの許可レンジを計算する — toolkitbox.net
- Password Generator
サーバー用に強いパスワードをその場で生成 — toolkitbox.net
内容はOpen WebUI公式のEssentialsとRAGのトラブルシューティングで確認した範囲です(確認日 2026-10-27)。項目名や既定値は、バージョンアップで変わることがあります。