Dify是一款開源的大語言模型(LLM)應用開發平台。它將後端即服務(Backend as Service)與LLMOps理念相結合,使開發人員能夠迅速構建生產級的產生式AI應用。本文將介紹如何基於RDS PostgreSQL與Dify平台構建智能問答應用。
步驟一:建立RDS PostgreSQL執行個體
步驟二:部署Dify
建立ECS執行個體,詳情請參見自訂購買ECS執行個體。
CPU版ECS執行個體,支援添加線上AI大模型。
GPU版ECS執行個體,支援添加線上及ECS本地的AI大模型。
重要本文以Alibaba Cloud Linux 3為例。
如果您購買的是GPU版的ECS執行個體,您需要在配置鏡像時,安裝對應的GPU驅動。使用GPU版的ECS執行個體,您可以使用Ollama將大模型部署在ECS上。
在ECS中,安裝Docker。詳情請參見安裝Docker。
(可選)如果購買的是GPU版的ECS執行個體,需要執行如下命令,安裝container-toolkit組件。
執行如下命令,擷取Dify源碼。
git clone https://github.com/langgenius/dify.git您可以通過
branch參數指定版本分支,以安裝特定版本。例如,安裝v1.0.0版時,可以使用如下命令。Dify的分支版本請參見dify。git clone https://github.com/langgenius/dify.git --branch 1.0.0說明如果未安裝Git命令,請執行
sudo yum install git -y進行安裝。配置環境變數,將RDS PostgreSQL作為預設資料庫和向量庫。
設定RDS PostgreSQL為預設資料庫。
export DB_USERNAME=testdbuser export DB_PASSWORD=dbPassword export DB_HOST=pgm-****.pg.rds.aliyuncs.com export DB_PORT=5432 export DB_DATABASE=testdb01請根據實際情況替換代碼中的參數值。
參數
說明
DB_USERNAME
RDS PostgreSQL執行個體的高許可權帳號。
DB_PASSWORD
RDS PostgreSQL執行個體的高許可權帳號的密碼。
DB_HOST
RDS PostgreSQL執行個體的外網串連地址。
DB_PORT
RDS PostgreSQL執行個體的外網連接埠,預設為5432。
DB_DATABASE
RDS PostgreSQL執行個體中的資料庫名稱。
設定RDS PostgreSQL作為預設向量庫。
export VECTOR_STORE=pgvector export PGVECTOR_HOST=pgm-****.pg.rds.aliyuncs.com export PGVECTOR_PORT=5432 export PGVECTOR_USER=testdbuser export PGVECTOR_PASSWORD=dbPassword export PGVECTOR_DATABASE=testdb01請根據實際情況替換代碼中的參數值。
參數
說明
VECTOR_STORE
使用vector外掛程式。
PGVECTOR_USERNAME
RDS PostgreSQL執行個體的高許可權帳號。
PGVECTOR_PASSWORD
RDS PostgreSQL執行個體的高許可權帳號的密碼。
PGVECTOR_HOST
RDS PostgreSQL執行個體的外網串連地址。
PGVECTOR_PORT
RDS PostgreSQL執行個體的外網連接埠,預設為5432。
PGVECTOR_DATABASE
RDS PostgreSQL執行個體中的資料庫名稱。
您也可以通過
.env檔案配置RDS PostgreSQL為預設資料庫和向量庫。(可選)若您希望在ECS中避免運行預設的資料庫和Weaviate容器,以節省流量和儲存空間,請編輯
.env和docker-compose.yaml檔案,以禁用預設的資料庫和Weaviate容器。執行如下命令,啟動Dify鏡像。
cd /root/dify/docker docker compose -f docker-compose.yaml up -d
步驟三:訪問Dify服務
在瀏覽器中訪問
http://<ECS公網IP地址>/install,以訪問Dify服務。說明如果訪問失敗,請多次重新整理頁面,Dify正在初始化儲存表結構及相關資訊。
請根據頁面提示設定管理員賬戶(即郵箱地址、使用者名稱和密碼),以註冊Dify平台來使用服務。
步驟四:添加並配置AI模型
本文以通義千問為例。
登入Dify平台。
在右上方,單擊使用者名稱稱 > 設定。
在設定頁面,選擇模型供應商 > 通義千問 > (設定)。
在通義千問的設定頁面,單擊連結擷取阿里雲百鍊的API Key。
輸入擷取到的API Key後,單擊儲存。

