Milvus+n8n:基于GitHub文档分析的垂直领域智能问答解决方案

更新时间:

本文将聚焦于Milvus,借助低代码工作流编排平台n8n(全称NodeNation),展示如何将二者无缝结合,以利用GitHubAPI快速搭建一个企业级的垂直领域智能问答应用。

背景信息

n8n介绍

n8n是一个开源、可视化的工作流自动化平台,被誉为“程序员的Zapier”或可自部署的Make。它旨在通过连接不同的节点(Node)来构建强大的自动化任务,简化复杂工作流程的实现。

  • 核心特点:

    • 可视化设计:用户可以在一个直观的画布上,通过拖拽和连接节点,轻松构建自动化流程,而无需编写大量代码。

    • 灵活性与可扩展性:支持数百种应用和服务的即用型集成,用户可以根据需求自定义工作流。

    • 支持多种触发模式:支持事件驱动(Webhook)和定时调度两种触发方式。

  • 基础概念:

    • 节点(Node):工作流的最小功能单元,负责集成外部服务和实现特定操作,如发送HTTP请求、解析JSON或写入数据库。节点通过输入/输出端口以JSON格式传递数据,支持本地和分布式执行。

    • 工作流(Workflow):由多个节点按逻辑顺序连接而成的自动化流程,支持分支、循环和错误处理。工作流的定义是执行引擎的输入,从而形成完整的操作逻辑。

    • 执行引擎(Engine):n8n的核心运行时,负责解析工作流的定义、调度节点执行、管理任务队列及处理错误重试。

    • 卷(Volume):在容器化部署(如Docker)中用于持久化存储n8n的配置、工作流数据和日志。通过将宿主机目录绑定到容器内路径(如/home/n8n/.n8n),确保数据不丢失。

方案概述

为了快速搭建一个企业级的垂直领域智能问答应用,我们将在n8n中创建两个工作流,以实现高效的数据处理和响应机制。

  • 工作流设计

    • 工作流一:文档数据拉取与存储

      用于定时从GitHub拉取Milvus产品的文档数据,并将其写入Milvus向量库。

    • 工作流二:智能问答处理

      利用AI Agent和大模型的能力判断客户提问的内容。当问题与Milvus产品相关时,从Milvus向量库召回相应的答案,并将答案整合到大模型的输出中返回给客户;否则,则直接通过大模型提供通用的回答。

  • 流程图

    image

通过这两个工作流的协同工作,我们能够实现对Milvus产品文档的实时更新与智能问答的高效处理。这一方案不仅提升了客户的查询效率,也增强了整体用户体验,为企业提供了强有力的技术支持。

前提条件

操作流程

步骤一:n8n安装与配置

  1. 安装n8n。

    1. 创建数据卷。

      为了持久化n8n的数据(如工作流、凭据等),首先需要创建一个Docker数据卷。执行以下命令,创建一个名为n8n_data的数据卷。

      docker volume create n8n_data
    2. 启动n8n容器。

      执行以下命令启动n8n容器,并将数据卷挂载到容器中。

      docker run --name n8n -d \
          -e N8N_SECURE_COOKIE=false \
          -p 5678:5678 \
          -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

      涉及参数说明如下:

      • --name n8n:指定容器名称为n8n

      • -d:以后台模式运行容器。

      • -e N8N_SECURE_COOKIE=false:禁用安全Cookie设置(适用于开发或测试环境)。

      • -p 5678:5878:将主机的5678端口映射到容器的5678端口。

      • -v n8n_data:/home/node/.n8n:将本地数据卷n8n_data挂载到容器内的/home/node/.n8n目录,用于存储n8n的数据。

      • docker.n8n.io/n8nio/n8n:使用的n8n镜像。

    3. 验证安装是否成功。

      启动容器后,在浏览器中访问http://127.0.0.1:5678/地址,验证n8n服务是否正常运行。

      说明

      如果n8n运行在远程服务器(例如,云服务器或虚拟机)上,则需要将127.0.0.1替换为服务器的公网IP地址或域名,并确保网络能够正常访问。

      如果安装成功,您将看到n8n的登录页面。

    4. 设置管理员账号。

      首次访问时,n8n会提示您设置管理员账号和密码。

  2. 配置MilvusCredential。

    1. n8n控制台左侧导航栏,选择image > Credential

    2. Add new credential对话框中,搜索Milvus,单击Continue

      image

    3. Milvus account对话框中,配置以下信息,单击Save

      image

      参数

      说明

      Base URL 

      填写格式为http://localhost:19530,需替换localhost为阿里云Milvus公网地址。

      Username

      填写为您的阿里云Milvus用户。例如,默认的root。

      Password

      填写为您的阿里云Milvus用户的密码。

  3. 配置GithubCredential。

    1. n8n控制台左侧导航栏,选择image > Credential

    2. Add new credential对话框中,搜索GitHub API,单击Continue

      image

    3. GitHub account对话框中,配置以下参数,单击Save

      image

      参数

      说明

      Github Server 

      GitHub API 的服务端地址。使用默认值即可。

      User

      GitHub账户的用户名(Username)。

      Access Token

      GitHubToken信息。

