快速入门
RAGFlow 是一个基于深度文档理解的开源 RAG(检索增强生成)引擎。当与 LLM 集成时,它能够提供真实可靠的问答能力,并以各种复杂格式数据中的可靠引证为依据。
本快速入门指南描述了一个通用流程,包括从
- 启动本地 RAGFlow 服务器,
- 创建知识库,
- 干预文件解析,到
- 建立基于您数据集的 AI 对话。
我们官方支持 x86 CPU 和 Nvidia GPU,本文档提供了在 x86 平台上使用 Docker 部署 RAGFlow 的说明。虽然我们也在 ARM64 平台上测试 RAGFlow,但我们不维护适用于 ARM 的 RAGFlow Docker 镜像。
如果您在 ARM 平台上,请遵循本指南来构建 RAGFlow Docker 镜像。
先决条件
- CPU ≥ 4 核 (x86);
- 内存 ≥ 16 GB;
- 硬盘空间 ≥ 50 GB;
- Docker ≥ 24.0.0 和 Docker Compose ≥ v2.26.1。
- gVisor: 仅在您打算使用 RAGFlow 的代码执行器(沙箱)功能时需要。
如果您尚未在本地机器(Windows、Mac 或 Linux)上安装 Docker,请参阅安装 Docker Engine。
启动服务器
本节提供了在 Linux 上设置 RAGFlow 服务器的说明。如果您使用的是其他操作系统,请勿担心。大多数步骤是类似的。
1. 确保 vm.max_map_count
≥ 262144
vm.max_map_count
。此值设置了进程可以拥有的最大内存映射区域数量。其默认值为 65530。虽然大多数应用程序需要少于一千个映射,但减小此值可能导致异常行为,并且当进程达到限制时,系统将抛出内存不足错误。
RAGFlow v0.18.0 使用 Elasticsearch 或 Infinity 进行多次召回。正确设置 vm.max_map_count
的值对于 Elasticsearch 组件的正常运行至关重要。
- Linux
- macOS
- Windows
1.1. 检查 vm.max_map_count
的值
$ sysctl vm.max_map_count
1.2. 如果 vm.max_map_count
的值不是至少 262144,请将其重置为该值。
$ sudo sysctl -w vm.max_map_count=262144
此更改将在系统重启后重置。如果您下次启动服务器时忘记更新此值,可能会遇到 Can't connect to ES cluster
异常。
1.3. 为确保您的更改永久生效,请相应地在 /etc/sysctl.conf 中添加或更新 vm.max_map_count
的值
vm.max_map_count=262144
如果您在使用 Docker Desktop 的 macOS 上,运行以下命令更新 vm.max_map_count
docker run --rm --privileged --pid=host alpine sysctl -w vm.max_map_count=262144
此更改将在系统重启后重置。如果您下次启动服务器时忘记更新此值,可能会遇到 Can't connect to ES cluster
异常。
要使您的更改持久化,请创建一个包含适当设置的文件
1.1. 创建一个文件
sudo nano /Library/LaunchDaemons/com.user.vmmaxmap.plist
1.2. 打开文件
sudo launchctl load /Library/LaunchDaemons/com.user.vmmaxmap.plist
1.3. 添加设置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.vmmaxmap</string>
<key>ProgramArguments</key>
<array>
<string>/usr/sbin/sysctl</string>
<string>-w</string>
<string>vm.max_map_count=262144</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
1.4. 保存文件后,加载新的守护程序
sudo launchctl load /Library/LaunchDaemons/com.user.vmmaxmap.plist
如果以上步骤不起作用,请考虑使用此变通方法,该方法使用容器且无需手动编辑 macOS 设置。
如果您在使用 Docker Desktop 的 Windows 上,则必须使用 docker-machine 来设置 vm.max_map_count
:
$ docker-machine ssh
$ sudo sysctl -w vm.max_map_count=262144
如果您在使用 Docker Desktop WSL 2 后端的 Windows 上,则使用 docker-desktop 来设置 vm.max_map_count
:
1.1. 在 WSL 中运行以下命令
$ wsl -d docker-desktop -u root
$ sysctl -w vm.max_map_count=262144
此更改将在您重启 Docker 后重置。如果您下次启动服务器时忘记更新此值,可能会遇到 Can't connect to ES cluster
异常。
1.2. 如果您不想每次重启 Docker 都运行这些命令,可以按如下方式更新 %USERPROFILE%.wslconfig
以使您的更改永久生效并对所有 WSL 分发版全局生效
[wsl2]
kernelCommandLine = "sysctl.vm.max_map_count=262144"
这将使所有 WSL2 虚拟机在启动时都被分配该设置。
如果您使用的是 Windows 11 或 Windows 10 版本 22H2,并且已安装 Microsoft Store 版本的 WSL,您还可以更新 docker-desktop WSL 分发版中的 /etc/sysctl.conf 以使您的更改永久生效
$ wsl -d docker-desktop -u root
$ vi /etc/sysctl.conf
# Append a line, which reads:
vm.max_map_count = 262144
-
克隆仓库
$ git clone https://github.com/infiniflow/ragflow.git
$ cd ragflow/docker
$ git checkout -f v0.18.0 -
使用预构建的 Docker 镜像启动服务器
注意以下命令下载 RAGFlow Docker 镜像的
v0.18.0-slim
版本。请参阅下表了解不同 RAGFlow 版本的描述。要下载不同于v0.18.0-slim
的 RAGFlow 版本,在使用docker compose
启动服务器之前,请相应地更新 docker/.env 文件中的RAGFLOW_IMAGE
变量。例如:对于完整版本v0.18.0
,将RAGFLOW_IMAGE
设置为infiniflow/ragflow:v0.18.0
。# Use CPU for embedding and DeepDoc tasks:
$ docker compose -f docker-compose.yml up -d
# To use GPU to accelerate embedding and DeepDoc tasks:
# docker compose -f docker-compose-gpu.yml up -d
RAGFlow 镜像标签 | 镜像大小 (GB) | 包含嵌入模型和 Python 包? | 稳定? |
---|---|---|---|
v0.18.0 | ≈9 | ✔️ | 稳定发布版本 |
v0.18.0-slim | ≈2 | ❌ | 稳定发布版本 |
nightly | ≈9 | ✔️ | 不稳定的 nightly 构建 |
nightly-slim | ≈2 | ❌ | 不稳定的 nightly 构建 |
-
服务器启动并运行后检查其状态
$ docker logs -f ragflow-server
以下输出确认系统已成功启动
____ ___ ______ ______ __
/ __ \ / | / ____// ____// /____ _ __
/ /_/ // /| | / / __ / /_ / // __ \| | /| / /
/ _, _// ___ |/ /_/ // __/ / // /_/ /| |/ |/ /
/_/ |_|/_/ |_|\____//_/ /_/ \____/ |__/|__/
* Running on all addresses (0.0.0.0)
如果您跳过此确认步骤直接登录 RAGFlow,您的浏览器可能会提示 network anomaly
(网络异常)错误,因为此时您的 RAGFlow 可能尚未完全初始化。
- 在您的网页浏览器中,输入您的服务器 IP 地址并登录 RAGFlow。
使用默认设置时,您只需输入 http://您的机器IP地址
(不带端口号),因为使用默认配置时可以省略默认的 HTTP 服务端口 80
。
配置 LLM
RAGFlow 是一个 RAG 引擎,需要与 LLM 配合工作才能提供有根据、无幻觉的问答能力。RAGFlow 支持大多数主流 LLM。有关支持模型的完整列表,请参阅支持的模型。
RAGFlow 也支持使用 Ollama、Xinference 或 LocalAI 在本地部署 LLM,但这部分内容不包含在本快速入门指南中。
添加和配置 LLM
-
点击页面右上角的您的标志 > 模型提供商
每个 RAGFlow 账户都可以免费使用 text-embedding-v2,这是通义千问的一个嵌入模型。这就是您能在已添加模型列表中看到通义千问的原因。您可能需要在后续更新您的通义千问 API 密钥。
-
点击所需的 LLM 并相应地更新 API 密钥(此处以 DeepSeek-V2 为例)
您添加的模型如下所示
-
点击 系统模型设置 选择默认模型
- 聊天模型,
- 嵌入模型,
- 图片转文本模型。
某些模型,例如图片转文本模型 qwen-vl-max,是特定 LLM 的附属模型。您可能需要更新您的 API 密钥才能访问这些模型。
创建您的第一个知识库
您可以在 RAGFlow 中将文件上传到知识库并将其解析为数据集。知识库实际上是数据集的集合。RAGFlow 中的问答可以基于特定的知识库或多个知识库。RAGFlow 支持的文件格式包括文档(PDF、DOC、DOCX、TXT、MD)、表格(CSV、XLSX、XLS)、图片(JPEG、JPG、PNG、TIF、GIF)和幻灯片(PPT、PPTX)。
创建您的第一个知识库
-
点击页面顶部中间的 知识库 标签页 > 创建知识库。
-
输入您的知识库名称并点击 确定 确认更改。
您将被带到知识库的 配置 页面。
-
RAGFlow 提供了多种分块模板,可适应不同的文档布局和文件格式。请为您的知识库选择嵌入模型和分块方法(模板)。
一旦您选择了嵌入模型并用它解析了文件,您将无法更改它。显而易见的原因是,我们必须确保特定知识库中的所有文件都使用相同的嵌入模型进行解析(确保它们在相同的嵌入空间中进行比较)。
您将被带到知识库的 数据集 页面。
-
点击 + 添加文件 > 本地文件 开始将特定文件上传到知识库。
-
在已上传的文件条目中,点击播放按钮开始文件解析
当文件解析完成后,其解析状态将变为 成功。
干预文件解析
RAGFlow 具有可见性和可解释性,允许您查看分块结果并在必要时进行干预。操作方法如下
-
点击已完成文件解析的文件以查看分块结果
您将被带到 分块 页面
-
将鼠标悬停在每个快照上以快速查看每个分块。
-
双击分块文本以添加关键词或在必要时进行手动更改
您可以向文件分块添加关键词,以提高其在包含这些关键词的查询中的排名。此操作会增加其关键词权重,并可以提高其在搜索列表中的位置。
-
在检索测试中,在 测试文本 中快速提问,以再次检查您的配置是否有效
从下图可以看出,RAGFlow 以真实可靠的引证进行回应。
设置 AI 对话
RAGFlow 中的对话基于特定的知识库或多个知识库。创建知识库并完成文件解析后,您就可以开始 AI 对话了。
-
点击页面顶部中间的 聊天 标签页 > 创建助手 显示 聊天配置 对话框,用于您的下一次对话。
RAGFlow 提供了为每个对话选择不同聊天模型的灵活性,同时允许您在 系统模型设置 中设置默认模型。
-
更新 助手设置
- 命名您的助手并指定您的知识库。
- 空响应:
- 如果您希望 RAGFlow 的答案仅限于您的知识库,请在此处设置一个响应。这样当它未能检索到答案时,它会统一回应您在此处设置的内容。
- 如果您希望 RAGFlow 在未能从您的知识库中检索到答案时进行自由发挥,请将其留空,这可能会导致幻觉。
-
更新 提示引擎 或一开始保持原样。
-
更新 模型设置。
-
现在,开始吧
RAGFlow 还提供了 HTTP 和 Python API,供您将 RAGFlow 的功能集成到您的应用程序中。阅读以下文档以获取更多信息