從零到一,用 Dify 打造 NL2SQL
原創近期 AI 大火,朋友圈很多都在曬成果。我也禁不住嘗試,使用Dify這一開發平臺做了第一個 AI 應用。整體感覺下來還是非常方便的,也是由于Dify的出現大大降低了構建 AI 應用的門檻,相信未來真的可以解放人的雙手,讓 AI 幫助我們解決更多的問題。
1. Dify 是什么
Dify 是一款開源的大語言模型(LLM) 應用開發平臺。它融合了后端即服務和 LLMOps 的理念,使開發者可以快速搭建生產級的生成式 AI 應用。即使你是非技術人員,也能參與到 AI 應用的定義和數據運營過程中。由于 Dify 內置了構建 LLM 應用所需的關鍵技術棧,包括對數百個模型的支持、直觀的 Prompt 編排界面、高質量的 RAG 引擎、穩健的 Agent 框架、靈活的流程編排,并同時提供了一套易用的界面和 API。這為開發者節省了許多重復造輪子的時間,使其可以專注在創新和業務需求上。
1)部署Dify
Dify 提供本地源碼部署和Docker Compose兩種方式,這里選擇后者比較簡單一些。前提條件如下:
1.PNG
安裝步驟也比較簡單,只需要幾步。
2.png
當看到如下提示時,代表啟動成功了,并可通過瀏覽器來訪問。
3.PNG
4.PNG
2)配置Dify
在使用 Dify 之前,需要先配置大模型供應商。Dify 目前已支持主流的模型供應商,例如 OpenAI 的 GPT 系列、Anthropic 的 Claude 系列等。不同模型的能力表現、參數類型會不一樣,你可以根據不同情景的應用需求選擇你喜歡的模型供應商。當然也可以自建,接入本地的大模型。在 Dify 中,按模型的使用場景將模型分為以下 4 類。
5.png
如下圖是自己做的配置,使用到了DeepSeek和通義千問。
6.PNG
2. 示例:打造NL2SQL
下面通過Dify做個示例,演示使用自然語言來查看數據庫中的數據。
1)需求分析
根據我們的訴求,通過自然語言來訪問數據庫,這里我們來分解下需求,大致可分為幾個階段:
- 用戶用自然語言方式輸入查詢需求
- 由知識庫將查詢需求與庫內元信息整合
- 使用LLM來分析并給出SQL描述
- 將SQL發送給數據庫執行
2)創建應用
開始前,我們先確定應用類型;Dify里可以創建多類應用,用戶可根據自身需求來選擇。這里根據需求,選擇使用Chatflow。
7.PNG
3)構建知識庫
需要將數據庫的字典信息整理為知識庫,為后續LLM使用打好基礎。Dify里支持多種構建知識庫的方式,這里使用了最為簡單的通過本地文件來構建。實踐中,這里走了一些彎路,摸索了一下可通過注釋信息構造出知識庫文件然后導入。例如下圖黃框就是根據表結構信息整理出來的。
8.png
在Dify中導入生成知識庫,這方面沒有太多經驗,反復嘗試了幾次。
9.png
4)LLM 處理邏輯
LLM 節點是 Chatflow/Workflow 的核心節點。該節點能夠利用大語言模型的對話/生成/分類/處理等能力,根據給定的提示詞處理廣泛的任務類型,并能夠在工作流的不同環節使用。也是整個流程中最為核心的節點,其可完成下面功能:
10.png
這里是使用LLM節點,完成推導SQL語句的過程。核心點在于為對話生成高質量的指導,這里參考了網上的實現做了微調。順便說一句,不同模型的能力還是存在差異,Dify提供了一次針對多個模型的聯調能力,可對比選擇最為合適的模型。
11.png
5)組件和數據處理
除了上述核心節點外,需求中還描述需要實行數據庫,這里直接引用第三方的工具,直接在Dify中安裝即可。Dify中已經支持了非常豐富的工具可供使用。這里單獨安裝了數據庫查詢工具。
12.png
此外,在實踐中還是發現從LLM中輸出的SQL文本,不能直接使用,仍然存在一些冗余字符需要處理下,因此也引用了代碼執行邏輯,其可以執行如Python、JavaScript的腳本來處理數據。
13.png
6)工作流繪制
最終我們把整個邏輯串起來,從開始、知識檢索、語句生成、文本微調、語句查詢、反饋結果多個步驟,通過上下文關聯起來。Dify中是可以支持復雜工作流關系,包括如分支、判斷、循環等等。這個流程比較簡單,串行執行就可以。
14.png
7)效果展示
整個流程繪制完畢后,可以調試運行,都沒問題后發布即可。簡單測試下:
15.png
針對每次問題,都是調用工作流,在調試部分可以直觀看到每個步驟的完成情況,如有錯誤可參考輸出修改。
16.png