重要なポイント
- RAG = ドキュメントをアップロードしてモデルに質問に答えさせ、出典を引用させる。
- Open WebUIが最も簡単な組み込みRAG機能を提供。PDF をアップロードして質問するだけ。5分で設定完了。
- LlamaIndexはRAGパイプライン構築に最も柔軟なフレームワーク。
- LangChainは最も広く使われているプロフェッショナルフレームワーク。膨大なエコシステムを持つ。
- ChromaとQdrantがドキュメントチャンクを保存するベクトルデータベースのトップ選択肢。
- 2026年4月時点で、ローカルRAGは成熟しており、本番環境対応完了。
RAG(検索拡張生成)とは何か?
RAGは、モデルをファインチューニングせずに、LLMが自分のドキュメントについて質問に答えられるようにする技術です。
プロセス:(1)ドキュメント(PDF、テキストファイル)をアップロード、(2)チャンク(小片)に分割、(3)チャンクを埋め込み(数値ベクトル)に変換、(4)埋め込みをベクトルデータベースに保存、(5)質問に対して関連チャンクをデータベースから検索、(6)チャンク+質問をLLMに渡す、(7)LLMがチャンクに基づいて回答。
RAGはドキュメントが頻繁に変更される場合(ファインチューニングは1回限りのトレーニング)や、出典の表示が必要な場合(どのドキュメントが使用されたかを示す)に、ファインチューニングより好ましいです。
2026年のトップ8つのローカルRAGツール
| ツール | タイプ | 最適な用途 | ベクトルDB | 学習曲線 |
|---|---|---|---|---|
| Open WebUI | Webアプリ(Docker) | 初心者向け、最も簡単なセットアップ | 組み込み | なし |
| LlamaIndex | Pythonフレームワーク | 柔軟なパイプライン | Any(Chroma、Qdrant、Pinecone) | 中程度 |
| LangChain | Pythonフレームワーク | 本番環境システム | Any | 中程度 |
| Chroma | ベクトルデータベース | シンプルなRAG | Chroma(組み込み) | 低 |
| Qdrant | ベクトルデータベース | スケーラブルなRAG | Qdrant(分散) | 中程度 |
| Weaviate | ベクトルデータベース | GraphQLクエリ | Weaviate | 中程度 |
| Milvus | ベクトルデータベース | 大規模向け | Milvus | 高 |
| Text-Generation-WebUI RAG | 拡張機能 | モデルとの統合 | 組み込み | 低 |
Open WebUI RAG の使い方(最も簡単)
Open WebUIには組み込みRAGがあります。 Dockerのセットアップ以外は不要。ドキュメントをアップロードして質問するだけです。
# 1. Dockerで Open WebUI を実行
docker run -d -p 3000:8080 \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
ghcr.io/open-webui/open-webui:latest
# 2. http://localhost:3000 を開く
# 3. メッセージ入力の隣の "+" をクリック → "ファイルをアップロード"
# 4. PDF またはテキストファイルを選択
# 5. 質問を入力 -- Open WebUI が関連チャンクを取得
# 6. モデルがドキュメントに基づいて回答し、出典を表示LlamaIndex で RAG を構築する方法
LlamaIndexはドキュメント読み込み、チャンキング、埋め込み、検索を処理するフレームワークです。 柔軟性があり、あらゆるベクトルデータベースに対応しています。
# 1. インストール
pip install llama-index
pip install llama-index-embeddings-ollama # ローカル Ollama 埋め込みを使用
pip install llama-index-vector-stores-chroma # Chroma をストレージとして使用
# 2. シンプルなRAGパイプライン
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex
from llama_index.embeddings.ollama import OllamaEmbedding
# ドキュメントを読み込む
documents = SimpleDirectoryReader("./documents").load_data()
# ローカル埋め込みを使ってインデックスを作成
embedding_model = OllamaEmbedding(model_name="nomic-embed-text")
index = VectorStoreIndex.from_documents(
documents,
embed_model=embedding_model
)
# クエリ実行
query_engine = index.as_query_engine()
response = query_engine.query("ドキュメントは X について何と言っていますか?")
print(response)LangChain で RAG を構築する方法
LangChainは本番RAGシステム向けの最も広く使われているフレームワークです。 すべてのベクトルデータベースとLLMプロバイダーに対応しています。
# pip install langchain langchain-community langchain-chroma
from langchain.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OllamaEmbeddings
from langchain.vectorstores import Chroma
from langchain.chat_models import ChatOllama
from langchain.chains import RetrievalQA
# ドキュメントを読み込む
loader = DirectoryLoader("./documents")
docs = loader.load()
# チャンクに分割
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
chunks = splitter.split_documents(docs)
# 埋め込みとベクトルストアを作成
embeddings = OllamaEmbeddings(model="nomic-embed-text")
vectorstore = Chroma.from_documents(chunks, embeddings)
# QA チェーンを作成
llm = ChatOllama(model="llama3.2:8b")
qa = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff",
retriever=vectorstore.as_retriever()
)
# 質問に回答
result = qa.run("ドキュメントは X について何と言っていますか?")
print(result)ローカルRAGに最適なベクトルデータベース
Chroma(最も簡単):インプロセスベクトルデータベース。サーバーセットアップ不要。小規模RAGプロジェクト(100万ドキュメント未満)に最適。
Qdrant(スケーラブル):分散ベクトルデータベース。大規模RAGプロジェクトに推奨。
Weaviate(エンタープライズ向け):GraphQL クエリサポート。複雑なフィルタリングが必要な場合。
Milvus(大規模向け):高度なスケーリング。数百万のドキュメント向け。
RAG 対 ファインチューニング
RAGを使用する場合:ドキュメントが頻繁に変わる場合、出典の表示が必要な場合、事実情報を提供する場合。
ファインチューニングを使用する場合:モデルの性格や文体を変更したい場合、推論のパターンや推理スキルを教えたい場合。
ベストプラクティス:多くの本番環境システムはRAG + ファインチューニングを組み合わせています。RAGは事実取得用、ファインチューニングは推論用。
よくある間違い
- チャンクサイズが大きすぎる。1000 トークン以上のチャンクは、無関係な情報を含む可能性が高くなります。512~1000トークンを推奨。
- 埋め込みモデルが不適切。事実情報にはnomic-embed-text、テキスト分類にはjina-embeddings-v3を使用。
- ベクトル検索の結果を十分に取得していない。通常、質問ごとに上位5~10チャンクを取得することをお勧めします。
- LLMの足りないコンテキストにフォーカスしていない。RAGで検索したチャンクを、LLMのコンテキスト長に合わせる必要があります。
よくある質問
ローカルRAGには何GBのVRAMが必要ですか?
ローカルLLMモデル(7B~13B)で8GB、大規模モデル(34B以上)で16GB以上が推奨されます。ベクトルデータベース自体はVRAMをほぼ使用しません。
RAGではどのベクトル埋め込みモデルを使用すべきですか?
nomic-embed-textが広く推奨されています。小規模な埋め込み(384次元)で小さいメモリフットプリント。大規模なコーパスにはjina-embeddings-v3(1024次元)を検討。
RAGは本番環境で使用できますか?
はい。Open WebUI、LlamaIndex、LangChainはすべて本番環境対応です。ただし、ドキュメント品質、埋め込みモデル、ベクトルデータベースのセットアップに依存します。
ローカルRAGはセキュアですか?
ローカルに実行されるため、データはお使いのマシン上に留まります。ただし、ベクトルデータベースへのアクセスは制限し、本番環境ではファイアウォール保護を推奨します。
参考資料
- Open WebUI GitHub -- github.com/open-webui/open-webui
- LlamaIndex ドキュメント -- docs.llamaindex.ai
- LangChain ドキュメント -- python.langchain.com
- Chroma ドキュメント -- docs.trychroma.com
- Qdrant ドキュメント -- qdrant.tech/documentation