步骤二:拉取GitHub数据创建知识库

  1. n8n控制台左侧导航栏,选择image > Workflow

  2. 配置List files节点。

    1. 在打开的Workflow页面,单击image,在右侧选择GitHubList files节点。

      image

    2. List files节点中,配置以下参数。

      image

      参数

      说明

      Repository Owner

      选择By Name,然后填写仓库Owner,例如,milvus-io

      Repository Name

      选择milvus

      Path

      指定操作的具体位置。本文示例填写为docs/design_docs

    3. 单击Execute step,查看输出信息。

      image

  3. 配置Split Out节点。

    1. 在工作流页面,单击image,然后在右侧面板中搜索并单击Split Out

      image

    2. Split Out节点中,配置Fields To Split Outdownload_url,然后单击Execute step

      image

  4. 配置If节点。

    为避免在执行后出现null或以.png结尾的文档,从而可能影响后续HTTP获取的准确性,因此我们需要配置一个If Node,以过滤掉null和非.md的链接。

    1. 在工作流页面,单击image,然后在右侧面板中搜索并单击If

    2. If节点中,按照下图配置Conditions,然后单击Execute step

      image

  5. 配置Http Request节点。

    1. 在工作流页面,单击true所在行的image,然后在右侧面板中搜索并单击Http Request

      image

    2. Http Request节点中,配置URL{{ $json.download_url }},然后单击Execute step

      image

      截至目前,我们已成功提取了Milvus官方网站的文档内容。该部分的完整工作流程如下图所示。

      image

  6. 配置Milvus Vector Store节点。

    1. 在工作流页面,单击Http Request节点后的image,然后在右侧面板中搜索并选择Milvus Vector Store > Add documents to vector store

      image

    2. Milvus Vector Store节点中,配置以下参数。

      image

      参数

      说明

      Milvus Collection

      选择By ID,然后填写Collection名称。例如,n8n_test。

      Embedding Batch Size

      该参数用于控制每次嵌入操作中处理的文档数量。本文设置为25。

      Options

      单击Add Option,然后打开Clear Collection的开关,这样在每次插入时,将自动清除数据。

    3. Milvus Vector Store节点的左下角,单击Embeddingimage图标,添加embedding模型。

    4. 在右侧面板中搜索并选择Embeddings OpenAI

    5. Embeddings OpenAI节点中,配置以下参数。

      1. Credential to connect with下拉列表中选择Create new credential

      2. 在弹出的OpenAi account对话框中,配置以下信息后关闭该对话框。

        image

        参数

        说明

        API Key

        填写已获取的API Key,具体请参见获取API Key

        Base URL

        填写为https://dashscope.aliyuncs.com/compatible-mode/v1

      3. Model下拉列表中选择text-embedding-v1模型。

        image

    6. 配置Data Loader。

      1. 在工作流页面,单击image图标,选择Default Data Loader

        image

      2. Default Data Loader节点,配置以下参数。

        image

        参数

        说明

        Mode

        选择Load Specific Data

        Data

        填写为{{$json.data}}

    7. 配置Schedule Trigger节点。

      考虑到GitHub上文档的实时性,我们需要定期同步所有文档。因此,添加一个Schedule Trigger节点,以定时执行的方式放在工作流的最前面以触发工作流。具体配置如下,我们选择的定期同步周期为每天。

      1. 在工作流页面,单击右侧的image图标,搜索并选择Schedule Trigger

      2. 单击Back to canvas

        image

      3. Schedule Trigger节点放在工作流的最前面。

        截至目前,GitHub上提取文档内容及录入Milvus向量库的工作流程已完成配置,如下图所示。

        image

  7. 执行工作流并查看日志。

    在工作流页面,执行该工作流以查看下方的交互式日志。

    image

  8. Milvus控制台验证数据。

    1. Milvus控制台开启公网访问并访问Attu页面,具体操作请参见网络访问与安全设置访问Attu页面

    2. Attu页面,可以看到对应的Collection(n8n_test)已存在。请在Schema页面单击加载Collection

      数据页面中,可以查看已加载的数据。

      image

