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

更新时间:
复制 MD 格式

本文将聚焦于向量检索服务Milvus版(简称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

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

      参数

      说明

      Base URL 

      填写格式为http://localhost:19530,需替换localhostMilvus公网地址。

      Username

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

      Password

      填写为您的Milvus用户的密码。

  3. 配置GithubCredential。

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

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

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

      参数

      说明

      Github Server 

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

      User

      GitHub账户的用户名(Username)。

      Access Token

      GitHubToken信息。

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

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

  2. 配置List files节点。

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

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

      参数

      说明

      Repository Owner

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

      Repository Name

      选择milvus

      Path

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

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

      GitHub List files 节点执行成功,配置参数为:Credential 选择 GitHub accountResource 选择 FileOperation 选择 ListRepository Owner 设为 milvus-ioRepository Name 设为 milvusPath 填写 docs/design_docs/。OUTPUT 区域返回 28 条 JSON 格式的文件记录,每条包含文件名、path、sha、size、url、type 等字段,底部提示 Node executed successfully

  3. 配置Split Out节点。

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

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

      同时将 Include 设置为 No Other Fields。节点执行成功后,输出 28 项结果,每项仅包含 download_url 字段。

  4. 配置If节点。

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

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

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

      配置两个 AND 条件:第一个条件将字段设置为 {{$json.download_url}},操作选择 starts with,值填写 http;第二个条件将字段设置为 {{$json.download_url}},操作选择 ends with,值填写 .md。单击 Execute step,执行成功后 True Branch 输出符合条件的 Markdown 文件下载链接。

  5. 配置Http Request节点。

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

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

      其中 Method 选择 GET

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

      该工作流包含5个依次连接的节点:When clicking Execute workflow(触发,输出1 item)→ List files(从GitHub获取28个文件)→ Split Out(拆分为28 items)→ If(条件过滤,true分支输出24 items,false分支输出4 items)→ HTTP Request(处理24个文档内容)。核心处理部分(List filesHTTP Request)构成分组"获取Git项目文档列表并提取文档内容",所有节点均执行成功。

  6. 配置Milvus Vector Store节点。

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

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

      Credential to connect with 选择已创建的 Milvus 账号凭证,Operation Mode 选择 Insert Documents

      参数

      说明

      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对话框中,配置以下信息后关闭该对话框。

        参数

        说明

        API Key

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

        Base URL

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

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

    6. 配置Data Loader。

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

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

        其中 Type of Data 选择 JSONText Splitting 选择 Simple

        参数

        说明

        Mode

        选择Load Specific Data

        Data

        填写为{{$json.data}}

    7. 配置Schedule Trigger节点。

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

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

      2. 单击Back to canvas

        Schedule Trigger1 节点的 Parameters 中,将 Trigger Interval 设置为 DaysDays Between Triggers 设置为 1Trigger at Hour 设置为 MidnightTrigger at Minute 设置为 0,即每天午夜 0 分自动触发一次工作流。

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

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

        image

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

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

    工作流执行成功,总耗时约 37 秒。工作流节点依次为 Schedule TriggerList files(28 items)→ Split Out(28 items)→ If(True 分支 24 items,False 分支 4 items)→ HTTP Request(24 items)→ Milvus Vector Store(198 items),其中 Milvus Vector Store 连接 Default Data LoaderEmbeddings 子节点。日志面板显示各节点均执行成功,耗时最长的节点为 Milvus Vector Store(约 30.4 秒)。

  8. Milvus控制台验证数据。

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

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

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

      加载完成后,集合状态显示为 已加载。Schema 包含 6 个字段:source(VarChar)、blobType(VarChar)、loc(VarChar)、langchain_primaryid(Int64,主键,自动 ID)、langchain_text(VarChar(993))和 langchain_vector(FloatVector(1536),已创建 HNSW 索引,参数为 metric_type: L2、M: 8、efConstruction: 64)。

步骤三:大模型结合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节点。

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

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

      在 AI Agent 节点底部,单击 Memory 连接槽的 + 按钮,为该节点添加 Memory 组件。

    3. 配置Chat Model节点。

      1. 单击下方Chat Modelimage

      2. 在右侧选择OpenAI Chat Model

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

        其中Credential to connect with选择已配置的OpenAi account凭证。

      4. 单击Back to canvas

    4. 配置Memory节点。

      1. 单击下方Memoryimage

      2. 在右侧选择Simple Memory

        Simple Memory 参数配置面板中,将 Session ID 设置为 Connected Chat Trigger NodeSession Key From Previous Node 设置为表达式 {{ $json.sessionId }}Context Window Length 设置为 5(表示模型接收的历史交互轮数)。

      3. 单击Back to canvas

  4. 配置Milvus Vector Store节点。

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

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

      其中 Credential to connect with 选择已创建的 Milvus accountOperation Mode 选择 Retrieve Documents (As Tool for AI Agent)Limit 设为 4,开启 Include Metadata 开关,关闭 Rerank Results 开关。

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

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

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

    6. 单击Back to canvas

  5. 配置Set节点。

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

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

      Mode 设置为 Manual MappingName 设置为 testValue 设置为 {{ $json.output }},类型选择 String

    3. 单击Back to canvas

  6. 验证效果。

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

    MilvusData Classification策略有哪些?

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

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