ragflow的本地知识库的搭建

161 阅读7分钟

前置知识

1.介绍

RagFlow 是一个开源项目,其源代码托管在 GitHub 上(通常为:github.com/infiniflow/… Apache 2.0 或 MIT),允许用户自由使用、修改和分发,适用于个人、研究和商业用途。

RagFlow 是基于 检索增强生成(Retrieval-Augmented Generation, RAG) 技术构建的一个企业级文档问答与知识处理平台。它的核心目标是帮助用户将非结构化的文档(如 PDF、Word、Excel、PPT、网页等)转化为可检索、可问答的知识系统。

主要功能与作用包括:

  1. 多格式文档解析
    • 支持上传并解析多种文件格式,包括:
      • PDF(含扫描件 OCR)
      • Word、Excel、PPT
      • HTML、TXT、Markdown 等
    • 使用先进的布局识别技术(如 PaddleOCR、LayoutParser)精准提取文本、表格、图像标题等结构信息。
  2. 智能知识抽取与向量化
    • 将文档内容切片(chunking),结合语义理解进行向量化(embedding),存储到向量数据库中(如 Milvus、Weaviate、Elasticsearch 等)。
    • 支持自定义分段策略,保留上下文完整性。
  3. 基于 RAG 的精准问答
  • 用户提问时,系统先从知识库中检索最相关的文档片段,再结合大语言模型(LLM)生成准确、有依据的回答。
  • 回答附带原文引用,提升可信度和可追溯性。
  1. 可视化工作流编排(Flow)
  • 提供图形化界面,让用户自定义数据处理流程(如清洗、转换、路由等),实现“低代码”配置 RAG 流程。
  • 类似于 LangChain + UI 的理念,但更专注于企业文档场景。
  1. 支持私有化部署 & 数据安全
  • 可部署在本地或私有云环境,保障敏感数据不外泄。
  • 适合金融、医疗、法律等对数据隐私要求高的行业。
  1. 集成多种 LLM 和 Embedding 模型
  • 支持接入主流大模型,如:
    • 国内:通义千问、百川、ChatGLM、讯飞星火等
    • 国外:GPT、Claude、Llama 系列等
  • 可灵活切换模型服务提供商。
  1. 多租户与权限管理
  • 支持企业级用户体系,不同团队可拥有独立的知识空间和访问控制

2.对比

ragflow和dify对比,优点是什么?

这是一个非常实用的问题!RagFlowDify 都是当前热门的开源低代码 AI 应用开发平台,都支持构建基于大模型的知识问答、Agent 等功能。但它们的定位、技术路线和适用场景有显著差异

下面从多个维度进行详细对比,并重点说明 RagFlow 相对于 Dify 的核心优势(优点)


一、整体定位对比

维度RagFlowDify
主要目标企业级文档智能:精准解析 + 深度检索 + 可信问答通用 AI 应用开发平台:LLM 编排 + Agent + API 服务
核心能力强在 复杂文档处理与 RAG 效果优化强在 可视化工作流编排与 AI Agent 构建
用户群体企业知识库、金融/法律/医疗等专业文档场景开发者、产品经理、创业者快速搭建 AI 应用
是否强调“可解释性”✅ 极其重视(回答带原文引用)⚠️ 支持,但非首要目标

二、RagFlow 相对于 Dify 的优点举例:

  1. 更强的文档解析与结构识别能力(核心优势)
能力RagFlowDify
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解压到一个文件夹(最好没有中文目录)

image-20251028084226389

image-20251028084746321

将docker改名ragflow方便后续管理(容器启动自动以其命名)

进入ragflow启动cmd

介绍目录:

image-20251028085658882

yml是配置文件,默认使用docker-compose.yml

evn文件是对ragflow的docker提供环境变量,在docker-compose.yml中可以引用这些环境变量

打开env文件默认安装的是slim(精简)版本,也就是不带词嵌入模型的(建议默认配置不用动),如果安装完整版要10几个G,后期可以根据自己的需要安装词嵌入Embedding模型

image-20251028090231849

取消该行注释,使用国内大模型远程库

然后在cmd输入,docker-compose up -d,拉取docker镜像

image-20251028090503309

没有启动docker

启动后重拉

image-20251028093446678

大概率网络问题,重新运行命令即可

image-20251028093522165

2.配

拉取完成,只是端口冲突

将端口改成9080

image-20251028095349743

文章最后有端口介绍

image-20251028095429167转存失败,建议直接上传图片文件

正常启动了!

3.用

image-20251028100711864

我是通过 localhost:9080 (根据你设定的端口来) 访问到前端页面的

image-20251028101351418

启动ollama=》点击我的=》模型供应=》选择olaama,填入如图配置

#需要提前下载配置
deepseek-r1:7b

http://host.docker.internal:11434

如果只有ollama没有模型

新开cmd

#拉取词嵌入模型到本地
ollama pull bge-m3:latest

继续添加词嵌入模型。

image-20251028104405048

注意model name 末尾可能需要latest,可能不用。需要尝试

配置为默认模型

image-20251028104644341

常见问题

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

观察

image-20251028165212552

你的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✅ 安全可用临时连接、内部通信

绝对不要随便占的端口(危险区)

端口服务风险
80Web HTTPWindows/IIS 常默认占用 → 启动失败
443Web HTTPS同上,还可能影响浏览器
22SSHLinux 远程登录专用
53DNS域名解析核心服务,极其敏感
25 / 465 / 587邮件 SMTP企业邮件系统在用
3389Windows 远程桌面 (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