步骤三:大模型结合 Milvus 检索增强实现智能问答

为了实现智能化的问答功能,本例将展示如何通过n8n工作流,结合大语言模型(LLM)和Milvus向量数据库的知识检索能力,构建一个高效的问答系统。

  1. n8n控制台左侧导航栏,选择image > Workflow

  2. 配置When chat message received节点。

    1. 在打开的Workflow页面,单击image,在右侧选择On chat message节点。

    2. 单击Back to canvas

  3. 配置AI Agent节点。

    创建一个AI Agent节点,该节点通过接收Chat输入,以便在客户搜索Milvus相关信息时,从之前建立的知识库中进行内容召回。此外,采用大型模型的默认输出进行返回。

    1. 在打开的Workflow页面,单击image,在右侧选择AI Agent节点。

      image

    2. AI Agent对话框中,单击Add Option,然后选择System Message。在本例中,输入以下内容作为System Prompt。

      image

      你是主控 AI,负责统筹不同的专业子代理,以执行复杂的用户任务。
      
      你有以下的Agent/Tool
      
      1. MilvusDocumentAgent  
      Agent负责搜索所有Milvus相关的文档,当涉及到Milvus相关搜索,运行这个Agent
      
      其他情况下,直接在该节点执行
    3. 配置Chat Model节点。

      1. 单击下方Chat Modelimage

      2. 在右侧选择OpenAI Chat Model

      3. OpenAI Chat Model对话框中,Model设选用qwen-plus模型。

        image

      4. 单击Back to canvas

    4. 配置Memory节点。

      1. 单击下方Memoryimage

      2. 在右侧选择Simple Memory

        image

      3. 单击Back to canvas

  4. 配置Milvus Vector Store节点。

    1. 在工作流页面,单击AI Agent节点Toolimage,然后在右侧面板中搜索并选择Milvus Vector Store

      image

    2. Milvus Vector Store节点中,填写DescriptionMilvus Collection选择之前创建知识库的n8n_test。

      image

    3. 单击下方Embeddingimage图标,添加embedding模型。

    4. 在右侧面板中搜索并选择Embeddings OpenAI

    5. Model下拉列表中选择text-embedding-v1模型。

      image

    6. 单击Back to canvas

  5. 配置Set节点。

    1. 单击AI Agent节点后的image,然后在右侧面板中搜索并选择Edit Fields

      image

    2. Edit Fields对话框中,单击Add Field,设置以下信息将本文输出的内容提取出来。

      image

    3. 单击Back to canvas

  6. 验证效果。

    Chat输入框中输入以下问题。

    MilvusData Classification策略有哪些?

    可以看到AI Agent通过将Milvus知识库召回的内容,结合大模型润色总结,输出了一个可读性较强的内容。

    image

    通过上述配置,我们成功实现了大模型与Milvus向量检索的结合,构建了一个智能化的问答系统。该系统不仅能够快速从知识库中召回相关内容,还能借助大模型的能力生成高质量的回答,显著提升了用户体验。