图文|手把手教你用Dify和Milvus快速构建RAG应用

880 阅读8分钟

image.png 设想一下:如果你能将整个文档库——包含上千页技术规范、内部Wiki 和代码文档——打造成一个智能AI助手,能即时回答各种具体问题,会是什么体验?

更棒的是,如果搭建这个助手所需的时间,比解决一次合并冲突还短呢?

这正是RAG在正确实现时所能带来的强大能力。

虽然ChatGPT和其他大语言模型表现出色,但一旦被问到你公司内部文档、代码库或知识库的内容时,它们很快就会“卡壳”。RAG的出现弥补了这一点:它将你的专有数据引入对话,使 AI 回答与你的实际业务高度相关。

问题是,传统的 RAG 实现方式如下:

编写自定义的嵌入生成流程 部署向量数据库 设计复杂的 Prompt 模板 实现检索逻辑与相似度阈值 搭建交互界面 有没有可能直接跳过这些繁琐步骤,快速获得结果?

在本教程中,我们将使用两个专为开发者设计的工具构建一个简单的 RAG 应用:

Dify:一个开源平台,最小配置即可完成 RAG 流程编排 Milvus:一个超快的开源向量数据库,专为相似度搜索和 AI 检索而生 只需 10 分钟左右,你就可以拥有一个可以回答你导入文档中具体问题的 AI 助手——无需机器学习背景。

你将构建的内容 只需几分钟的实际操作,你就能完成:

一个文档处理管道:将任何 PDF 转换为可查询知识 一个向量搜索系统:精准找到相关信息 一个聊天机器人界面:高精度回答技术问题 一个可部署方案:可集成至现有工具中 大部分配置都通过图形界面完成,而非代码。

所需准备 基础 Docker 知识(如 docker-compose up -d) 一个 OpenAI API 密钥 一个用于实验的 PDF 文档(本文示例使用《Attention is All You Need》论文) 准备好用最快速度构建一个真正有用的 AI 助手了吗?我们开始吧!

使用 Milvus 和 Dify 构建你的 RAG 应用 在本节中,我们将使用 Dify 搭建一个 RAG 应用,能回答一篇研究论文中的问题。你可以使用任何论文,本文以Transformer架构的奠基之作《Attention is All You Need》为例。

Milvus 将作为我们的向量存储系统,OpenAI提供嵌入模型与大语言模型。首先,我们需要准备 OpenAI 的 API 密钥。

第一步:启动 Dify 和 Milvus 容器

在本示例中,我们将使用 Docker Compose 自托管 Dify。因此,在开始之前,请确保本地计算机已安装 Docker。如果尚未安装,请参考Docker 安装页面进行安装。

安装 Docker 后,需要通过以下命令将 Dify 源代码克隆到本地计算机:

git clone github.com/langgenius/… AI写代码 接下来,进入刚刚克隆的源代码中的docker目录,并通过以下命令复制.env文件:

cd dify/docker AI写代码 cp .env.example .env AI写代码 简而言之,.env文件包含启动和运行 Dify 应用所需的配置,例如向量数据库的选择、访问向量数据库所需的凭证、Dify 应用的地址等。

由于我们将使用 Milvus 作为向量数据库,因此需要将.env文件中的VECTOR_STORE变量值修改为milvus。同时,需要将MILVUS_URI变量修改为host.docker.internal:19530,以确保部署后 Docker 容器之间不存在通信问题:

VECTOR_STORE=milvus AI写代码 MILVUS_URI=host.docker.internal:19530 AI写代码 现在我们可以启动 Docker 容器了。为此,只需运行docker compose up -d命令。完成后,终端中将显示类似以下输出:

docker compose up -d

image.png AI写代码 我们可以使用docker compose ps命令检查所有容器的状态,查看它们是否正常运行。如果所有容器状态正常,将显示如下输出:

docker compose ps

image.png AI写代码 最后,如果访问http://localhost/install,您将看到 Dify 的着陆页,在此可以注册并立即开始构建 RAG 应用程序。

image.png

注册完成后,即可使用您的凭证登录 Dify。

image.png

第二步:配置 OpenAI API 密钥

在注册 Dify 之后,我们需要做的第一件事就是配置 API 密钥,这些密钥将用于调用嵌入模型和大语言模型(LLM)。由于我们打算使用 OpenAI 提供的模型,因此需要将 OpenAI 的 API 密钥填入个人资料中。

具体操作如下:将鼠标悬停在界面右上角的头像上,点击进入“设置”(Settings),如下图所示:

image.png

