前置知识
1.介绍
RagFlow 是一个开源项目,其源代码托管在 GitHub 上(通常为:github.com/infiniflow/… Apache 2.0 或 MIT),允许用户自由使用、修改和分发,适用于个人、研究和商业用途。
RagFlow 是基于 检索增强生成(Retrieval-Augmented Generation, RAG) 技术构建的一个企业级文档问答与知识处理平台。它的核心目标是帮助用户将非结构化的文档(如 PDF、Word、Excel、PPT、网页等)转化为可检索、可问答的知识系统。
主要功能与作用包括:
- 多格式文档解析
- 支持上传并解析多种文件格式,包括:
- PDF(含扫描件 OCR)
- Word、Excel、PPT
- HTML、TXT、Markdown 等
- 使用先进的布局识别技术(如 PaddleOCR、LayoutParser)精准提取文本、表格、图像标题等结构信息。
- 支持上传并解析多种文件格式,包括:
- 智能知识抽取与向量化
- 将文档内容切片(chunking),结合语义理解进行向量化(embedding),存储到向量数据库中(如 Milvus、Weaviate、Elasticsearch 等)。
- 支持自定义分段策略,保留上下文完整性。
- 基于 RAG 的精准问答
- 用户提问时,系统先从知识库中检索最相关的文档片段,再结合大语言模型(LLM)生成准确、有依据的回答。
- 回答附带原文引用,提升可信度和可追溯性。
- 可视化工作流编排(Flow)
- 提供图形化界面,让用户自定义数据处理流程(如清洗、转换、路由等),实现“低代码”配置 RAG 流程。
- 类似于 LangChain + UI 的理念,但更专注于企业文档场景。
- 支持私有化部署 & 数据安全
- 可部署在本地或私有云环境,保障敏感数据不外泄。
- 适合金融、医疗、法律等对数据隐私要求高的行业。
- 集成多种 LLM 和 Embedding 模型
- 支持接入主流大模型,如:
- 国内:通义千问、百川、ChatGLM、讯飞星火等
- 国外:GPT、Claude、Llama 系列等
- 可灵活切换模型服务提供商。
- 多租户与权限管理
- 支持企业级用户体系,不同团队可拥有独立的知识空间和访问控制
2.对比
ragflow和dify对比,优点是什么?
这是一个非常实用的问题!RagFlow 和 Dify 都是当前热门的开源低代码 AI 应用开发平台,都支持构建基于大模型的知识问答、Agent 等功能。但它们的定位、技术路线和适用场景有显著差异。
下面从多个维度进行详细对比,并重点说明 RagFlow 相对于 Dify 的核心优势(优点) 。
一、整体定位对比
| 维度 | RagFlow | Dify |
|---|---|---|
| 主要目标 | 企业级文档智能:精准解析 + 深度检索 + 可信问答 | 通用 AI 应用开发平台:LLM 编排 + Agent + API 服务 |
| 核心能力 | 强在 复杂文档处理与 RAG 效果优化 | 强在 可视化工作流编排与 AI Agent 构建 |
| 用户群体 | 企业知识库、金融/法律/医疗等专业文档场景 | 开发者、产品经理、创业者快速搭建 AI 应用 |
| 是否强调“可解释性” | ✅ 极其重视(回答带原文引用) | ⚠️ 支持,但非首要目标 |
二、RagFlow 相对于 Dify 的优点举例:
- 更强的文档解析与结构识别能力(核心优势)
| 能力 | RagFlow | Dify |
|---|---|---|
| PDF 解析(含扫描件) | ✅ 使用 PaddleOCR + Layout Parser,识别标题、表格、公式布局 | ❌ 基础 OCR,结构还原弱 |
| 表格内容提取 | ✅ 完整还原 Excel 式表格数据,保留行列关系 | ⚠️ 易丢失格式,变成纯文本 |
| 多级标题识别 | ✅ 自动识别 H1/H2/H3,用于上下文增强 | ⚠️ 不够精细 |
| 公式/代码块处理 | ✅ 特殊区块独立处理 | ❌ 通常混入正文 |
📌 应用场景举例:
- 你上传一份《劳动合同范本》PDF,里面有多个章节、表格薪资标准。
- RagFlow 能准确切分“第五条 工作时间”并保留表格原意
- Dify 可能将表格打散成句子,影响检索准确性
总结:
1.dify适合编排,ragflow适合知识库检索
2.最佳组合模式
| 角色 | 平台 | 职责 |
|---|---|---|
| 🧠 大脑(记忆中枢) | RagFlow | 存储和检索真实知识,保证答案准确 |
| 🗣️ 嘴巴(交互层) | Dify | 理解用户、组织语言、多轮对话 |
| 🤖 身体(行动力) | Dify Agent | 能调用数据库、发邮件、创建工作单等 |
开始安装
RagFlow是以linux容器docker的方式运行,
如果是windows,需要启用wsl
同时安装Docker desktop
(前面的文章有安装步骤)
1.拉
安装RagFlow
git clone https://github.com/infiniflow/ragflow.git
cd ragflow
将ragflow解压到一个文件夹(最好没有中文目录)
将docker改名ragflow方便后续管理(容器启动自动以其命名)
进入ragflow启动cmd
介绍目录:
yml是配置文件,默认使用docker-compose.yml
evn文件是对ragflow的docker提供环境变量,在docker-compose.yml中可以引用这些环境变量
打开env文件默认安装的是slim(精简)版本,也就是不带词嵌入模型的(建议默认配置不用动),如果安装完整版要10几个G,后期可以根据自己的需要安装词嵌入Embedding模型
取消该行注释,使用国内大模型远程库
然后在cmd输入,docker-compose up -d,拉取docker镜像
没有启动docker
启动后重拉
大概率网络问题,重新运行命令即可
2.配
拉取完成,只是端口冲突
将端口改成9080
文章最后有端口介绍
正常启动了!
3.用
我是通过 localhost:9080 (根据你设定的端口来) 访问到前端页面的
启动ollama=》点击我的=》模型供应=》选择olaama,填入如图配置
#需要提前下载配置
deepseek-r1:7b
http://host.docker.internal:11434
如果只有ollama没有模型
新开cmd
#拉取词嵌入模型到本地
ollama pull bge-m3:latest
继续添加词嵌入模型。
注意model name 末尾可能需要latest,可能不用。需要尝试
配置为默认模型
常见问题
1.gpu加速
如果你的电脑有gpu,用到词嵌入等模型,是否速度很慢?到底用没用gpu呢?
1.ragflow只负责调度,ollama才是决定使用gpu
2.ollama会自动优先使用gpu,如果没有,会回退到cpu
3.如果实在不放心,可以cmd 里ollama serve 观察打印信息
注意:如果上传的是pdf,ragflow会启动OCR进行识别信息,此时用到的是ragflow的默认配置,如果cpu版本可能较慢,gpu会明显加速
2.知识库解析简单的文件也一直停留在百分之零点几?
可能是linux虚拟内存太小
打开cmd,进入wsl,输入 free -h
观察
你的swap是不是只有2个G?
依次执行下面命令
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
#观察是swap否变为9G
free -h
#持久化(不然下次还得重新写)
sudo nano /etc/wsl.conf
#添加以下内容:
[boot]
command = "swapon /swapfile"
#保存退出(Ctrl+O → 回车 → Ctrl+X)。
端口介绍
端口 = 计算机上的“门牌号”
- IP 地址是“街道地址”,端口是“房间号”。
- 当别人访问你的服务(如网页、API),必须通过一个端口进入。
- 每个端口在同一时间只能被一个程序占用。
端口分类:哪些能用?哪些不能碰?
| 类型 | 范围 | 是否建议使用 | 常见用途 |
|---|---|---|---|
| 🔴 知名端口(Well-Known Ports) | 0 - 1023 | ❌ 禁止随意使用 | HTTP(80)、HTTPS(443)、SSH(22)、FTP(21) |
| 🟡 注册端口(Registered Ports) | 1024 - 49151 | ⚠️ 可用,但需查重 | MySQL(3306)、Redis(6379)、Docker API(2375) |
| 🟢 动态/私有端口(Ephemeral) | 49152 - 65535 | ✅ 安全可用 | 临时连接、内部通信 |
绝对不要随便占的端口(危险区)
| 端口 | 服务 | 风险 |
|---|---|---|
80 | Web HTTP | Windows/IIS 常默认占用 → 启动失败 |
443 | Web HTTPS | 同上,还可能影响浏览器 |
22 | SSH | Linux 远程登录专用 |
53 | DNS | 域名解析核心服务,极其敏感 |
25 / 465 / 587 | 邮件 SMTP | 企业邮件系统在用 |
3389 | Windows 远程桌面 (RDP) | 安全高危,别暴露 |
如何判断某个端口是否可用?
方法 1:Windows 查看端口占用(管理员 PowerShell)
netstat -ano | findstr :9080
如果没有输出,说明 9080 空闲。
如果有输出,最后一列是 PID,可以用:
tasklist /FI "PID eq 1234"
查看是谁在用。
方法 2:Linux/macOS
lsof -i :9080
# 或
netstat -tuln | grep 9080