Dify作为一个低代码平台,将AI的强大能力整合到日常的数据流和工作流中,旨在帮助用户简化和自动化各种业务和数据处理任务。开源Dify可以将天翼云云搜索服务的OpenSearch作为向量数据库和全文检索库,通过接入外部模型的方式低代码、低成本、快速地的完成知识库问答的RAG应用。
RAG(Retriever-augmented Generation)是一种结合了信息检索和生成的自然语言处理(NLP)技术,特别适用于需要从大量数据中检索信息并生成自然语言文本的场景。它在处理复杂任务时能够提升生成模型的性能,尤其是在模型缺乏足够上下文或知识的情况下。
RAG的优势
RAG通过检索外部知识库或数据库中的相关信息,能够在生成过程中动态地补充实时或特定领域的知识,弥补了生成模型的“知识盲区”。这使得模型能够在没有训练时直接获得的信息基础上进行更加准确的回答或内容生成。针对企业内部包含的敏感数据(如薪资标准、客户资料等)以及大量专有信息(包括产品文档、客户案例、流程手册等),RAG提供了安全的解决方案。由于这些非公开信息无法直接预置到大模型中,RAG通过外部知识调用的方式,既满足了信息需求,又确保了数据安全性。
前置需求
开通天翼云云搜索服务OpenSearch实例,获取内网地址和实例密码。
准备好云主机环境用来部署Dify,需要和OpenSearch实例网络互通。
准备好Deepseek模型、Embedding向量模型、Rerank重排序模型。
安装好Docker环境。
RAG流程
用户通过Dify对话。
调用Embedding模型将查询向量化。
使用OpenSearch分别对字段和向量进行全文检索和向量检索,通过Rerank模型来重排序,返回最终召回的文档。
检索到的文档以及对话的上下文通过Deepseek大模型总结归纳生成详细准确的回复。
步骤一:部署Dify
本文以云主机自建Dify为例,讲述搭建应用的操作步骤:
克隆Dify的源码到云主机上
git clone https://github.com/langgenius/dify.git --branch 1.3.0
或
git clone https://gitee.com/dify_ai/dify.git --branch 1.3.0
进入dify源码的docker目录
cd dify/docker
拷贝文件
cp docker-compose.yaml docker-compose.yaml.bak
cp .env.example .env
修改.env文件
vim .env
使用opensearch作为全文检索库和向量检索库,将VECTOR_STORE的值修改为opensearch
VECTOR_STORE=opensearch
根据以下表格配置OpenSearch实例的相关信息
参数 | 含义 |
---|---|
OPENSEARCH_HOST | OpenSearch的内网地址 |
OPENSEARCH_PORT | 端口号,云搜索服务默认9200 |
OPENSEARCH_USER | 用户默认admin |
OPENSEARCH_PASSWORD | OpenSearch实例的密码 |
OPENSEARCH_SECURE | OpenSearch实例为https模型则设置为true,http则设置为false |
OPENSEARCH_HOST=ip
OPENSEARCH_PORT=9200
OPENSEARCH_USER=admin
OPENSEARCH_PASSWORD=*******
OPENSEARCH_SECURE=true
修改docker-compose文件。
vim docker-compose.yaml
为防止拉取公网镜像,将镜像名为opensearch和opensearch-dashboards部分的配置注释掉。
# # Opensearch vector database
# opensearch:
# container_name: opensearch
# image: opensearchproject/opensearch:latest
# profiles:
# - opensearch
# environment:
# discovery.type: ${OPENSEARCH_DISCOVERY_TYPE:-single-node}
# bootstrap.memory_lock: ${OPENSEARCH_BOOTSTRAP_MEMORY_LOCK:-true}
# OPENSEARCH_JAVA_OPTS: -Xms${OPENSEARCH_JAVA_OPTS_MIN:-512m} -Xmx${OPENSEARCH_JAVA_OPTS_MAX:-1024m}
# OPENSEARCH_INITIAL_ADMIN_PASSWORD: ${OPENSEARCH_INITIAL_ADMIN_PASSWORD:-Qazwsxedc!@#123}
# ulimits:
# memlock:
# soft: ${OPENSEARCH_MEMLOCK_SOFT:--1}
# hard: ${OPENSEARCH_MEMLOCK_HARD:--1}
# nofile:
# soft: ${OPENSEARCH_NOFILE_SOFT:-65536}
# hard: ${OPENSEARCH_NOFILE_HARD:-65536}
# volumes:
# - ./volumes/opensearch/data:/usr/share/opensearch/data
# networks:
# - opensearch-net
# opensearch-dashboards:
# container_name: opensearch-dashboards
# image: opensearchproject/opensearch-dashboards:latest
# profiles:
# - opensearch
# environment:
# OPENSEARCH_HOSTS: '["https://opensearch:9200"]'
# volumes:
# - ./volumes/opensearch/opensearch_dashboards.yml:/usr/share/opensearch-dashboards/config/opensearch_dashboards.yml
# networks:
# - opensearch-net
# depends_on:
# - opensearch
启动服务
docker compose up -d
使用docker ps命令查看容器是否成功启动:
步骤二:使用Dify接入模型
首次访问ip:80/install,第一次访问需要设置管理员密码。
设置完管理员账户后,使用用户名和密码登录系统,进入主界面。点击右上角“设置”可以进入模型配置界面。
在列表中选择模型供应商,点击“安装”。推荐安装“OpenAI-API-compatible”,可以用此配置大部分的模型。
配置Embedding模型,填写模型名称,如:bge-m3。配置API endpoint URL和API Key,模型上下文长度设置为512。
和Embedding模型类似,配置Rerank模型,如:Rerank。填写模型名称、API endpoint URL和API Key,模型上下文长度设置为512。
大语言模型同上,可以根据实际情况配置,如:DeepSeek-R1。
可以查看已经成功配置的模型:
点击“系统模型设置”可以设置默认的模型。
步骤三:创建知识库
在Dify平台上选择“知识库”,单击“创建知识库”。
上传文档进对应知识库。格式可以为PDF、DOCX等。
文档上传完成后,设置分段策略、索引方式、检索策略,检索策略建议使用混合搜索,其他参数可以使用默认配置。
设置完分段和索引策略后点击“保存并处理”进行数据处理,对应行显示为“可用”即为完成处理。
步骤四:创建聊天助手
在应用类型中选择聊天助手,命名后完成创建。
选择RAG应用引用的知识库,会去引用的知识库里检索。
填入提示词,用来创建RAG demo。
完成以上配置后可以通过聊天框开启RAG的使用。