接下来,进入“模型提供方”(Model Provider)页面,将鼠标悬停在 OpenAI 上,然后点击“设置”(Setup)。此时会弹出一个窗口,提示你输入 OpenAI 的 API 密钥。

完成以上设置后,我们就可以开始使用来自 OpenAI 的嵌入模型和大语言模型了。

image.png

第三步:将文档插入知识库

现在我们来存储 RAG 应用的知识库。知识库由一组内部文档或文本组成,这些内容可作为相关上下文,帮助大型语言模型(LLM)生成更准确的回答。

在我们的用例中,知识库本质上是《注意力是你所需要的一切》("Attention is All You Need")这篇论文。然而,由于多种原因,我们无法直接存储论文原文:首先,论文篇幅过长,向 LLM 提供过长的上下文并无益处,因为语境过于宽泛;其次,如果输入的是原始文本,我们无法通过相似性搜索获取最相关的上下文。

因此,在将论文存储到知识库之前,至少需要完成两个步骤:首先,将论文分割为文本块;然后,通过嵌入模型将每个文本块转换为嵌入向量。最后,将这些嵌入向量存储到 Milvus 向量数据库中。

Dify 工具使我们能够轻松地将论文文本分割为块并转换为嵌入向量。我们只需上传论文的 PDF 文件,设置块长度,并通过滑块选择嵌入模型。具体操作步骤如下:进入 “知识” 模块,点击 “创建知识”,系统会提示从本地电脑上传 PDF 文件。因此,建议先从 ArXiv 下载论文并保存到电脑中。

image.png

上传文件后,我们可以设置块长度、索引方法、所需的嵌入模型和检索设置:

在 “块设置” 区域,可自定义最大块长度(本用例中设为 100); 对于 “索引方法”,需选择 “高质量” 选项,以支持通过相似性搜索查找相关上下文; “嵌入模型” 可从 OpenAI 提供的模型中任选,本示例使用 text-embedding-3-small 模型; 最后,“检索设置” 选择 “向量搜索”,以便通过相似性搜索获取最相关的上下文。

image.png 完成设置后,点击 “保存并处理”。若操作成功,将看到如下图所示的绿色对勾标识:

image.png

第四步:创建 RAG 应用

至此,我们已成功创建知识库并将其存储在 Milvus 数据库中。现在可以开始创建 RAG 应用了。

使用 Dify 创建 RAG 应用非常简单。我们需要进入 “Studio” 模块(而非之前的 “Knowledge” 模块),然后点击 “从空白创建”。接下来,选择 “聊天机器人” 作为应用类型,并在指定字段中为应用命名。完成后,点击 “创建”,将看到以下页面:

image.png

在 “指令” 字段中,我们可以编写系统提示,例如 “简洁地回答用户的查询”。接下来,作为 “上下文”,需要点击 “添加” 图标,然后添加我们刚刚创建的知识库。这样,我们的 RAG 应用就会从该知识库中获取相关上下文来回答用户的查询。

将知识库添加到 RAG 应用后,最后一步是选择 OpenAI 的 LLM 模型。为此,点击右上角的模型列表(如下方截图所示):

image.png

现在我们准备发布 RAG 应用!在右上角点击 “发布”,可以看到多种发布方式:直接在浏览器中运行、嵌入到网站中,或通过 API 访问。在本示例中,我们选择在浏览器中运行应用,因此点击 “运行应用” 即可。

完成!现在你可以向 LLM 询问任何与《注意力是你所需要的一切》论文或知识库中包含的文档相关的问题了。

image.png

结论

现在,你已经使用 Dify 和 Milvus 构建了一个可运行的 RAG 应用程序,且仅需最少的代码和配置。这种方法使复杂的 RAG 架构对开发人员而言触手可及,无需深入掌握向量数据库或 LLM 集成的专业知识。核心要点如下:

低设置成本:使用 Docker Compose 简化了部署流程 无代码 / 低代码编排:Dify 处理了 RAG 流程的大部分工作 生产就绪的向量数据库:Milvus 提供高效的嵌入存储和检索能力 可扩展架构:易于添加文档或调整参数 对于生产部署,建议考虑以下事项:

为应用程序设置身份验证 为 Milvus 配置适当的扩展(尤其是针对较大的文档集合) 为 Dify 和 Milvus 实例实施监控 微调检索参数以优化性能 Dify 与 Milvus 的结合,使快速开发 RAG 应用成为可能,这些应用能够有效利用现代大型语言模型(LLM)挖掘组织的内部知识。祝你开发顺利!