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