给NAS装个开源的企业级AI知识库引擎RAGFlow
图片我之前在 NAS 上部署过几款轻量知识库工具,用来整理个人文档基本够用。但当资料里出现扫描版 PDF、复杂表格、图文混排内容,或者需要查看答案引用出处时,轻量方案的局限就比较明显了。
这次我尝试的是 RAGFlow。它并不是一款主打轻量和即装即用的知识库工具,而是更偏向复杂文档解析、可控切片、混合检索和工作流编排。它的部署门槛和资源占用更高,但在我的使用场景里,得到的检索效果和可控性也明显更完整。
在我的复杂文档场景里,RAGFlow 比 AnythingLLM 更适合,但它并不是无条件替代:AnythingLLM 更轻量,而 RAGFlow 更强调解析、检索和流程控制。
关于RAGFlow
图片🔺什么是RAGFlow?RAGFlow能做什么?
RAGFlow是InfiniFlow开源的一体化RAG(Retrieval-Augmented Generation,检索增强生成)引擎,目前在GitHub上获得超过83.3k的Star。它整合了深度文档理解、可控切片、多路检索、可追溯引用、可视化界面、Agent能力和企业级数据源连接等模块,用于搭建知识库问答、智能客服、内部文档检索等AI工作流。
这,就是我理想知识库的最终形态
结论只有一个:震撼。
它几乎以一种“降维打击”的姿态,轻松超越了我之前使用的 AnythingLLM 和IMA。
毫不夸张地说,RAGFlow 基本上就是我心目中理想知识库的最终形态。
项目地址:https://github.com/infiniflow/ragflow
RAGFlow的优势
RAGFlow 是一款深度文档理解与智能检索增强生成系统,通过视觉模型与OCR技术解析PDF、Word、PPT、Excel、图片及网页等多样格式,自动识别文档的标题层级、段落结构、表格与图文关系;
在此基础上,提供针对书籍、论文、简历等不同内容类型的模板化切片策略,利用NLP进行语义感知分块,避免机械切割导致的上下文断裂。
系统支持检索结果可追溯至原文片段,并以可视化chunk呈现,确保答案来源清晰可查。在检索层面,它内置多路召回、重排与多模型融合策略,显著提升检索质量与答案准确性;
同时原生集成Ollama、OpenAI、Azure、Claude(Anthropic)及硅基流动等多种主流大模型提供商,便于灵活选用本地或云端模型。
此外,RAGFlow还内置可视化工作流引擎,支持通过拖拽构建Agent流程,实现多跳推理与异构数据融合,从而一站式完成从文档解析、知识库构建到智能问答的全链路任务。
威联通NAS安装RAGFlow教程
RAGFlow 用的是Docker Compose 部署方式,硬件要求为 CPU 至少 4 核、内存 16 GB 及以上、硬盘 50 GB 及以上,刚好是QuX05系列NAS的起点配置。同时需要 Docker 24.0.0+ 和 Docker Compose v2.26.1+ 版本。本次演示使用的是威联通 Qu805 NAS,配备 16GB 内存,满足上述条件;整个部署过程需拉取多个 Docker 镜像,因此必须保持稳定的网络连接(即“你懂的联网”)。
图片🔺先在Docker目录中(威联通默认的Docker目录为"Container")新建一个"RagFlow"的文件夹。手动创建好这些子目录(mysql/data、es/data、minio/data、redis/data、logs、data)。
version: '3.8'
services:
# ------------------- 数据库服务 -------------------
mysql:
image: mysql:8.0
container_name: ragflow-mysql
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=ragflow_root_123 # 请修改
- MYSQL_USER=ragflow
- MYSQL_PASSWORD=ragflow_123 # 请修改
- MYSQL_DATABASE=ragflow
- TZ=Asia/Shanghai
volumes:
- /share/Container/ragflow/mysql/data:/var/lib/mysql
- /share/Container/ragflow/mysql/init:/docker-entrypoint-initdb.d
ports:
- "3306:3306" # 可改为其他主机端口
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-u", "ragflow", "-pragflow_123"]
interval: 10s
timeout: 5s
retries: 5
networks:
- ragflow
# ------------------- 向量数据库(Elasticsearch) -------------------
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.3
container_name: ragflow-es
restart: unless-stopped
environment:
- discovery.type=single-node
- ES_JAVA_OPTS=-Xms1g -Xmx1g
- xpack.security.enabled=false
- TZ=Asia/Shanghai
volumes:
- /share/Container/ragflow/es/data:/usr/share/elasticsearch/data
ports:
- "9200:9200"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9200"]
interval: 30s
timeout: 10s
retries: 5
networks:
- ragflow
ulimits:
memlock:
soft: -1
hard: -1
# ------------------- 对象存储(MinIO) -------------------
minio:
image: minio/minio:latest
container_name: ragflow-minio
restart: unless-stopped
command: server /data --console-address ":9001"
environment:
- MINIO_ROOT_USER=ragflow
- MINIO_ROOT_PASSWORD=ragflow_minio_123 # 请修改
- TZ=Asia/Shanghai
volumes:
- /share/Container/ragflow/minio/data:/data
ports:
- "9000:9000"
- "9001:9001"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 10s
retries: 5
networks:
- ragflow
# ------------------- 缓存/消息(Redis) -------------------
redis:
image: redis:7.2-alpine
container_name: ragflow-redis
restart: unless-stopped
command: redis-server --requirepass ragflow_redis_123 # 请修改
volumes:
- /share/Container/ragflow/redis/data:/data
ports:
- "6379:6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
networks:
- ragflow
# ------------------- RAGFlow 核心服务 -------------------
ragflow:
image: infiniflow/ragflow:v0.15.0-slim # 可更换为其他tag
container_name: ragflow-server
restart: on-failure
depends_on:
mysql:
condition: service_healthy
es01:
condition: service_healthy
minio:
condition: service_healthy
redis:
condition: service_healthy
environment:
- TZ=Asia/Shanghai
- HF_ENDPOINT=https://hf-mirror.com # 国内加速,可删
- MACOS=false
# ---------- 数据库连接配置 ----------
- RAGFLOW_MYSQL_HOST=mysql
- RAGFLOW_MYSQL_PORT=3306
- RAGFLOW_MYSQL_USER=ragflow
- RAGFLOW_MYSQL_PASSWORD=ragflow_123 # 与上面一致
- RAGFLOW_MYSQL_DATABASE=ragflow
# ---------- Elasticsearch ----------
- RAGFLOW_ES_HOSTS=http://es01:9200
# ---------- MinIO ----------
- RAGFLOW_MINIO_ENDPOINT=minio:9000
- RAGFLOW_MINIO_ACCESS_KEY=ragflow
- RAGFLOW_MINIO_SECRET_KEY=ragflow_minio_123 # 与上面一致
- RAGFLOW_MINIO_BUCKET_NAME=ragflow
# ---------- Redis ----------
- RAGFLOW_REDIS_HOST=redis
- RAGFLOW_REDIS_PORT=6379
- RAGFLOW_REDIS_PASSWORD=ragflow_redis_123 # 与上面一致
# ---------- 其他 ----------
- RAGFLOW_SERVER_HTTP_PORT=9380 # 内部端口
- RAGFLOW_LOG_LEVEL=INFO
ports:
- "8080:80" # 外部访问HTTP(避开NAS 80)
- "8443:443" # HTTPS(如需)
volumes:
- /share/Container/ragflow/logs:/ragflow/logs
- /share/Container/ragflow/data:/ragflow/data
networks:
- ragflow
networks:
ragflow:
name: ragflow_network
driver: bridge
使用前必须修改的配置
数据库密码
MYSQL_ROOT_PASSWORD、MYSQL_PASSWORD、MINIO_ROOT_PASSWORD、RAGFLOW_REDIS_PASSWORD 等,务必修改为强密码,并保持服务间一致。
端口映射
我已将 RAGFlow Web 端口映射到主机的 8080(HTTP)和 8443(HTTPS)。如果冲突可继续改,但要保证容器内部端口(80、443)不变。
镜像版本
infiniflow/ragflow:v0.15.0-slim 是目前稳定版。如果你需要 GPU 支持,可换成 v0.15.0(完整版)并增加设备映射,但威联通 NAS 多数无 GPU,用 -slim 即可。
图片几个端口的映射说明。
图片
图片部署步骤(Container Station 图形界面)
创建文件夹
在 NAS 的 /share 下建立 Container/ragflow 及其子目录(如 mysql/data 等),确保权限可读写(建议设置为 777 或 admin 拥有)。
打开 Container Station → 左侧点击 “创建” → “创建应用程序”。
给应用程序起名(如 ragflow),将上面完整的 YAML 内容粘贴到代码框。
点击 “验证 YAML”,确保无语法错误。
点击 “应用”,系统会自动拉取镜像并启动所有容器。
图片点进去之后你会发现相关的所有的服务都启动了。
图片当然,如果你跟我一样报错了mysql文件夹权限不够的情况的话,你可以看看下面这个解决方案。
图片就是把你mysql/data文件的权限改一下,在 NAS 文件管理器中,找到 /share/Container/ragflow/mysql/data 文件夹,右键 → 属性 → 权限,设置为 “所有用户” 具有 “读写” 权限。
图片打开浏览器,访问 http://NAS的IP地址:8080 。
图片RAGFlow的主程序容器为“docker-ragflow-cpu-1”,点开这个容器之后,80端口映射的就是它的Web页面打开端口。
首次启动时,RAGFlow 和各依赖服务需要完成初始化,短时间内可能出现 502。先等待容器完成启动,再刷新页面。如果数分钟后仍然显示 502,应检查 RAGFlow、MySQL、Elasticsearch 和 MinIO 的日志,而不是继续等待。
RAGFlow能干什么?为什么我会觉得它值得装?
第一,无可匹敌的文档识别能力
图片🔺RAGFlow 在文档解析方面展现出了无可匹敌的能力,其内置的深度解析引擎体积接近 10GB,能够全面覆盖 DOCX、PPT、PDF 等主流文档格式。不仅如此,它还能精准识别图片及扫描件中的文字内容,有效弥补了同类工具(如 AnythingLLM)在处理非文本型 PDF 时容易输出乱码的短板。这种强大的解析能力,使得 RAGFlow 在复杂文档的自动化处理与知识抽取上具备了显著优势。
这彻底解决了AnythingLLM的一大硬伤——无法处理扫描版或拍照版的PDF,否则就会输出一堆乱码。
图片🔺而在RAGFlow里,哪怕你的文档是拍照的、带水印的、扫描的,它都能准确无误地提取出纯净的文本内容。
第二,精准灵活的智能分块策略
图片🔺在 RAG 系统的实际应用中,知识库的最终效果,往往取决于文档“切块”是否科学。
AnythingLLM 采用固定的字符长度进行机械切割,容易割裂语义、丢失上下文,导致检索与问答质量大打折扣。
而 RAGFlow 则内置了 超过 10 种精细化的分块策略,能够根据文档结构和内容类型灵活选择——例如基于标题层级、段落语义、固定模板(书籍/论文/简历)等不同方式实现智能分块。这种“Smart Chunking”机制,确保每个知识块既保留完整语境,又具备清晰的边界,为后续的精准检索与高效召回奠定坚实基础。
图片🔺针对不同类型的文档,RAGFlow 支持在文件上传后,灵活定制最适合的切分方式,实现场景化的精细解析:
普通文档:采用通用切分策略,适配常规文本结构,保障基础解析效率。
Excel 表格:支持“一行问,一行答”的精准对应切分,使表格数据可直接转化为高质量的知识问答对。
书籍或法规:可按章节、条款等知识脉络进行结构化切分,完整保留原文档的逻辑体系与层次关系。
这种灵活的多策略切分机制,使知识库的构建不再受限于文档格式,而是真正以知识单元为核心,为后续检索与问答提供更精确、更结构化的数据基础。
图片这种精细度,确保了知识在被AI理解前,就已经具备了最优的逻辑结构。
第三,颠覆性的数据增强与编辑功能
图片🔺RAGFlow在文档处理上的核心优势,在于其不止于“切片”,更在切片基础上引入大模型驱动的“数据增强”机制。这一差异化的预处理流程使它在知识检索与问答准确性上全面领先:
自动提取关键词:为每个知识块生成精准核心词,提升检索命中率。
自动生成关联问题:针对每个知识块自动模拟5-6个用户可能提出的问题,帮助系统在面对模糊查询时更快速、更精准地定位相关内容。
支持自定义标签:允许用户按实际业务场景为知识块添加个性化标签,增强管理灵活性。
更关键的是,所有解析结果、AI生成的关键词与问题均支持用户随时手动修改与优化,真正实现了知识库的精细可控。凭借这一体系化设计,RAGFlow在知识处理深度与灵活度方面明显优于AnythingLLM和IMA等同类工具。
第四,多路召回与精准重排
图片🔺RAGFlow 的搜索机制并非依赖单一的向量匹配,而是采用多路召回策略,从多个维度并行检索答案:
向量语义匹配:理解问题的深层含义。
全文检索:覆盖关键词的精确匹配。
知识结构匹配:利用文档的层级关系辅助定位。
这种多路并行的设计,相比传统单维度检索路径,显著提升了搜索的覆盖面和精准度。
在此基础上,RAGFlow 进一步引入 Rerank(重排)模型,对初步召回的结果进行二次排序,将最相关的答案优先呈现,确保用户能快速获取高价值信息。
图片尤为实用的是,当你点击搜索结果时,系统可直接在原文中高亮显示出处,并完整呈现包含图片在内的上下文信息。对于工程人员查阅规范、图集等专业资料而言,这一功能极大简化了原文追溯过程,有效保障了依据的准确性和工作效率。
第五,强大的API与自动化潜力
RAGFlow 在设计之初即充分考虑了系统的可扩展性与外部生态的联动能力。它提供了功能完备的 API 接口,能够与 N8N、MCP(AI 编程体)以及其他自动化工具或 RPA 平台实现无缝对接。通过这些接口,用户可以轻松完成文件自动上传、知识库检索、问答触发等高级任务的编排与集成,从而实现知识管理流程的自动化和智能化。这一特性不仅大幅提升了 RAGFlow 在实际业务场景中的适用性,也为其在复杂企业架构中的深度嵌入与二次开发提供了广阔的想象空间。
聊天的时候如果想优先使用知识库,需要在聊天设置中手动把知识库添加进来。
RAGFlow的限制
虽然 RAGFlow 在功能和效果上表现出色,但客观来说,它在落地应用中确实存在两个较明显的“门槛”:
1. 硬件配置要求偏高
根据官方建议,RAGFlow 的最低配置为 4 核 CPU、16 GB 内存及 50 GB 可用存储空间。这一要求显著高于多数个人电脑的平均水平,尤其对于同时运行其他服务的设备来说,资源压力更为突出。这意味着用户可能需要专门准备一台性能较强的主机或服务器来承载 RAGFlow 的运行,这在一定程度上抬高了其使用门槛。
2. 部署过程较为复杂,且存储路径迁移不便
RAGFlow 基于 Docker Compose 进行容器化部署,依赖 Docker 环境,这对不熟悉容器技术的用户而言,本身就构成一定的学习成本。
更为棘手的是,其默认安装路径指向系统盘(通常为 C 盘)。考虑到镜像体积和数据积累,系统盘空间很容易被占满。若要将 RAGFlow 迁移至其他盘符(如 D 盘或 NAS 共享存储),用户需要手动处理 Docker 数据目录迁移、配置软链接或修改 Compose 文件中的挂载路径等操作。这一过程对新手不够友好,需要一定的技术折腾和排查能力。
尽管如此,对于具备一定技术基础且硬件资源充足的用户而言,这两项短板在 RAGFlow 带来的解析能力和检索效果面前,往往仍在可接受的范围内。
结语
RAGFlow在NAS上可以完成深度文档解析、知识库问答、知识图谱生成和引用溯源这些工作。文中展示的是它的基础功能。多策略检索配置、Agent工作流编排、文档解析模板这些功能,有需要的小伙伴可以部署之后自行测试。
如果你需要管理大量文档,并且希望AI的回答能标注出处,可以考虑在NAS上部署RAGFlow。部署前确认内存达到16GB,部署过程中注意修改冲突端口和设置vm.max_map_count参数。
如果你想看更多NAS、自托管Docker等相关玩法,也欢迎继续关注。没写过的内容,也可以评论区留言交流。
本篇就到这里,我们下篇再见。
