作者:昇腾实战派
知识地图https://blog.csdn.net/Lumos_Lovegood/article/details/161455142

背景概述

在企业知识管理、智能客服、文档检索等场景中,构建一个高效、灵活的知识问答系统是提升业务效率的重要手段。本文将介绍如何通过昇腾RAG SDK 对接 Dify,在Atlas 800I A2推理服务器上快速搭建一个支持文档上传、检索和问答的多模态知识问答系统。


一、技术简介

1.RAG SDK

昇腾RAG SDK是昇腾推出的知识增强开发套件,旨在高效解决大模型知识更新慢、垂直领域回答弱的核心痛点,通过提供昇腾亲和的多模态文档解析、知识库管理和生成增强等功能,可以支持用户快速构建高性能、高准确度的知识问答系统,降低大模型应用开发门槛。

2.Dify

Dify 是一个开源的大语言模型应用开发平台。它结合了后端即服务和LLMOps的理念,让开发者能通过可视化的低代码方式,快速构建和部署生产级的生成式AI应用,其核心能力包括可视化工作流程编排、灵活的模型支持和强大的企业级RAG引擎驱动,极大地降低了AI应用开发的门槛。

二、系统架构全景图

RAG SDK 对接 Dify 的集成方案采用解耦架构设计,Dify 向用户提供了统一的应用开发与编排API 接口,并通过API接口从本地知识库中检索数据,RAG SDK 负责本地知识库文档的管理,包括文本及图像解析、向量化、检索和重排序。系统架构如下图所示:

系统架构

三、支持的产品和版本

以Atlas 800I A2设备为例,以下为软件配套:

CANN版本 RAG SDK版本 Dify版本 Milvus版本 系统推荐
8.0.0 7.1.RC1 0.15.3 v2.5.0 及以上 Ubuntu 20.04

四、快速部署

1. 镜像及应用示例代码下载

应用所需的镜像和下载参考链接如下表所示,其中Dify、RAG SDK、milvus和mis-tei是必选的镜像,如果需要解析图片并在本地知识库进行问答则需要另外下载昇腾vllm镜像,以部署VLM模型和LLM模型。

镜像名称 镜像下载参考链接 必选
Dify https://github.com/langgenius/dify?tab=readme-ov-file#quick-start
RAG SDK https://www.hiascend.com/document/detail/zh/mindsdk/71rc1/rag/ragug/mxragug_0009.html
milvus https://milvus.io/docs/zh/install_standalone-docker.md
mis-tei(emb、reranker) https://www.hiascend.com/developer/ascendhub/detail/07a016975cc341f3a5ae131f2b52399d
vllm(vlm、llm) https://www.hiascend.com/developer/ascendhub/detail/9eedc82e0c0644b2a2a9d0821ed5e7ad

镜像下载完成后,可通过如下命令检查镜像加载情况

docker images

搭建知识库服务的应用示例代码托管于gitcode,对应的文件位置如下:

https://gitcode.com/Ascend/mindsdk-referenceapps/blob/master/RAGSDK/MainRepo/Samples/RagDemo/dify/dify_demo.py

2. 容器启动

根据本地部署的环境特点,选择符合自身的实际配置,更多详情请参考各镜像模型的镜像概述。
(1). Dify容器启动

cd dify
cd docker
cp .env.example .env
docker compose up -d

(2). RAG SDK容器启动

# 设置容器名称
export CONTAINER_NAME=ragsdk
# 选择镜像
export IMG_NAME=swr.cn-south-1.myhuaweicloud.com/ascendhub/ragsdk:7.1.RC1-300I-Duo-aarch64
# 启动应用微服务,使用ASCEND_VISIBLE_DEVICES选择卡号,范围[0,7],示例选择卡0
docker run -it --network=host -u HwHiAiUser --name=$CONTAINER_NAME -e ASCEND_VISIBLE_DEVICES=0  $IMG_NAME bash

