RAG SDK对接Dify,快速搭建知识问答系统
作者:昇腾实战派
知识地图: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界面对所连接的外部知识库执行召回测试,测试效果如下(参考样例)
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐



所有评论(0)