RAGFlow安装+本地知识库+踩坑记录

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:8
    container_name: ragflow-redis
    entrypoint: ["redis-server", "--requirepass", "${REDIS_PASSWORD}", "--maxmemory", "128mb", "--maxmemory-policy", "allkeys-lru"]
    env_file: .env
    ports:
      - ${REDIS_PORT}:6379
    volumes:
      - redis_data:/data
    networks:
      - ragflow
    restart: 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:8
    container_name: ragflow-redis
    entrypoint: ["redis-server", "--requirepass", "${REDIS_PASSWORD}", "--maxmemory", "128mb", "--maxmemory-policy", "allkeys-lru"]
    env_file: .env
    ports:
      - ${REDIS_PORT}:6379
    volumes:
      - redis_data:/data
    networks:
      - ragflow
    restart: 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

### Redis连接错误解决方案 当遇到 `valkey.exceptions.ConnectionError` 或者 `name or service not known` 的问题时,通常是因为客户端无法解析目标主机名或者服务未正常启动。以下是针对该问题的具体分析和解决方法: #### 1. 检查Redis服务器状态 确保Redis服务器已经正确启动并正在运行。如果通过命令行操作,则需在一个独立的CMD窗口中执行以下命令来启动Redis服务器: ```bash redis-server.exe ``` 保持此窗口打开,不要关闭它[^1]。 #### 2. 验证网络配置 确认Redis实例绑定到正确的IP地址以及端口设置无误。默认情况下,Redis监听的是本地回环地址 (`127.0.0.1`) 和标准端口号 `6379`。可以通过修改配置文件中的 `bind` 参数调整绑定地址。例如,在 `redis.conf` 文件中找到如下行: ```conf bind 127.0.0.1 ``` #### 3. 测试连接 为了验证Redis是否可以被访问,可以在另一个CMD窗口输入下面这条指令尝试手动建立连接: ```bash redis-cli.exe -h 127.0.0.1 -p 6379 ``` 如果能够顺利进入交互模式而没有任何异常提示,则说明基本环境搭建完成且功能可用。 #### 4. 处理DNS解析失败情况下的"name or service not known" 对于出现 `-2 name or service not known` 错误的情况,可能由于指定的目标名称未能成功转换成实际IP所致。此时应考虑直接采用数值形式表示的目的地位置代替域名表达方式;即把所有涉及远程节点的地方都替换成具体的IPv4/IPv6地址而非象征性的标签字符串。 另外还需注意防火墙规则是否会阻止外部程序向内部开放的服务发起请求。适当放宽安全策略允许特定范围内的通信行为发生也可能有助于解决问题。 ```python import redis try: r = redis.StrictRedis(host='localhost', port=6379, decode_responses=True) result = r.ping() except Exception as e: print(f"Connection failed: {e}") else: if result: print('Connected successfully.') ``` 上述脚本展示了如何利用Python库尝试ping一下远端数据库从而判断当前状况的好坏程度[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值