RAGFlow:深度文档理解的RAG引擎
在企业知识库场景中,PDF合同、技术手册、财务报表等复杂文档的解析质量直接决定了RAG系统的成败。RAGFlow由InfiniFlow团队开发,其核心竞争力在于深度文档理解——内置的DeepDoc引擎能够处理复杂的版面布局、多栏排版、嵌套表格和图文混排,这是Dify和MaxKB等通用平台难以企及的优势。
截至2026年6月,RAGFlow已在GitHub获得超过45k Star,支持PDF、Word、PPT、Excel、Markdown等十余种文档格式的深度解析。
Docker部署与配置
RAGFlow采用Docker Compose部署,完整配置如下:
# docker-compose.yml
version: '3.8'
services:
ragflow:
image: infiniflow/ragflow:v0.18.0
container_name: ragflow-server
restart: always
ports:
- "9380:9380"
- "80:80"
environment:
- TZ=Asia/Shanghai
- HF_ENDPOINT=https://hf-mirror.com
- ES_HOSTS=http://es01:9200
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=ragflow2026
- MYSQL_HOST=mysql
- MYSQL_PORT=3306
- MYSQL_USER=root
- MYSQL_PASSWORD=ragflow2026
- MYSQL_DBNAME=rag_flow
- STORAGE_OSS_ENDPOINT=minio:9000
- STORAGE_OSS_ACCESS_KEY=ragflow
- STORAGE_OSS_SECRET_KEY=ragflow2026
- STORAGE_OSS_BUCKET=ragflow
volumes:
- ./ragflow-logs:/ragflow/logs
- ./nginx.conf:/ragflow/nginx/ragflow.conf
depends_on:
- es01
- redis
- mysql
- minio
es01:
image: elasticsearch:8.11.3
container_name: ragflow-es01
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- ES_JAVA_OPTS=-Xms1g -Xmx1g
volumes:
- ./es-data:/usr/share/elasticsearch/data
ports:
- "9200:9200"
mysql:
image: mysql:8.0
container_name: ragflow-mysql
environment:
MYSQL_ROOT_PASSWORD: ragflow2026
MYSQL_DATABASE: rag_flow
MYSQL_CHARSET: utf8mb4
MYSQL_COLLATION: utf8mb4_unicode_ci
volumes:
- ./mysql-data:/var/lib/mysql
redis:
image: redis:7-alpine
container_name: ragflow-redis
command: redis-server --requirepass ragflow2026
volumes:
- ./redis-data:/data
minio:
image: minio/minio:latest
container_name: ragflow-minio
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: ragflow
MINIO_ROOT_PASSWORD: ragflow2026
volumes:
- ./minio-data:/data
ports:
- "9001:9001"
# 启动RAGFlow
git clone https://github.com/infiniflow/ragflow.git
cd ragflow/docker
docker compose -f docker-compose.yml up -d
# 检查启动状态(等待约2分钟初始化)
docker compose logs -f ragflow --tail=50
深度文档解析:DeepDoc引擎
RAGFlow的核心差异化能力在于DeepDoc。与简单文本提取不同,DeepDoc采用三层解析策略:
- 版面分析:基于LayoutLMv3模型识别文档区域(标题、正文、表格、图片、页眉页脚)
- OCR识别:集成PaddleOCR处理扫描件和图片中的文字
- 表格提取:使用TableFormer识别复杂表格结构,输出结构化数据
在RAGFlow中配置知识库时,可以选择不同的分片模板:
- 通用模板:适用于普通文档,按段落和语义边界分片
- 论文模板:识别摘要、方法、结论等学术结构
- 表格模板:保持表格完整性,每个表格作为独立chunk
- 问答模板:自动从文档中提取Q&A对
- 简历模板:专为HR场景优化的结构化解析
# 通过RAGFlow Python SDK上传和管理文档
from ragflow_sdk import RAGFlow
rag = RAGFlow(api_key="ragflow-xxxxxxxxxxxx", base_url="http://localhost:9380")
# 创建知识库
kb = rag.create_dataset(
name="产品技术文档",
chunk_method="naive", # naive/qa/table/resume/paper
parser_config={
"raptor": {"use_raptor": True}, # 启用RAPTOR递归摘要
"chunk_token_num": 512,
"delimiter": "\n",
"html4excel": True, # Excel转HTML保留格式
"layout_recognize": "DeepDoc" # 使用DeepDoc深度解析
}
)
# 上传文档
with open("technical_manual.pdf", "rb") as f:
kb.upload_documents([{
"name": "technical_manual.pdf",
"blob": f.read()
}])
# 等待解析完成
import time
while True:
docs = kb.list_documents()
if all(d.run_status == "DONE" for d in docs):
print("所有文档解析完成")
break
time.sleep(5)
混合检索与Reranking
RAGFlow内置了强大的混合检索管道:
# 混合检索示例
results = rag.retrieve(
question="如何配置Nginx的SSL证书和反向代理?",
dataset_ids=[kb.id],
similarity_threshold=0.2,
vector_similarity_weight=0.7, # 向量检索权重70%,关键词30%
top_k=10
)
for chunk in results:
print(f"[{chunk.document_name}] 相关度: {chunk.similarity:.3f}")
print(f" 内容: {chunk.content[:200]}...")
print(f" 引用位置: 第{chunk.positions}")
print()
检索优化要点:
- 向量权重:中文语义搜索推荐 0.6-0.7,英文可提高到 0.8
- 相似度阈值:建议设为 0.2,过低会引入噪声,过高会漏召回
- RAPTOR:启用递归摘要技术,通过层次化聚类提升对长文档的全局理解
- 知识图谱:2026版新增KG索引,自动抽取实体关系,增强跨文档推理
与Dify/MaxKB的对比
- RAGFlow优势:文档解析深度最强,支持复杂版面和表格,混合检索+Reranker效果好
- Dify优势:工作流编排能力更强,Agent工具集成更丰富,整体平台功能更全面
- MaxKB优势:上手最快,适合快速验证,但文档解析和检索能力相对基础
建议:如果核心需求是高质量的企业知识库,RAGFlow是最佳选择;如果需要构建复杂的AI工作流,Dify更合适。两者也可以组合使用——将RAGFlow作为后端RAG引擎,通过API接入Dify的工作流。
API集成与生产部署
# RAGFlow Chat API - 对话式问答
response = rag.chat(
question="对比v2.0和v3.0版本的API差异",
dataset_ids=[kb.id],
stream=True,
model_name="gpt-4o",
system_prompt="你是一位资深技术文档工程师,请基于检索到的文档内容准确回答。如果文档中没有相关信息,请明确说明。",
)
for chunk in response:
print(chunk.content, end="", flush=True)
生产环境建议:Elasticsearch分配至少4GB内存,开启HTTPS,配置Nginx反向代理,定期备份MySQL和MinIO数据。