📌 摘要
RAGFlow 是 Infiniflow 开源的 RAG(Retrieval-Augmented Generation)全流程框架,支持 文档解析→向量化→检索→生成 一体化。本文基于 v0.19.1-slim 镜像,手把手带你完成:
- Docker Compose 一键启动
- 解决 Redis 内存过度提交警告
- 系统架构与端口映射全解析
- Python 代码示例:上传文档、问答对话
- 性能调优 & 常见问题 FAQ
阅读时间:15 min;动手时间:30 min。
目录(点击锚点直达)
一、背景与核心概念
1.1 什么是 RAGFlow?
RAGFlow 是一个开源的 RAG(Retrieval-Augmented Generation)全流程框架,它整合了文档处理、向量化、检索和生成等关键环节,为构建企业级 AI 应用提供了完整的解决方案。
| 维度 | 说明 |
|---|---|
| 定位 | 开源 RAG 全流程框架 |
| 核心能力 | 文档解析、向量化、检索、生成 |
| 技术栈 | Python + FastAPI + PyTorch + Milvus/ES + MinIO + MySQL + Redis |
| 适用场景 | 企业知识库、智能客服、论文助手 |
1.2 思维导图:RAGFlow 知识体系

mindmap
root((RAGFlow))
数据层
MySQL(元数据)
MinIO(对象存储)
ES(向量检索)
服务层
ragflow-server(主服务)
ragflow-task(任务队列)
缓存层
Redis(缓存/队列)
接入层
Nginx(反向代理)
Web UI
二、环境准备
2.1 硬件 & 系统
为了确保 RAGFlow 能够正常运行,需要满足一定的硬件要求:
| 项目 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 4 核 | 8 核 |
| 内存 | 8 GB | 16 GB |
| 磁盘 | 50 GB | 100 GB SSD |
| OS | Ubuntu 20.04+ / CentOS 7+ |
2.2 软件依赖
一键脚本(Ubuntu/CentOS 通用):
#!/bin/bash
# install_docker.sh
sudo apt update && sudo apt install -y docker.io docker-compose-plugin
sudo systemctl enable --now docker
sudo usermod -aG docker $USER # 免 sudo 运行
newgrp docker
三、Docker Compose 启动全流程
3.1 目录结构
ragflow/
├── docker-compose.yml
├── .env
├── volumes/ # 持久化数据
│ ├── mysql/
│ ├── es/
└── minio/
3.2 核心 docker-compose.yml(精简版)
version: "3.8"
services:
mysql:
image: mysql:8.0.39
container_name: ragflow-mysql
environment:
MYSQL_ROOT_PASSWORD: rag2025
ports: ["5455:3306"]
volumes: ["./volumes/mysql:/var/lib/mysql"]
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
timeout: 20s
retries: 10
redis:
image: valkey/valkey:8
container_name: ragflow-redis
ports: ["6379:6379"]
sysctls:
- net.core.somaxconn=511
healthcheck:
test: ["CMD", "valkey-cli", "ping"]
interval: 30s
minio:
image: quay.io/minio/minio:RELEASE.2025-06-13T11-33-47Z
container_name: ragflow-minio
command: server /data --console-address ":9001"
ports: ["9000:9000", "9001:9001"]
environment:
MINIO_ROOT_USER: rag
MINIO_ROOT_PASSWORD: rag2025
volumes: ["./volumes/minio:/data"]
es-01:
image: elasticsearch:8.11.3
container_name: ragflow-es-01
environment:
discovery.type: single-node
xpack.security.enabled: false
ports: ["1200:9200"]
volumes: ["./volumes/es:/usr/share/elasticsearch/data"]
server:
image: infiniflow/ragflow:v0.19.1-slim
container_name: ragflow-server
ports:
- "8081:80" # Web UI
- "9380:9380" # API
- "5678:5678" # 内部服务
depends_on:
- mysql
- redis
- minio
- es-01
3.3 启动命令
cd ragflow
docker compose -p ragflow up -d
docker compose -p ragflow ps # 查看状态
四、Redis 内存警告根治
4.1 现象复现
启动后日志出现:
WARNING Memory overcommit must be enabled! ...
4.2 原理剖析
- vm.overcommit_memory=2:禁止内存过度提交,Redis 调用
fork()时可能失败。 - vm.overcommit_memory=1:允许内核过度提交,Redis 推荐设置。
4.3 一步解决
# 临时生效
sudo sysctl vm.overcommit_memory=1
# 永久生效
echo "vm.overcommit_memory = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# 重启 Redis
docker restart ragflow-redis
4.4 验证
$ cat /proc/sys/vm/overcommit_memory
1
$ docker logs ragflow-redis 2>&1 | grep -i warning || echo "clean"
clean
五、系统架构与端口映射
5.1 架构图
5.2 端口速查表
| 主机端口 | 容器端口 | 服务 | 用途 |
|---|---|---|---|
| 8081 | 80 | ragflow-server | Web UI |
| 9380 | 9380 | ragflow-server | REST API |
| 6379 | 6379 | Redis | 缓存/队列 |
| 5455 | 3306 | MySQL | 元数据 |
| 1200 | 9200 | Elasticsearch | 向量检索 |
| 9000/9001 | 9000/9001 | MinIO | 对象存储 |
六、Python 实战:文档问答
6.1 安装 SDK
pip install requests tqdm
6.2 上传文档并问答
# ragflow_demo.py
import requests
import json
import time
# API 基础配置
BASE = "http://localhost:9380/api/v1"
HEADERS = {"Authorization": "Bearer ragflow"} # 默认 token
def upload_document(file_path):
"""
上传文档到 RAGFlow
Args:
file_path (str): 文档文件路径
Returns:
str: 文档 ID
"""
url = f"{BASE}/datasets/1/documents"
try:
# 打开文件并上传
with open(file_path, "rb") as file:
files = {"file": file}
response = requests.post(url, files=files, headers=HEADERS)
response.raise_for_status()
doc_id = response.json()["data"]["id"]
print(f"文档上传成功,ID: {doc_id}")
return doc_id
except requests.exceptions.RequestException as e:
print(f"上传文档时发生错误: {e}")
return None
except FileNotFoundError:
print(f"文件未找到: {file_path}")
return None
def ask_question(question):
"""
向 RAGFlow 提问
Args:
question (str): 问题
Returns:
str: 回答
"""
try:
# 创建对话
conv_url = f"{BASE}/conversations"
conv_data = {"name": "测试对话", "dataset_ids": [1]}
conv_response = requests.post(conv_url, json=conv_data, headers=HEADERS)
conv_response.raise_for_status()
conv_id = conv_response.json()["data"]["id"]
# 发送问题
ask_url = f"{BASE}/conversations/{conv_id}/completions"
ask_data = {"question": question}
ask_response = requests.post(ask_url, json=ask_data, headers=HEADERS)
ask_response.raise_for_status()
answer = ask_response.json()["data"]["answer"]
return answer
except requests.exceptions.RequestException as e:
print(f"提问时发生错误: {e}")
return None
if __name__ == "__main__":
# 上传文档
doc_id = upload_document("ragflow_intro.pdf")
if doc_id:
# 等待文档解析完成
print("等待文档解析完成...")
time.sleep(5)
# 提问
question = "RAGFlow 的核心功能有哪些?"
answer = ask_question(question)
if answer:
print(f"问题: {question}")
print(f"回答: {answer}")
else:
print("获取回答失败")
else:
print("文档上传失败")
6.3 运行效果
$ python ragflow_demo.py
文档上传成功,ID: 42
等待文档解析完成...
问题: RAGFlow 的核心功能有哪些?
回答: RAGFlow 支持文档解析、向量化、检索与生成,适用于企业知识库等场景。
七、性能调优 & 监控
7.1 资源限制(示例)
# docker-compose.yml 片段
services:
es-01:
deploy:
resources:
limits:
memory: 4G
reservations:
memory: 2G
7.2 监控指标
| 指标 | 工具 | 告警阈值 |
|---|---|---|
| CPU/内存 | docker stats | CPU>80%, MEM>85% |
| 磁盘 | MinIO 控制台 | 使用率>90% |
| 检索延迟 | Elasticsearch API | P99>500 ms |
八、常见问题 FAQ
| 问题 | 原因 | 解决 |
|---|---|---|
vm.overcommit_memory 警告 | 未设置内核参数 | 见第 4 章 |
| Web UI 打不开 | 端口未放行 | 检查防火墙 ufw allow 8081 |
| 上传大文件 413 | Nginx 限制 | 修改 client_max_body_size 100M |
| 检索结果为空 | 文档未解析完 | 等待或查看任务队列 |
九、总结与最佳实践
通过本文的详细讲解和实战演练,我们掌握了 RAGFlow 的本地部署和使用方法:
- 一键启动:
docker compose up -d - 必做调优:
vm.overcommit_memory=1 - 监控三板斧:
docker stats+curl+ 日志 - 扩展阅读:官方文档、源码、社区微信群
在实际应用中,还需要根据具体需求进行定制化配置和优化,以获得最佳性能。
9198

被折叠的 条评论
为什么被折叠?