如果您購買的是GPU版本的是ECS,您可以將通義千問的LLM服務部署在ECS上。
步驟五:建立知識庫
通過專屬知識庫,可使智能問答應用更加精準和專業地回答相關問題。
前提條件
已準備好專屬知識庫的語料檔案。當前已支援TXT、MARKDOWN、MDX、PDF、HTML、XLSX、XLS、DOCX、CSV、MD和HTM等格式,每個檔案不超過15 MB。
操作步驟
依次單擊知識庫 > 建立知識庫 > 匯入已有文本 > 選擇檔案 > 下一步,將準備好的檔案上傳至知識庫。

單擊下一步後,您可根據頁面引導,進行文本分段與清洗。
此處的配置參數保持預設即可。知識庫將自動為上傳的文檔進行清洗、分段並建立索引,以便後續智能問答應用在回答時檢索參考。
通過RDS PostgreSQL驗證知識庫並確認索引
配置知識庫完成後,需在RDS PostgreSQL資料庫中對知識庫內容進行驗證,並對每個知識庫表的索引進行確認。
串連Dify使用的RDS PostgreSQL資料庫,串連RDS PostgreSQL執行個體。
執行如下命令,查看知識庫對應的ID。
SELECT * FROM datasets;將目標ID中的
-替換為_,加上首碼embedding_vector_index_和尾碼_nod後,即為儲存該知識庫的表名稱。例如,執行如下命令,即可查看目標知識庫在RDS PostgreSQL中儲存的資料。SELECT * FROM embedding_vector_index_6b169753_****_****_be66_9bddc44a4848_nod;確認知識庫索引。
Dify平台在建立知識庫時,會預設為每一個知識庫建立HNSW索引,以加速使用pgvector外掛程式進行的向量相似性查詢。系統預設使用如下的SQL語句進行向量相似性查詢。
SELECT meta, text, embedding <=> $1 AS distance FROM embedding_vector_index_6b169753_****_****_be66_9bddc44a4848_nod ORDER BY distance LIMIT $2;使用以下語句檢查知識庫表的索引及其預設參數是否符合召回率要求。HNSW索引
m、ef_construction與召回率之間的關係,請參見pgvector效能測試(基於HNSW索引)。SELECT * FROM pg_indexes WHERE tablename = 'embedding_vector_index_6b169753_****_****_be66_9bddc44a4848_nod';如未自動建立索引,或索引的預設參數不符合召回率要求,請執行以下命令以手動建立索引。
(可選)刪除已有索引。
DROP INDEX IF EXISTS embedding_vector_index_6b169753_****_****_be66_9bddc44a4848_nod;建立索引。
CREATE INDEX ON embedding_vector_index_6b169753_****_****_be66_9bddc44a4848_nod USING hnsw (embedding vector_cosine_ops); WITH (m = '16', ef_construction = '100');
說明embedding_vector_index_6b169753_****_****_be66_9bddc44a4848_nod為索引表名稱,在實際應用中,請根據需要替換該表名稱。
步驟六:建立智能問答應用
本文以應用模板中的Question Classifier + Knowledge + Chatbot模板為例。
單擊工作室 > 從應用模板建立 。

尋找Question Classifier + Knowledge + Chatbot,並單擊使用該模板。
配置應用程式名稱和表徵圖後,單擊建立。
在工作室頁面,單擊新建立的應用卡,進入到應用編排頁面。
配置應用工作流程,刪除Answer模組,保留一個Knowledge Retrieval模組,並將Question Classifier和LLM模組的AI模型修改為通義千問。

配置通義千問大模型時,需要將Top P的值設定為小於1的數值。

編輯Question Classifier模組,根據實際情況修改問題分類。例如,此前建立的知識庫是關於PostgreSQL的內容,以PostgreSQL知識問答為例,可以設定:
當問題和PostgreSQL相關時,採用知識庫+通義千問大模型進行歸納總結。
當問題和PostgreSQL無關時,採用通義千問大模型進行回答。

編輯Knowledge Retrieval模組,添加此前建立的與PostgreSQL相關的知識庫。

單擊右上方的預覽,進行問答示範。示範正常後,單擊右上方的發布,即可發布應用。