(3). milvus容器启动

bash standalone_embed.sh start

(4). mis-tei嵌入模型/重排序模型容器启动

# 设置容器名称
export CONTAINER_NAME=tei
# 设置嵌入或重排序模型名称
export MODEL_NAME=bge-m3
# 设置服务IP
export IP=127.0.0.1
# 设置服务端口
export PORT=8080
# 选择镜像
export IMG_NAME=swr.cn-south-1.myhuaweicloud.com/ascendhub/mis-tei:7.1.RC1-300I-Duo-aarch64
# 启动应用微服务,使用ASCEND_VISIBLE_DEVICES选择卡号,范围[0,7],示例选择卡1
docker run -itd -e ENABLE_BOOST=True -e ASCEND_VISIBLE_DEVICES=1 --name=$CONTAINER_NAME --net=host \
$IMG_NAME $MODEL_NAME $IP $PORT

(5). vllm推理模型容器启动(可选)

 # 设置容器名称
 export CONTAINER_NAME=qwen2.5-vl-7b-instruct

 # 选择镜像
 export IMG_NAME=swr.cn-south-1.myhuaweicloud.com/ascendhub/qwen2.5-vl-7b-instruct:7.1.T9-aarch64

 # 启动推理微服务,使用ASCEND_VISIBLE_DEVICES选择卡号,范围[0,7],示例选择卡2
 docker run -itd \
     --name=$CONTAINER_NAME \
     -e ASCEND_VISIBLE_DEVICES=2 \
     -e MIS_CONFIG=atlas800ia2-2x32gb-bf16-vllm-default \
     -v $LOCAL_CACHE_PATH:/opt/mis/.cache \
     -p 8000:8000 \
     --shm-size 1gb \
     $IMG_NAME

3. 知识库服务启动与Dify对接

在RAG SDK容器内部克隆mindsdk-referenceapps仓库,并进入dify应用示例代码目录。

git clone https://gitcode.com/Ascend/mindsdk-referenceapps
cd mindsdk-referenceapps/RAGSDK/MainRepo/Samples/RagDemo/dify

执行dify_demo.py运行服务,具体参数可执行 --help查看,简化版启动示例如下。

python3 dify_demo.py \
  --host "${APP_IP}" \
  --port "${APP_PORT}" \
  --embedding_url "http://${TEI_EMB_SERVICE_IP}:9123/embed" \
  --reranker_url "http://${TEI_RERANKER_SERVICE_IP}:8080/rerank" \
  --milvus_url "http://${MILVUS_SERVICE_IP}:19530" \
  --knowledge_name "${KNOWLEDGE_NAME}"

执行启动命令后,启动界面显示如下内容则表示服务启动成功:

INFO:     Started server process [3010]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://${APP_IP}:${APP_PORT} (Press CTRL+C to quit)

知识库服务提供多个本地知识管理接口,同时提供一个符合Dify规范要求的知识检索接口供Dify平台进行调用,对应的接口列表如下。

接口 说明 请求方式
/dify/retrieval dify检索接口 POST
/query 问答接口 POST
/uploadfile 知识上传接口 POST
/deletefile 知识删除接口 POST
/deleteallfiles 所有知识删除接口 DELETE
/listfiles 知识列举接口 GET
/query_file_content 知识查询接口 POST

在FastAPI接口界面使用/uploadfile接口上传知识文档并解析入库,如果得到如下响应内容则表示文档上传成功:
文档上传成功

如果想要删除知识可以使用/deletefile接口删除指定的文档,或者调用/deleteallfiles接口删除所有已上传的文档,响应如下图所示则说明知识文档删除成功:
文档删除成功

进入Dify容器,在界面输入知识库服务所提供的检索接口端点完成同RAG SDK知识库的对接。

完成对接

在Dify界面对所连接的外部知识库执行召回测试,测试效果如下(参考样例)
召回测试

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