この記事ではRAGに特化して解説します。RAG全般は RAGとは?仕組み・構築・ベクトルDB選定まで【2026年完全ガイド】 をご覧ください。
RAGFlowとは何か:GitHub7.8万スターのRAGエンジン
RAGFlowは、Infiniflowが開発するオープンソースのRAG(Retrieval-Augmented Generation)エンジンだ。GitHub上で7.8万スター以上を獲得し、エンタープライズ向けRAGフレームワークとして急速に普及している。
従来のRAGシステムが抱えてきた最大の課題は「ゴミを入れればゴミが出る(Garbage In, Garbage Out)」問題だった。PDF内の表や図、スキャン文書の文字、複雑なレイアウトを持つWordファイルをそのままテキスト化すると、構造が崩れて意味をなさないチャンクが大量に生成される。LLMに渡す前段階の文書品質が低ければ、どれほど優秀なLLMを使っても正確な回答を得られない。
RAGFlowはこの問題に正面から取り組んでいる。公式READMEには「深い文書理解に基づいたRAG」と明記されており、非構造化・複雑フォーマットのデータから意味のある知識を抽出することが設計の中核に置かれている。
エンタープライズ向けRAGを構築しようとすると、文書解析・チャンキング・ベクトル化・検索・再ランキング・LLM統合・UIと、多数のコンポーネントを自前で組み合わせる必要がある。RAGFlowはこれらを一気通貫でパッケージ化しており、DockerComposeで起動するだけで本格的なRAGシステムが立ち上がる。
インフラとしての機能だけでなく、GraphRAGやエージェントワークフロー、MCP(Model Context Protocol)対応も備えており、単純な文書検索チャットボットから複雑なマルチエージェントシステムまで幅広い用途に対応できる点が大きな強みだ。
技術アーキテクチャ:ディープドキュメント解析の仕組み
RAGFlowのアーキテクチャは、「コンテキストエンジン」と「エージェントレイヤー」の2つの柱で構成されている。
PDF/Word/Excel/画像/URL"] --> B["Document Parser
ディープパーシング"] B --> C["Chunking Engine
テンプレートベース分割"] C --> D["Embedding Model
ベクトル化"] D --> E["Vector Store
Elasticsearch / Infinity"] F["ユーザークエリ"] --> G["Query Analyzer
クエリ解析"] G --> H["Multi-Recall
ベクトル+キーワード+GraphRAG"] H --> I["Reranker
フュージョン再ランキング"] E --> H I --> J["LLM
OpenAI/DeepSeek/Ollama"] J --> K["回答生成
引用付きレスポンス"]
文書解析エンジン(Document Parser)
RAGFlowの差別化要因の核心は文書解析精度にある。MinerUとDoclingという2つの高精度解析エンジンを統合しており、以下の文書形式を高精度でパーシングできる:
- PDF: 表・図・数式・段落構造を保持した高精度変換。スキャンPDFにも対応
- Word/PowerPoint: スライドのレイアウト、箇条書き階層を保持
- Excel: シート構造とセル関係を理解した変換
- HTML/Markdown: ウェブページの構造を維持
- 画像: マルチモーダル処理でテキスト・図表を抽出
- 構造化データ: CSVやJSONの構造を考慮したインデックス化
チャンキング戦略
テンプレートベースのインテリジェントチャンキングにより、文書の種類に応じた最適な分割を自動選択する。法律文書・学術論文・マニュアル・Q&Aデータベースでは最適な分割単位が異なり、RAGFlowはこれを自動的に判断する。チャンキング結果はビジュアライズ可能で、実際にどのように分割されているかをUIで確認できる。
GraphRAG統合
通常のベクトル検索に加えて、GraphRAGによるナレッジグラフベースの検索もサポートしている。エンティティ間の関係性を考慮した検索が可能で、「AとBの関係性は何か」「CはどのカテゴリのDと関連するか」といった複雑な質問への対応精度が向上する。
検索パイプライン
Multi-Recallアーキテクチャを採用しており、以下の複数の検索手法を組み合わせてフュージョン再ランキングを行う:
- ベクトル類似度検索
- キーワード(BM25)検索
- GraphRAGベースのエンティティ検索
- 構造化データクエリ
この組み合わせにより、単一手法よりも高い再現率と精度を実現している。
インストール・セットアップ
システム要件
| 項目 | 最低要件 | 推奨 |
|---|---|---|
| CPU | 4コア以上 | 8コア以上 |
| RAM | 16GB | 32GB以上 |
| ディスク | 50GB | 100GB以上 |
| Docker | 24.0.0以上 | 最新版 |
| Docker Compose | v2.26.1以上 | 最新版 |
| OS | Linux / macOS | Ubuntu 22.04 LTS |
vm.max_map_countの設定も必要だ(Elasticsearchの要件):
# Linux: /etc/sysctl.confに追記、または即時反映
sudo sysctl -w vm.max_map_count=262144
Dockerによるインストール
# リポジトリのクローン
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/docker
# 環境設定(必要に応じてカスタマイズ)
cp .env.example .env
# サービス起動(初回は数分かかる)
docker compose up -d
# ログ確認
docker compose logs -f ragflow-server
起動後は http://localhost:80 にアクセスし、管理画面からアカウントを作成する。初期設定でLLMのAPIキーを登録すれば、すぐにRAGシステムとして使い始められる。
LLMの設定
.envファイルでデフォルトのLLMを設定できる:
# .env ファイルの設定例
OPENAI_API_KEY=sk-xxxxx
# または DeepSeek
DEEPSEEK_API_KEY=xxxxx
# または ローカルOllamaを使用する場合
OLLAMA_BASE_URL=http://host.docker.internal:11434
管理画面の「Setting」→「Model Providers」から複数のLLMプロバイダーを追加でき、ナレッジベースごとに異なるLLMを割り当てることも可能だ。
外部データソース連携の設定
RAGFlowはファイルアップロードだけでなく、外部サービスからの自動同期もサポートしている:
# service_conf.yaml.template の抜粋(Notion連携例)
notion:
enabled: true
token: "secret_xxxx"
database_ids:
- "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
対応している外部データソース:Confluence、S3、Notion、Discord、Google Drive
まずクラウド版(cloud.ragflow.io)で機能を試してから、セルフホストに移行するのが効率的だ。クラウド版は無料で利用でき、インストール不要でRAGFlowの機能を体験できる。
実践的ユースケース
1. 社内ナレッジ検索システムの構築
最も典型的なユースケースだ。社内の各種ドキュメント(マニュアル、手順書、FAQ、議事録など)をRAGFlowにインポートし、自然言語で検索・質問できるシステムを構築する。
PDFの社内規程集やWordの業務マニュアルを管理画面からアップロードすると、RAGFlowが自動的に解析・チャンキング・インデックス化を行う。チャット画面から「有給休暇の申請方法は?」と質問すると、該当する規程の段落を引用付きで回答する。
実装のポイント:アクセス制御が重要。RAGFlowはナレッジベース単位でアクセス制御を設定できるため、部門ごとにナレッジベースを分け、各部門のメンバーだけがアクセスできるよう設定する。
2. カスタマーサポート自動化
製品マニュアル・FAQ・過去のサポートチケットをナレッジベースに登録し、チャットボット形式のサポートシステムとして活用する。
RAGFlowのエージェント機能を使えば、単純な質問回答だけでなく「問題の切り分け→解決策の提示→エスカレーション判断」といった複数ステップの対応フローも構築できる。
3. 法務・コンプライアンス文書検索
契約書、規制文書、コンプライアンスガイドラインは量が多く、必要な条項を探すのに時間がかかる。RAGFlowのGraphRAG機能は、エンティティ間の関係性(「Aという条件の場合、B条項が適用され、C例外が認められる」)を考慮した検索が可能で、法務部門での活用に適している。
4. 研究論文・技術文書の知識ベース構築
研究開発チームが参照する論文・特許・技術仕様書をナレッジベースに登録する。RAGFlowは数式や図を含むPDFの高精度解析が可能で、学術文書でも品質の高いチャンキングが期待できる。
GraphRAGを活用することで、「この手法の先行研究は何か」「この特許に関連する技術はどれか」といった関係性ベースの質問にも対応できる。
5. マルチエージェントシステムの構築
RAGFlowのエージェントテンプレートとMCP(Model Context Protocol)対応を組み合わせることで、複数のエージェントが連携するシステムを構築できる。
例えば「調査エージェント(RAG)→分析エージェント(LLM)→レポート生成エージェント(LLM)→通知エージェント(外部ツール)」といったパイプラインを、RAGFlowのビジュアルエディタで構築できる。
# RAGFlow Python SDK によるナレッジベース操作例
from ragflow_sdk import RAGFlow
rag = RAGFlow(api_key="xxxxxxxx", base_url="http://localhost:9380")
# ナレッジベースの作成
kb = rag.create_dataset(name="社内ナレッジ", description="社内規程・マニュアル集")
# ドキュメントのアップロード
with open("manual.pdf", "rb") as f:
kb.upload_document(f, filename="manual.pdf")
# チャットの実行
chat = rag.create_chat("社内チャットボット", knowledgebases=[kb])
session = chat.create_session()
answer = session.ask("有給休暇の申請手順を教えてください")
print(answer.content)
競合比較
RAGFlow vs 主要RAGフレームワーク
| 特徴 | RAGFlow | LangChain | Dify | LlamaIndex |
|---|---|---|---|---|
| 文書解析精度 | 非常に高い(MinerU/Docling) | 標準的 | 標準的 | 中程度 |
| GraphRAG | ネイティブ対応 | 要構築 | 非対応 | 要構築 |
| エージェント機能 | ビジュアルエディタ付き | コード中心 | ビジュアルエディタ | コード中心 |
| WebUI | フル装備 | なし | あり | なし |
| セルフホスト | Docker対応 | - | Docker対応 | - |
| MCP対応 | ネイティブ対応 | 要構築 | 限定的 | 要構築 |
| 外部データソース同期 | Confluence/S3/Notion等 | 要構築 | 一部対応 | 要構築 |
| エンタープライズ対応 | 高い | 中程度 | 中程度 | 中程度 |
| GitHubスター(2026/4) | 7.8万 | 10万+ | 5万+ | 3.5万 |
コードでカスタムパイプラインを組みたい場合はLangChainやLlamaIndex、ノーコードでUIから全てを管理したい場合はRAGFlowやDifyが適している。文書解析精度が最優先のエンタープライズ案件ではRAGFlowが最も強い。
ベクトルDBの選択
RAGFlowはElasticsearchとInfinityの2つのベクトルDBをサポートしている:
| 項目 | Elasticsearch | Infinity |
|---|---|---|
| 検索性能 | 成熟した実績 | 高速(RAGFlow専用設計) |
| スケーラビリティ | 高い | 中程度 |
| リソース消費 | 多い | 少ない |
| 適用ケース | 大規模エンタープライズ | 中小規模・開発環境 |
デフォルトはElasticsearchだが、.envでDOC_ENGINE=infinityと設定するとInfinityに切り替えられる。
RAGFlowのAPIを使った統合
RAGFlowはREST APIを提供しており、既存のアプリケーションへの組み込みが可能だ:
# ナレッジベース一覧の取得
curl -X GET "http://localhost:9380/api/v1/datasets" \
-H "Authorization: Bearer ${API_KEY}"
# チャット質問の送信
curl -X POST "http://localhost:9380/api/v1/chats/{chat_id}/sessions/{session_id}/ask" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{"question": "製品の返品ポリシーを教えてください"}'
MCPサーバーとして設定すると、Claude DesktopやCursorなどのMCP対応クライアントから直接RAGFlowのナレッジベースに問い合わせることもできる。これにより、コーディングアシスタントやAIチャットアプリからシームレスにRAGの恩恵を受けられる。
RAGFlowをプロダクション環境で運用する場合、デフォルトのパスワードを必ず変更すること。また、公開インターネットに直接さらす場合はリバースプロキシ(nginx/Cloudflare)を前段に配置し、認証を強化することを強く推奨する。
コンフィグ管理と運用のベストプラクティス
# docker/service_conf.yaml.template を編集して設定をカスタマイズ
# 主要な設定項目:
# - LLM プロバイダーのデフォルト設定
# - 埋め込みモデルの選択
# - チャンキングパラメータ
# - ベクトルDB接続設定
# 設定変更後はコンテナを再起動
docker compose restart ragflow-server
# ログの確認(トラブルシューティング)
docker compose logs -f --tail=100 ragflow-server
# データのバックアップ
docker compose exec elasticsearch \
elasticsearch-dump --input=http://localhost:9200 --output=./backup.json
よくある質問
Q: RAGFlowとMinerUの違いは何ですか?
A: MinerUはPDFの高精度テキスト抽出専用ツールだ。RAGFlowはMinerUをパーサーの一つとして内部統合しており、RAGパイプライン全体(解析→チャンキング→検索→LLM統合)を提供する。PDF変換のみが目的ならMinerU単体、RAGシステム全体を構築するならRAGFlowを選ぶのが適切だ。
Q: LangChainとの組み合わせは可能ですか?
A: 可能だ。RAGFlowのAPIエンドポイントをLangChainのカスタムリトリーバーとして設定することで、LangChainのチェーンやエージェントからRAGFlowのナレッジベースを活用できる。ただし、RAGFlow自体にエージェント機能が組み込まれているため、多くのユースケースではRAGFlow単体で完結する。
Q: オフライン環境(エアギャップ)で動作しますか?
A: Dockerイメージとモデルファイルを事前にダウンロードしておけば、インターネット接続なしで動作する。LLMにOllamaのローカルモデルを使用すれば、完全オフラインのRAGシステムを構築できる。
Q: マルチテナント対応はありますか?
A: ユーザー管理機能と権限制御機能を備えており、複数の部門・チームが同一RAGFlowインスタンスを使いながら、それぞれのナレッジベースへのアクセスを分離できる。エンタープライズ向けの利用に適した設計になっている。
Q: RAGFlowのアップデートはどのように行いますか?
A: docker compose pullで最新イメージを取得し、docker compose up -dで再起動する。ただし、メジャーアップデートの際はデータベースマイグレーションが必要な場合があるため、アップデート前に必ずバックアップを取得することを推奨する。
関連記事: RAGとは?仕組み・構築・ベクトルDB選定まで【2026年完全ガイド】
まとめ
RAGFlowのPDF高精度変換機能をさらに補強したい場合はMinerUが有効だ。エージェント機能をさらに拡張したい場合はLangChainやDifyとの組み合わせも検討できる。LLM推論の高速化が必要な場合はvLLMとのセット運用も選択肢に入る。
大規模なエンタープライズ展開を検討しているチームには、まずcloud.ragflow.ioのクラウド版で機能を評価し、その後セルフホスト移行のROIを試算することを推奨する。
RAGFlowの高度な設定:チャンキング最適化
RAGFlowのチャンキング設定はナレッジベース作成時に細かく制御できる。適切なチャンキング設定がRAGの精度を大きく左右する。
チャンキングモードの選択
RAGFlowが対応するチャンキング方式は以下の通りだ:
| チャンキングモード | 適した文書タイプ | 特徴 |
|---|---|---|
| General(汎用) | 一般的な文書 | ページと段落構造を考慮した分割 |
| Q&A | FAQ・Q&A形式の文書 | 質問と回答を1チャンクにまとめる |
| Manual(マニュアル) | 技術文書・マニュアル | 章・節・条項を考慮した構造的分割 |
| Laws(法令) | 規程・法律文書 | 条・項・号の階層構造を保持 |
| Paper(論文) | 学術論文 | Abstract・章・参考文献を区別 |
| Book(書籍) | 長文書籍 | 章・節の階層に沿って分割 |
| Presentation | PowerPoint等 | スライド単位での分割 |
| Table(表) | Excel・CSV | テーブル構造を保持した分割 |
# APIからナレッジベースのチャンキング設定を指定する例
curl -X POST "http://localhost:9380/api/v1/datasets" \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "法務ナレッジベース",
"chunk_method": "laws",
"parser_config": {
"chunk_token_count": 256,
"layout_recognize": true,
"raptor": {
"use_raptor": true
}
}
}'
RAPTORによる階層チャンキング
RAGFlowはRAPTOR(Recursive Abstractive Processing for Tree-Organized Retrieval)をサポートしており、文書を複数の抽象レベルでインデックス化する。
具体的には:
- 元のチャンク(葉ノード)
- 複数チャンクをまとめた中間サマリー
- 文書全体のハイレベルサマリー
この階層構造により、「詳細な事実を答える質問(葉ノードを使用)」と「全体像を説明する質問(上位ノードを使用)」の両方に対応できる。
エンタープライズ運用:スケーリングとモニタリング
複数テナント管理
大規模組織でRAGFlowを運用する際のベストプラクティス:
# 複数部門向けの設定例(docker-compose.override.yml)
version: '3.8'
services:
ragflow-server:
environment:
# 最大同時接続数
MAX_CONCURRENT_REQUESTS: "100"
# ドキュメント解析の並列度
PARSER_WORKERS: "8"
# エンベディング処理のバッチサイズ
EMBEDDING_BATCH_SIZE: "32"
メトリクスとモニタリング
RAGFlowは内部でAPIコールのレイテンシ、チャンキング処理時間、検索精度スコアなどを記録している。これらをPrometheus + Grafanaと連携するための設定も公式ドキュメントに記載されている。
# RAGFlowのヘルスチェックエンドポイント
curl -X GET "http://localhost:9380/api/v1/health" \
-H "Authorization: Bearer ${API_KEY}"
# レスポンス例
# {"code": 0, "data": {"storage": "ok", "llm": "ok", "embedding": "ok"}}
Infinityベクトルデータベースへの移行
Elasticsearchよりも軽量なInfinityに切り替えることで、メモリ使用量を削減できる:
# .envファイルで切り替え
DOC_ENGINE=infinity
# 再起動
docker compose down
docker compose up -d
Infinityは開発・検証環境や中規模展開(文書数10万件以下)では特に有効だ。大規模エンタープライズではElasticsearchの方が安定性と拡張性が高い。
RAGFlowの国際化対応と日本語最適化
日本語テキストを処理する場合、いくつかの設定が重要だ:
埋め込みモデルの選択
日本語に最適化された埋め込みモデルを使用することで、日本語文書の検索精度が向上する:
# 管理画面での設定に加え、APIでの埋め込みモデル指定例
# 日本語対応の推奨モデル:
# - text-embedding-3-large (OpenAI) - 高品質
# - multilingual-e5-large (ローカル) - オフライン対応
# - paraphrase-multilingual-mpnet-base-v2 (ローカル)
# Ollamaで日本語特化モデルを使う場合
# ollama pull nomic-embed-text
日本語チャンクの区切り設定
日本語は英語と異なりスペースで単語が区切られないため、チャンキング設定の調整が有効だ:
- General モード:文書の段落区切り(句読点・改行)を考慮したチャンキングが自動適用される
- chunk_token_count:日本語の場合、英語より少ないトークン数に設定する(128〜256が目安)