Demo运行样例
功能描述
RAG SDK 提供知识库对接开源 Dify 框架的样例。通过 FastAPI 服务将 RAG SDK 的知识库管理、文档检索、问答能力封装为标准接口,供 Dify 平台调用。主要特性包括:
- Dify 外接知识库:作为 Dify 平台的外部知识库服务,提供
/retrieval和/query接口 - 文档管理 API:提供文档上传(
/upload_file)、删除(/delete_file)、列表查询(/list_files)等接口 - 图文并茂回答:可选启用 VLM 模型解析文档中的图片,生成图文交错回答
- 混合检索:支持向量检索和 BM25 全文检索,结果经 reranker 精排后返回
前提条件
执行Demo前请先阅读《RAG SDK 用户指南》,并按照其中"安装部署"章节的要求完成必要软、硬件安装。 本章节为"应用开发"章节提供开发样例代码,便于开发者快速开发。
配套版本说明
| 服务 | 版本要求 | 说明 |
|---|---|---|
| Dify | 0.15.3 | 开源 LLM 应用开发平台 |
| Milvus | v2.5.0 及以上 | 向量数据库 |
| mis-tei embedding/reranker | - | 昇腾 embedding 和 reranker 服务化部署 |
| LLM 服务 | - | 大语言模型推理服务 |
| VLM 服务(可选) | - | 视觉语言模型,用于图片解析 |
使用步骤
-
部署milvus服务(部署参考链接)
-
部署mis-tei emb,reranker服务(部署参考链接)
-
如果需要解析docx、pdf文件中的图片进行图文并茂回答,启动demo时请配置 --parse_image 使能图片解析功能,需部署VLM模型服务(部署参考链接),LLM服务(部署参考链接),注意如果图片尺寸长或宽小于256,由于信息小,将被丢弃处理
-
执行dify_demo.py运行服务,具体参数可执行 --help查看
python3 dify_demo.py --host "${HOST_IP}" --port "${PORT}" --llm_base_url "${LLM_BASE_URL}" --vlm_base_url "${VLM_BASE_URL}" --embedding_url "${EMBEDDING_URL}" --reranker_url "${RERANKER_URL}"Note
- HOST_IP、PORT为用户服务的IP和端口信息
- LLM_BASE_URL 为默认或者用户配置的LLM大模型服务地址
- VLM_BASE_URL 为默认或者用户配置的VLM大模型服务地址
- EMBEDDING_URL 为默认或者用户配置的向量模型服务地址
- RERANKER_URL 为默认或者用户配置的排序模型服务地址
- 若用户需要通过网页访问服务的doc文档,需要在PORT后拼接/docs,访问示例:http://{HOST_IP}:{PORT}/docs
-
通过接口上传、删除、查看文档等操作
-
支持在dify界面配置外接知识库,部署参考链接
-
可调用/query接口问答测试,代码执行路径下存放了LLM回答文件response.md,可通过如下代码启动web网页可直观展示答复内容,复制如下代码在dify_demo.py同级目录下创建st.py
import streamlit as st
import re
# 读取 Markdown 文件
with open("./response.md", "r", encoding="utf-8") as file:
markdown_text = file.read()
# 在 Streamlit 应用中显示 Markdown 内容,同时处理图片
def render_markdown_with_images(markdown_text):
# 匹配 Markdown 图片语法 
pattern = re.compile(r'!\[.*?\]\((.*?)\)')
# 记录上一个位置
last_pos = 0
# 查找所有匹配项
for match in pattern.finditer(markdown_text):
# 显示上一个位置到匹配位置之间的文本
st.markdown(markdown_text[last_pos:match.start()], unsafe_allow_html=True)
# 显示图片
img_url = match.group(1)
st.image(img_url)
# 更新上一个位置
last_pos = match.end()
# 显示剩余的文本
st.markdown(markdown_text[last_pos:], unsafe_allow_html=True)
render_markdown_with_images(markdown_text)
调用函数显示内容
这里只是简单提供展示样例,如果需考虑安全,请开启https安全认证功能。
WEB服务启动命令:
streamlit run st.py --server.address "${HOST_IP}" --server.port "${PORT}"