常见问题
解答关于常规功能、问题排查、使用方法等问题。
- 常规功能
- RAGFlow 与其他 RAG 产品有何不同?
- RAGFlow 完整版和 RAGFlow slim 版有什么区别?
- 哪些 embedding 模型可以本地部署?
- 在哪里找到 RAGFlow 的版本号?如何解读?
- 为什么不使用其他开源向量数据库作为文档引擎?
- demo.ragflow.io 与本地部署的开源 RAGFlow 服务有什么区别?
- 为什么 RAGFlow 解析文档比 LangChain 花费更长时间?
- 为什么 RAGFlow 比其他项目需要更多资源?
- RAGFlow 支持哪些架构或设备?
- 你们是否提供用于与第三方应用集成的 API?
- 你们是否支持流式输出?
- 你们是否支持通过 URL 分享对话?
- 你们是否支持多轮对话,将之前的对话作为当前查询的上下文?
- AI 搜索和聊天的主要区别是什么?
- 问题排查
- 如何从头构建 RAGFlow 镜像?
- 无法访问 https://hugging-face.cn
MaxRetryError: HTTPSConnectionPool(host='hf-mirror.com', port=443)
WARNING: can't find /raglof/rag/res/borker.tm
网络异常,您的网络出现异常,无法连接到服务器。
由于没有 redis 连接,实时同义词功能被禁用。
- 为什么我的文档解析停滞在百分之一以下?
- 为什么我的 PDF 解析在接近完成时停滞,而日志中没有任何错误?
索引失败
- 如何查看 RAGFlow 的日志?
- 如何检查 RAGFlow 中各组件的状态?
异常:无法连接到 ES 集群
- 无法启动 ES 容器并收到 `Elasticsearch did not exit normally`
{"data":null,"code":100,"message":"<NotFound '404: Not Found'>"}
Ollama - Mistral 实例运行在 127.0.0.1:11434,但无法在 RagFlow 中添加 Ollama 作为模型
- 你们是否提供使用 DeepDoc 解析 PDF 或其他文件的示例?
FileNotFoundError: [Errno 2] No such file or directory
- 使用方法
常规功能
RAGFlow 与其他 RAG 产品有何不同?
尽管 LLM 极大地推动了自然语言处理(NLP)的发展,但“垃圾进,垃圾出”的现状仍然没有改变。作为回应,RAGFlow 与其他检索增强生成(RAG)产品相比,引入了两个独特的功能。
- 细粒度的文档解析:文档解析涉及图像和表格,并允许您根据需要进行灵活干预。
- 可追溯的答案,减少幻觉:您可以信任 RAGFlow 的回答,因为您可以查看支持这些回答的引用和参考文献。
RAGFlow 完整版和 RAGFlow slim 版有什么区别?
每个 RAGFlow 版本都提供两个版本:
- Slim 版:不包含内置的 embedding 模型,并在版本名称后添加 -slim 后缀。例如:
infiniflow/ragflow:v0.20.0-slim
- 完整版:包含内置的 embedding 模型,版本名称后没有后缀。例如:
infiniflow/ragflow:v0.20.0
哪些 embedding 模型可以本地部署?
RAGFlow 提供两个 Docker 镜像版本,v0.20.0-slim
和 v0.20.0
infiniflow/ragflow:v0.20.0-slim
(默认):不含 embedding 模型的 RAGFlow Docker 镜像。infiniflow/ragflow:v0.20.0
:包含 embedding 模型的 RAGFlow Docker 镜像,其中包括:- 内置 embedding 模型
BAAI/bge-large-zh-v1.5
maidalun1020/bce-embedding-base_v1
- 在 RAGFlow UI 中选择后会下载的 embedding 模型
BAAI/bge-base-en-v1.5
BAAI/bge-large-en-v1.5
BAAI/bge-small-en-v1.5
BAAI/bge-small-zh-v1.5
jinaai/jina-embeddings-v2-base-en
jinaai/jina-embeddings-v2-small-en
nomic-ai/nomic-embed-text-v1.5
sentence-transformers/all-MiniLM-L6-v2
- 内置 embedding 模型
在哪里找到 RAGFlow 的版本号?如何解读?
您可以在 UI 的系统页面找到 RAGFlow 的版本号。
如果您从源代码构建 RAGFlow,版本号也会出现在系统日志中。
____ ___ ______ ______ __
/ __ \ / | / ____// ____// /____ _ __
/ /_/ // /| | / / __ / /_ / // __ \| | /| / /
/ _, _// ___ |/ /_/ // __/ / // /_/ /| |/ |/ /
/_/ |_|/_/ |_|\____//_/ /_/ \____/ |__/|__/
2025-02-18 10:10:43,835 INFO 1445658 RAGFlow version: v0.15.0-50-g6daae7f2 full
其中
v0.15.0
: 官方发布的版本。50
: 自官方发布以来的 git 提交次数。g6daae7f2
:g
是前缀,6daae7f2
是当前提交 ID 的前七个字符。full
/slim
: RAGFlow 版本。full
: RAGFlow 完整版。slim
: 不含 embedding 模型和 Python 包的 RAGFlow 版本。
为什么不使用其他开源向量数据库作为文档引擎?
目前,只有 Elasticsearch 和 Infinity 满足 RAGFlow 的混合搜索需求。大多数开源向量数据库对全文搜索的支持有限,而稀疏嵌入(sparse embedding)并不能替代全文搜索。此外,这些向量数据库缺乏对 RAGFlow 至关重要的特性,例如短语搜索和高级排序功能。
这些限制促使我们从头开始开发了 AI 原生数据库 Infinity。
demo.ragflow.io 与本地部署的开源 RAGFlow 服务有什么区别?
demo.ragflow.io 展示了 RAGFlow 企业版的功能。它的 DeepDoc 模型使用专有数据进行预训练,并提供更复杂的团队权限控制。本质上,demo.ragflow.io 是 RAGFlow 即将推出的 SaaS(软件即服务)产品的预览。
您可以部署一个开源的 RAGFlow 服务,并通过 Python 客户端或 RESTful API 调用它。然而,demo.ragflow.io 不支持这种方式。
为什么 RAGFlow 解析文档比 LangChain 花费更长时间?
我们投入了大量精力在文档预处理任务上,例如使用我们的视觉模型进行版面分析、表格结构识别和 OCR(光学字符识别)。这导致了额外的时间消耗。
为什么 RAGFlow 比其他项目需要更多资源?
RAGFlow 内置了许多用于文档结构解析的模型,这占用了额外的计算资源。
RAGFlow 支持哪些架构或设备?
我们官方支持 x86 CPU 和英伟达 GPU。虽然我们也在 ARM64 平台上测试 RAGFlow,但我们不维护 ARM 版本的 RAGFlow Docker 镜像。如果您在 ARM 平台上,请按照本指南构建 RAGFlow Docker 镜像。
你们是否提供用于与第三方应用集成的 API?
相应的 API 现已可用。更多信息请参见 RAGFlow HTTP API 参考或 RAGFlow Python API 参考。
你们是否支持流式输出?
是的,我们支持。在聊天助手和智能体中,流式输出默认是开启的。请注意,您无法通过 RAGFlow 的 UI 禁用流式输出。要在响应中禁用流式输出,请使用 RAGFlow 的 Python 或 RESTful API。
Python
RESTful
你们是否支持通过 URL 分享对话?
不,不支持此功能。
你们是否支持多轮对话,将之前的对话作为当前查询的上下文?
是的,我们支持根据正在进行的对话的现有上下文来增强用户查询。
- 在聊天页面,将鼠标悬停在所需助手上,然后选择编辑。
- 在聊天配置弹出窗口中,点击提示词引擎选项卡。
- 打开多轮优化开关以启用此功能。
AI 搜索和聊天的主要区别是什么?
- AI 搜索:这是一种单轮 AI 对话,使用预定义的检索策略(加权关键词相似度和加权向量相似度的混合搜索)和系统的默认聊天模型。它不涉及知识图谱、自动关键词或自动提问等高级 RAG 策略。检索到的文本块将列在聊天模型响应的下方。
- AI 聊天:这是一种多轮 AI 对话,您可以定义自己的检索策略(可以使用加权重排分数来替代混合搜索中的加权向量相似度)并选择您的聊天模型。在 AI 聊天中,您可以为特定场景配置高级 RAG 策略,例如知识图谱、自动关键词和自动提问。检索到的文本块不会与答案一起显示。
在调试聊天助手时,您可以使用 AI 搜索作为参考,以验证您的模型设置和检索策略。
问题排查
如何从头构建 RAGFlow 镜像?
无法访问 https://hugging-face.cn
本地部署的 RAGflow 默认从 Huggingface 网站下载 OCR 和 embedding 模块。如果您的机器无法访问该网站,则会发生以下错误,导致 PDF 解析失败。
FileNotFoundError: [Errno 2] No such file or directory: '/root/.cache/huggingface/hub/models--InfiniFlow--deepdoc/snapshots/be0c1e50eef6047b412d1800aa89aba4d275f997/ocr.res'
要解决此问题,请改用 https://hf-mirror.com。
-
停止所有容器并移除所有相关资源。
cd ragflow/docker/
docker compose down -
取消 ragflow/docker/.env 文件中以下行的注释。
# HF_ENDPOINT=https://hf-mirror.com
-
启动服务器。
docker compose up -d
MaxRetryError: HTTPSConnectionPool(host='hf-mirror.com', port=443)
此错误表明您无法访问互联网或无法连接到 hf-mirror.com。请尝试以下方法:
-
手动从 huggingface.co/InfiniFlow/deepdoc 下载资源文件到您的本地文件夹 ~/deepdoc。
-
在 docker-compose.yml 文件中添加一个卷(volumes),例如:
- ~/deepdoc:/ragflow/rag/res/deepdoc
WARNING: can't find /raglof/rag/res/borker.tm
忽略此警告并继续。所有系统警告都可以忽略。
网络异常,您的网络出现异常,无法连接到服务器。
除非服务器完全初始化,否则您无法登录 RAGFlow。请运行 docker logs -f ragflow-server
。
如果您的系统显示以下内容,则表示服务器已成功初始化:
____ ___ ______ ______ __
/ __ \ / | / ____// ____// /____ _ __
/ /_/ // /| | / / __ / /_ / // __ \| | /| / /
/ _, _// ___ |/ /_/ // __/ / // /_/ /| |/ |/ /
/_/ |_|/_/ |_|\____//_/ /_/ \____/ |__/|__/
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:9380
* Running on http://x.x.x.x:9380
INFO:werkzeug:Press CTRL+C to quit
由于没有 redis 连接,实时同义词功能被禁用
忽略此警告并继续。所有系统警告都可以忽略。
为什么我的文档解析停滞在百分之一以下?
点击“解析状态”栏旁边的红色叉号,然后重新启动解析过程,看看问题是否仍然存在。如果问题持续存在,并且您的 RAGFlow 是本地部署的,请尝试以下方法:
-
检查 RAGFlow 服务器的日志,看它是否正常运行。
docker logs -f ragflow-server
-
检查 task_executor.py 进程是否存在。
-
检查您的 RAGFlow 服务器是否可以访问 hf-mirror.com 或 huggingface.com。
为什么我的 PDF 解析在接近完成时停滞,而日志中没有任何错误?
点击“解析状态”栏旁边的红色叉号,然后重新启动解析过程,看看问题是否仍然存在。如果问题持续存在,并且您的 RAGFlow 是本地部署的,解析过程很可能是由于 RAM 不足而被终止。请尝试通过增加 docker/.env 文件中的 MEM_LIMIT
值来增加您的内存分配。
确保您重新启动 RAGFlow 服务器,以使更改生效!
docker compose stop
docker compose up -d
索引失败
索引失败通常表示 Elasticsearch 服务不可用。
如何查看 RAGFlow 的日志?
tail -f ragflow/docker/ragflow-logs/*.log
如何检查 RAGFlow 中各组件的状态?
-
检查 Elasticsearch Docker 容器的状态:
$ docker ps
以下是一个示例结果:
5bc45806b680 infiniflow/ragflow:latest "./entrypoint.sh" 11 hours ago Up 11 hours 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:9380->9380/tcp, :::9380->9380/tcp ragflow-server
91220e3285dd docker.elastic.co/elasticsearch/elasticsearch:8.11.3 "/bin/tini -- /usr/l…" 11 hours ago Up 11 hours (healthy) 9300/tcp, 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp ragflow-es-01
d8c86f06c56b mysql:5.7.18 "docker-entrypoint.s…" 7 days ago Up 16 seconds (healthy) 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp ragflow-mysql
cd29bcb254bc quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z "/usr/bin/docker-ent…" 2 weeks ago Up 11 hours 0.0.0.0:9001->9001/tcp, :::9001->9001/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp ragflow-minio -
请遵循此文档来检查 Elasticsearch 服务的健康状况。
Docker 容器的状态不一定反映服务的状态。您可能会发现,即使相应的 Docker 容器正在运行,您的服务也可能不健康。可能的原因包括网络故障、端口号不正确或 DNS 问题。
异常:无法连接到 ES 集群
-
检查 Elasticsearch Docker 容器的状态:
$ docker ps
一个健康的 Elasticsearch 组件的状态应如下所示:
91220e3285dd docker.elastic.co/elasticsearch/elasticsearch:8.11.3 "/bin/tini -- /usr/l…" 11 hours ago Up 11 hours (healthy) 9300/tcp, 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp ragflow-es-01
-
请遵循此文档来检查 Elasticsearch 服务的健康状况。
Docker 容器的状态不一定反映服务的状态。您可能会发现,即使相应的 Docker 容器正在运行,您的服务也可能不健康。可能的原因包括网络故障、端口号不正确或 DNS 问题。
- 如果您的容器持续重启,请根据此 README 确保 `vm.max_map_count` >= 262144。如果您希望永久保留此更改,则需要更新 /etc/sysctl.conf 中的 `vm.max_map_count` 值。请注意,此配置仅适用于 Linux。
无法启动 ES 容器并收到 Elasticsearch did not exit normally
这是因为您忘记更新 /etc/sysctl.conf 中的 `vm.max_map_count` 值,并且在系统重启后该值的更改被重置了。
{"data":null,"code":100,"message":"<NotFound '404: Not Found'>"}
您的 IP 地址或端口号可能不正确。如果您使用的是默认配置,请在浏览器中输入 http://<您的机器IP地址>
(不是 9380,并且不需要端口号!)。这应该可以解决问题。
Ollama - Mistral 实例运行在 127.0.0.1:11434,但无法在 RagFlow 中添加 Ollama 作为模型
正确的 Ollama IP 地址和端口对于向 Ollama 添加模型至关重要。
- 如果您在 demo.ragflow.io 上,请确保托管 Ollama 的服务器具有可公开访问的 IP 地址。请注意,127.0.0.1 不是可公开访问的 IP 地址。
- 如果您在本地部署 RAGFlow,请确保 Ollama 和 RAGFlow 在同一个局域网内并且可以相互通信。
更多信息请参阅部署本地 LLM。
你们是否提供使用 DeepDoc 解析 PDF 或其他文件的示例?
是的,我们提供。请参阅 rag/app 文件夹下的 Python 文件。
FileNotFoundError: [Errno 2] No such file or directory
-
检查 MinIO Docker 容器的状态:
$ docker ps
一个健康的 Elasticsearch 组件的状态应如下所示:
cd29bcb254bc quay.io/minio/minio:RELEASE.2023-12-20T01-00-02Z "/usr/bin/docker-ent…" 2 weeks ago Up 11 hours 0.0.0.0:9001->9001/tcp, :::9001->9001/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp ragflow-minio
-
请遵循此文档来检查 Elasticsearch 服务的健康状况。
Docker 容器的状态不一定反映服务的状态。您可能会发现,即使相应的 Docker 容器正在运行,您的服务也可能不健康。可能的原因包括网络故障、端口号不正确或 DNS 问题。
使用方法
如何使用本地部署的 LLM 运行 RAGFlow?
您可以使用 Ollama 或 Xinference 来部署本地 LLM。更多信息请参阅此处。
如何添加不受支持的 LLM?
如果您的模型目前不受支持,但其 API 与 OpenAI 的 API 兼容,请在模型提供商页面点击 OpenAI-API-兼容来配置您的模型。
如何将 RAGFlow 与 Ollama 集成?
- 如果 RAGFlow 是本地部署的,请确保您的 RAGFlow 和 Ollama 在同一个局域网内。
- 如果您使用的是我们的在线演示,请确保您的 Ollama 服务器的 IP 地址是公共且可访问的。
更多信息请参阅此处。
如何更改文件大小限制?
对于本地部署的 RAGFlow:每次上传的总文件大小限制为 1GB,批量上传限制为 32 个文件。每个账户的文件总数没有上限。要更新此 1GB 文件大小限制:
- 在 docker/.env 中,取消注释
# MAX_CONTENT_LENGTH=1073741824
,根据需要调整该值,并注意1073741824
代表 1GB(字节)。 - 如果您更新了 docker/.env 中
MAX_CONTENT_LENGTH
的值,请确保相应地更新 nginx/nginx.conf 中的client_max_body_size
。
不建议手动更改 32 个文件的批量上传限制。但是,如果您使用 RAGFlow 的 HTTP API 或 Python SDK 上传文件,则会自动移除 32 个文件的批量上传限制。
错误:输入长度范围应为 [1, 30000]
发生此错误是因为匹配您搜索条件的文本块太多。请尝试减少 TopN 并增加相似度阈值来解决此问题:
- 点击页面中上方的聊天。
- 右键点击所需的对话 > 编辑 > 提示词引擎。
- 减少 TopN 和/或提高相似度阈值。
- 点击确定以确认您的更改。
如何获取用于与第三方应用集成的 API 密钥?
如何升级 RAGFlow?
更多信息请参阅升级 RAGFlow。
如何将文档引擎切换到 Infinity?
要将您的文档引擎从 Elasticsearch 切换到 Infinity:
-
停止所有正在运行的容器:
$ docker compose -f docker/docker-compose.yml down -v
-v
将删除所有 Docker 容器卷,现有数据将被清除。
-
在 docker/.env 中,设置
DOC_ENGINE=${DOC_ENGINE:-infinity}
-
重启您的 Docker 镜像:
$ docker compose -f docker-compose.yml up -d
我上传的文件存储在 RAGFlow 镜像的哪个位置?
所有上传的文件都存储在 RAGFlow 的对象存储解决方案 Minio 中。例如,如果您将文件直接上传到知识库,它位于 <knowledgebase_id>/filename
。
如何调整文档解析和 embedding 的批处理大小?
您可以通过设置环境变量 DOC_BULK_SIZE
和 EMBEDDING_BATCH_SIZE
来控制文档解析和 embedding 的批处理大小。增加这些值可以提高大规模数据处理的吞吐量,但也会增加内存使用量。请根据您的硬件资源进行调整。