RAGFlow
是一种融合了数据检索与生成式模型的新型系统架构,其核心思想在于将大规模检索系统与先进的生成式模型(如Transformer、GPT系列)相结合,从而在回答查询时既能利用海量数据的知识库,又能生成符合上下文语义的自然语言回复。该系统主要包含两个关键模块:数据检索模块和生成模块。数据检索模块负责在海量数据中快速定位相关信息,而生成模块则基于检索结果生成高质量的回答或文本内容。
在实际应用中,RAGFlow能够在客户服务、问答系统、智能搜索、内容推荐等领域发挥重要作用,通过检索与生成的双重保障,显著提升系统的响应速度和准确性。
RAGFlow安装
项目地址:https://github.com/infiniflow/ragflow
wsl安装
安装 WSL文档: https://learn.microsoft.com/zh-cn/windows/wsl/install
WSL基本命令:https://learn.microsoft.com/zh-cn/windows/wsl/basic-commands
1、管理员权限打开powershell命令
#启动wsl子系统
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux
/all /norestart
#启用虚拟机平台支持
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all
/norestart
#设置wsl2
wsl --set-default-version 2
也可以手动选择:
RAGFlow最终完成版安装步骤
采用docker安装,没有的需要安装下:https://blog.csdn.net/YXWik/article/details/128254108
ragflow项目地址:https://github.com/infiniflow/ragflow
下载项目
解压
修改修改镜像为国内镜像 F:\ragflow-main\docker
文件夹下的 .env
文件中的RAGFLOW_IMAGE
RAGFLOW_IMAGE=docker-0.unsee.tech/infiniflow/ragflow:v0.17.0
在.env文件中,使用镜像地址就行:HF_ENDPOINT=https://hf-mirror.com
docker-compose-base.yml
配置更改如下
redis:image: valkey/valkey:8container_name: ragflow-redisentrypoint: ["redis-server", "--requirepass", "${REDIS_PASSWORD}", "--maxmemory", "128mb", "--maxmemory-policy", "allkeys-lru"]env_file: .envports:- ${REDIS_PORT}:6379volumes:- redis_data:/datanetworks:- ragflowrestart: on-failure
更换镜像:
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"debug": true,"experimental": true,"insecure-registries": [],"registry-mirrors": ["https://docker-0.unsee.tech","https://docker-cf.registry.cyou","https://docker.1panel.live"]
}
在 F:\ragflow-main\docker
目录下打开cmd命令窗口
docker compose -f docker-compose.yml up -d
RAGFlow安装(每一步的踩坑记录)
采用docker安装,没有的需要安装下:https://blog.csdn.net/YXWik/article/details/128254108
ragflow项目地址:https://github.com/infiniflow/ragflow
下载项目
解压
修改修改镜像为国内镜像 F:\ragflow-main\docker
文件夹下的 .env
文件中的RAGFLOW_IMAGE
RAGFLOW_IMAGE=docker-0.unsee.tech/infiniflow/ragflow:v0.17.0
在 F:\ragflow-main\docker
目录下打开cmd命令窗口
下载项目的依赖镜像和环境
docker compose -f docker-compose.yml up -d
遇到如下报错
更换镜像:
{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"debug": true,"experimental": true,"insecure-registries": [],"registry-mirrors": ["https://docker-0.unsee.tech","https://docker-cf.registry.cyou","https://docker.1panel.live"]
}
重新下载项目的依赖镜像和环境
docker compose -f docker-compose.yml up -d
安装并启动成功后查看 RAGFlow
访问路径
按照提示注册登录即可
注册报错network abnormal
或 网络异常 ,因为 RAGFlow
可能并未完全启动成功。
docker中卸载了重新安装
再次启动发现报错WARNING:root:RedisDB.queue_info rag_flow_svr_queue got exception: no such key
我们看上面的日志 发现 redis
连接的库是 1
库,一会直连redis,查看1库的中 rag_flow_svr_queue
key的情况
先在.env
中找到redis
的密码
infini_rag_flow
查看docker中运行的服务
docker ps
进入redis容器
docker exec -it ragflow-redis bash
检查是否存在rag_flow_svr_queue
的key,infini_rag_flow
为上面查到的redis密码
redis-cli -h redis -p 6379 -n 1 -a infini_rag_flow EXISTS rag_flow_svr_queue
这里的 -n 1
代表的 1
库
不存在,咱们创建 rag_flow_svr_queue
的key,默认给个空字符串(先别着急执行后续的这些命令,问题不在redis初始化的key上,往下面看
)
redis-cli -h redis -p 6379 -n 1 -a infini_rag_flow RPUSH rag_flow_svr_queue ""
exit退出
再次查看日志
docker logs -f ragflow-server
报错变成了:
WARNING:root:RedisDB.queue_info rag_flow_svr_queue got exception: WRONGTYPE Operation against a key holding the wrong kind of value
这意思是说 我们 rag_flow_svr_queue 对应的value的类型不正确,我们当时设置的是字符串类型
查找源码,找到rag_flow_svr_queue
,发现需要的是list类型
连接redis 删除rag_flow_svr_queue
docker exec -it ragflow-redis bash
删除
redis-cli -h redis -p 6379 -n 1 -a infini_rag_flow DEL rag_flow_svr_queue
新增 rag_flow_svr_queue 的key,将 value设置为空list
redis-cli -h 127.0.0.1 -p 6379 -a infini_rag_flow -n 1 RPUSH rag_flow_svr_queue ""
退出:exit
查看日志 docker logs -f ragflow-server
报错: WARNING:root:RedisDB.queue_info rag_flow_svr_queue got exception: WRONGTYPE Operation against a key holding the wrong kind of value
去官网看看有啥解决方案:https://github.com/infiniflow/ragflow
看了好几个 issues 发现都有这个key不存在报错
这个评论说不带端口运行
再次访问http://localhost/ 进行注册发现成功了 ,盲猜一波最初注册报错是不是因为项目启动加载过慢导致了,稍微等等就可以了,还是因为我初始化了redis的key解决了,虽然出现了另一个报错,但是看起来并不影响
建立知识库
我这边本地使用的ollama,配置的千问模型:https://blog.csdn.net/YXWik/article/details/143871588
默认的ollama是这个端口
http://127.0.0.1:11434
ollama是windows的docker启动,则使用
http://host.docker.internal:11434/
查看ollama安装的模型
ollama list
添加模型
报错:Fail to access model(qwen2.5:7b).**ERROR**: [Errno 111] Connection refused
RAG访问容器内的11434端口造成的访问失败
更改为以下:
http://host.docker.internal:11434/
点击系统模型设置配置聊天模型
创建知识库
上传知识库文件
设置解析规则
这里在解析状态后面有个绿色的开始键点击开始解析
虽有redis的报错,但是稍等一下会开始解析,并没有什么影响
如果解析进度一直不动,是因为部署环境因为网络无法访问 huggingface.co ,导致本地模型无法下载
解决方案要么开启科学上网,要么设置代理
设置代理:在.env文件中,使用镜像地址就行:HF_ENDPOINT=https://hf-mirror.com
然后删除任务重启Docker
重启Docker后ragflow卡住了,将ragflow进行一个重启
重启之后开始重新解析我发现它还卡在这个位置,我就去redis中查找相关的key,发现redis中一个key也没有,但是redis的状态是启动的
查看日志我发现ragflow一直连接不上redis
我发现一个问题,我用redis客户端工具连接redis时发现不输入密码可以连接成功,但是ragflow配置文件中设置的redis密码是infini_rag_flow
Docker 容器的服务的配置中设置是有相关初始化配置的,但很显然这个配置没有生效
连接redis,查看器配置文件
docker ps
docker exec -it ragflow-redis /bin/bash
检查 Redis 是否正在运行:
pidof redis-server
查看 Redis 启动参数:
cat /proc/1/cmdline | tr '\0' ' '
以上截图表明 Redis 是以默认方式启动的,并未包含 --requirepass 参数。因此,Redis 没有启用密码验证,但我们查看启动配置文件时发现时有配置密码的。
命令查看,或者在Docker中查看
docker inspect ragflow-redis
既然配置文件没有问题,那下一步我们排查它的启动脚本 docker-entrypoint.sh
在redis的Docker容器中查看entrypoint.sh
cat /usr/local/bin/docker-entrypoint.sh
从 docker-entrypoint.sh
脚本的内容来看,问题的根本原因已经明确:脚本默认启动的是 valkey-server
,而不是 redis-server
。因此,即使在启动容器时传递了 redis-server
和相关参数(如 --requirepass
),这些参数也被脚本忽略了。
怎么处理呢,找到 docker-compose-base.yml
配置文件,覆盖入口脚本来强制使用 redis-server
,而不是 valkey-server
,在配置文件中找到redis的启动命令和参数配置进行更改
redis:image: valkey/valkey:8container_name: ragflow-redisentrypoint: ["redis-server", "--requirepass", "${REDIS_PASSWORD}", "--maxmemory", "128mb", "--maxmemory-policy", "allkeys-lru"]env_file: .envports:- ${REDIS_PORT}:6379volumes:- redis_data:/datanetworks:- ragflowrestart: on-failure
改完之后删除
docker stop ragflow-redis
docker rm ragflow-redis
docker volume rm docker_redis_data
docker compose -f docker-compose.yml up -d
重启之后再进入redis 进行查看
docker exec -it ragflow-redis redis-cli
AUTH infini_rag_flow
SELECT 1
keys *
如果存在key将其删除
del task_consumer_0
回到页面将原数据集删除后,重新添加并点击解析,发现报错没了
稍等一会儿解析成功
配置助理
选择知识库
测试
ragflow官网的给出一些常见问题的解决方案:https://ragflow.io/docs/dev/faq#issues-with-ragflow-backend-services