概述
在dify集成Milvus向量库,做RAG知识库的存储与检索。
Dify[1]是一个开源平台,旨在通过将 Backend-as-a-Service 与 LLMOps 相结合来简化人工智能应用程序的构建。它支持主流 LLMs,提供直观的提示协调界面、高质量的 RAG 引擎和灵活的 AI Agents 框架。凭借低代码工作流、易用的界面和 API,Dify 使开发人员和非技术用户都能专注于创建创新的、真实世界的人工智能解决方案,而无需处理复杂的问题。简单来说,Dify就是另一个字节版本的扣子平台。
Milvus 是一款专为大规模向量搜索设计的开源向量数据库,由 Zilliz 公司开发并维护。它能高效处理海量(亿级以上)向量数据的存储和相似度检索,广泛应用于图像检索、推荐系统、自然语言处理等领域。
集成
Milvus该如何集成到Dify平台中做RAG呢?首先Milvus的设计就提供了多种其它中间件的集成,以向量存储来说,其环境配置文件.env.example中,就支持了多种向量库,默认是weaviate。

而且其docker-compose文件,就已经准备好了相应的中间件docker,只需要指定配置,即可完成安装部署。
下载Dify最新的源代码,执行如下命令:
cd docker
cp .env.example .env
docker compose --profile milvus up -d
如果docker的源没有什么问题,应该就会拉取对应的docker 镜像并部署:

Milvus校验配置
在.env文件中,配置登录的参数,因为默认的MILVUS_AUTHORIZATION_ENABLED
为true,会启用权限校验;就需要在.env中配置账号信息,如此后面Dify才能读取到对应的账号登录Milvus。
Milvus默认的账号密码是:root、Milvus。因此我们配置账号:

Milvus UI安装
Attu[2]是 Milvus 的一体化开源管理工具。它具有直观的图形用户界面(GUI),可轻松与数据库交互。只需点击几下,就可以直观地查看集群状态、管理元数据、执行数据查询等。
基于docker一键安装:
docker run -itd --restart=always -p 8787:3000 -e HOST_URL=http://localhost:8787 -e MILVUS_URL=10.195.230.253:19530 --name attu zilliz/attu:latest
-
其中 8787
是我自己设置的本地端口号,你可以选一个没有被占用的本地端口即可。 -
MILVUS_URL
需要修改为你的主机ip
地址(或服务器ip
地址)
这是第一种部署方式,我在自己的虚拟机是ok的,但是切换到公司内网的机器一直显示network error
;后来转换了一下思路,直接在dify的docker-compose.yaml文件中,增加了attu docker容器的配置信息,如下:

直接在同一个docker-compose.yaml中管理attu与milvus的依赖关系。
最后打开的界面及登录信息如下:

按图上配置即可,地址信息自己指定milvus的url。
Dify知识库验证
在dify的知识库模块,配置知识库信息,如下:


都用默认的就行,分块长度,可以指定的小一点。我是自己在nvidia A10上部署了bge的embedding模型和reranker模型。
最后,Dify显示的知识库信息如下:
而Milvus中的向量存储信息如下:


原理
整个的逻辑其实就是基于docker安装部署编排中间件,Dify基于.env配置文件读取对应的权限信息,再基于其程序内置的驱动等连接到这些中间件(比如Milvus)。
Dify: https://dify.ai/
[2]Attu: https://github.com/zilliztech/attu