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的源碼到云主機上,以下以v1.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: '[IP: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的使用。