Ragflow本地部署和基于知识库的智能问答测试
最近在基于dify做agent过程中,基于dify的知识库构建、图文拆分方式相对较少,但Ragflow的拆分方式有很多种(如General、Book、Table、Q&A等十余种),相对支持的应用场景更多一些,因此就对Ragflow进行的部署研究和测试。总的来说,Ragflow类似于dify,但没有dify强大,性能也弱一下,但在知识库构建方面比较全面,支撑很多种拆分方式,支持多种API接口,可以作为内部知识库后端的构建工具,但对应图文预览方面还需要自己做大量开发;同时也可以构建聊天、Agent和workflow等应用,但总体友好性和跟踪调试方面差一些,推荐只用来做后端的知识库构建、存储和管理,然后通过dify引入外部知识库,但性能要差一些。下面是具体部署和测试过程记录,供大家参考。
一、下载安装
下载ragflow,地址:https://github.com/infiniflow/ragflow
下载nvidia-container-runtime,地址:https://github.com/NVIDIA/nvidia-container-runtime
解压:tar -zxvf ragflow-0.19.0.tar.gz
nvidia-container-runtime利用rpm安装即可。
二、修改配置文件
.env文件,要打开国内访问地址,示例如下。
# 关闭默认的RAGFLOW_IMAGE,打开如下这一行(在113行)
# - For the `nightly` edition, uncomment either of the following:
RAGFLOW_IMAGE=swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:v0.19.0
docker-compose.yml文件,前面是宿主机端口,后面是docker内部端口
ports:- ${SVR_HTTP_PORT}:9380- 8000:8000
默认端口是80,如果将端口修改为8000,记得修改volumes下的nginx中端口,主要是ragflow.conf,记得将80改为8000即可,重启该容器,或者在安装前更改,再往下执行。根目录都是/data/ragflow-0.19.0/docker,前面是宿主机目录,后面是docker内部目录。
# docker-compose.yml文件的volumes内容,前面是宿主机目录,后面是docker内部目录。
volumes:- ./ragflow-logs:/ragflow/logs- ./nginx/ragflow.conf:/etc/nginx/conf.d/ragflow.conf- ./nginx/proxy.conf:/etc/nginx/proxy.conf- ./nginx/nginx.conf:/etc/nginx/nginx.conf
三、拉取容器进行安装
使用 -p
参数为每个项目指定独特的 Docker Compose 项目名称,确保容器和网络资源相互独立。
docker-compose -f docker-compose.yml -p ragflow up -d
#删除容器,没错修改前面两个配置文件后,要使其生效,必须执行删除,在进行拉取安装。
docker-compose -f docker-compose.yml -p ragflow down
#GPU模式,需要机器有显卡。
docker-compose -f docker-compose_gpu.yml -p ragflow up -d
#删除容器,没错修改前面两个配置文件后,要使其生效,必须执行删除,在进行拉取安装。
docker-compose -f docker-compose_gpu.yml -p ragflow down
注意:GPU模式下的daemon.json配置如下(一般在/etc/docker目录下),非GPU模式记得去掉daemon.json中的runtimes配置。
# daemon.json文件内容
{ "runtimes": {"nvidia": {"path": "/usr/bin/nvidia-container-runtime","runtimeArgs": []}}, "registry-mirrors":["https://docker.m.daocloud.io","https://docker.imgdb.de","https://docker-0.unsee.tech/","https://hub-mirror.c.163.com/","https://hub.rat.dev/","https://mirror.azure.cn/","https://docker.hlmirror.com","https://docker.1ms.run","https://func.ink","https://lispy.org","https://docker.xiaogenban1993.com","https://mirror.ccs.tencentyun.com","https://registry.docker-cn.com"],"iptables": false
}
这里的path设置需要事先安装nvidia-container-runtime,具体见第一部分的下载安装,一般默认安装即可。
四、查看确认服务状态
docker logs -f ragflow-server
或者打开ragflow-logs目录下的日志文件进行查看。
五、其他系统访问Ragflow知识库地址
这里的api-key是在ragflow的api功能中生成,见下图。这里的id就是ragflow中创建的知识库id,打开每个知识库,在地址栏中显示的id=b81ee15e4a8911f08ad10242ac130006,等号后面的就是知识库id。详见下图。
api-key:ragflow-ExxxxxxxxxxxxxxxMm
url:http://x.x.x.x/api/v1/dify
知识库 id:b81ee15e4a8911f08ad10242ac130006
六、dify中如何引入Ragflow中构建的知识库
1.添加外部知识库API连接,名称随便定义,endpoint填写上一步的url,api-key也对应上一步api-key。如下图。
2.连接外部知识库,在创建知识库左下角点击连接外部知识库,填写示例详见下图,这里的外部知识库id就是第五步中的查询到的知识库id。这里是一对一的,dify中的一个外部知识库引用只能对应ragflow中的一个知识库。如下图。
七、基于Ragflow的智能问答测试
Ragflow部署完毕后,通过知识库功能构建一个数字孪生知识库并添加文件后,直接在Ragflow的聊天应用中对该知识库进行智能问答测试,具体问答图如下。