Skip to content

Dify外挂ragflow知识库

一、为什么要使用dify去外挂ragflow的知识库呢?

在ragflow中,处理特别复杂的文档和非结构化数据,具有明显优势,而dify在agent、多模型协作里面优势明显,具体如下: ragflow在RAG应用中效果明显,具体优势有:

  • 文件精细解析能力强,在处理 PDF、扫描件、表格等复杂文档方面表现出色
  • 拥有 DeepDoc 技术,可以处理非结构化文档
  • 支持 OCR、内置多种文档切分模板
  • 对延迟敏感的应用时表现出色,可以轻松应对繁重的工作负载 Dify的优势在Agent:
  • 支持丰富的外部拓展工具和任务流编排,类似 Coze,但拓展性更好
  • 能够跨知识库检索,能自动选择合适的知识库,这点 RAGFlow 目前不支持

二、dify联合ragflow做知识库

优势:

  1. 通过这种dify+ragflow的混合架构,具有以下优势
      1. 具有dify的工作流任务编排和agent能力
      1. 同时具有ragflow优秀的文档处理和解析能力 tips:怎样理解工作流这个东西? 工作流本质上就是大模型的脚手架,如果不能和外部应用进行顺畅的对接,就等于说是限制了它的能力,就比如说现在很火的MCP协议,都是在解决大模型如何更好的调用外部应用的问题.

三、项目启动后的配置流程

  1. ragflow项目中配置知识库,记得配置模型,需要哪个配置哪个
  2. 获取api服务器、apikey、以及知识库id alt textalt text
  3. 在dify知识库中,添加外部知识库 alt text 链接外部知识库 alt textalt text
  4. 创建成功,点击进去,进行召回测试 alt text 输入问题,进行知识库召回问答 alt text

四、单机同时启动ragflow+dify时,docker-compose部署过程中遇到的坑:

  1. 一台主机部署端口隔离,dify和ragflow默认都是80、443端口冲突问题; 解决方案: docker-compose.yml中更改80和443的映射,因为使用80端口的服务太普遍,建议都改成别的

      1. 更改dify项目中的配置 进入dify的docker配置 cd dify/docker 更改docker-compose.yaml中的nginx配置,直接这样写死就可以 alt text
      1. 启动dify项目(官网地址https://docs.dify.ai/zh-hans/getting-started/install-self-hosted/docker-compose),使用名称隔离容器
      shell
      docker compose -p dify_docker up -d
      1. 更改ragflow项目的配置,同上 alt text tips:拉取ragflow代码的时候,直接按照官网上拉取代码(https://ragflow.io/docs/dev/),使用代码的时候,使用已打好的tag
      1. 启动ragflow项目,使用名称隔离
      shell
        docker compose -p ragflow_docker  up -d
  2. redis的问题(虽然两个服务都使用redis,但是只是内部使用,不影响)

  3. ragflow服务启动后,ragflow-server报这个错误 alt text 原因:redis中没有找到某个key,Redis里的两个key队列信息,分别是task_consumer_0和rag_flow_svr_queue,这两个是队列信息,第一个待处理文件,第二个是任务。 解决方式: alt text

      1. 进入redis容器
    shell
        docker exec -it ragflow-redis bash
      1. 操作redis,检查是否存在rag_flow_svr_queue键:(密码在/ragflow/docker中的.env文件中)
    shell
        redis-cli -h redis -p 6379 -a ******** EXISTS rag_flow_svr_queue
      1. 如果键不存在,可能需要初始化队列。例如,可以使用以下命令创建一个空队列:
    shell
        redis-cli -h redis -p 6379 -a ******** RPUSH rag_flow_svr_queue ""
        # 返回值是1 表示创建成功
      1. 退出容器
    shell
        exit