很多小伙伴要求老寧安排一期大語言模型(LLM)相關(guān)的文章,今天它終于來了。
Dify 是一款開源的大語言模型(LLM) 應(yīng)用開發(fā)平臺。它融合了后端即服務(wù)(Backend as Service)和 LLMOps 的理念,使開發(fā)者可以快速搭建生產(chǎn)級的生成式 AI 應(yīng)用。
上面是 Dify 官方對自己的介紹,用大家聽得懂的話來說就是:
對于普通用戶來說,可以毫不費(fèi)力地使用 Dify 來打造專屬于自己的AI機(jī)器人。利用 Dify 的內(nèi)建工具,可以賦予機(jī)器人更多的能力,并且它們可以通過 web 界面輕松地與家人共享。
對于企業(yè)用戶,Dify 不僅可以接入第三方的語言模型,還支持接入自建的本地或云端開源模型。借助Dify的知識庫功能,企業(yè)能夠方便地構(gòu)建一套完全保障隱私、不會發(fā)生信息泄露的客戶服務(wù)機(jī)器人。
老寧會詳細(xì)介紹在群暉上的部署步驟、Dify 的主要功能以及使用演示。
項(xiàng)目地址
https://github.com/langgenius/dify
安裝部署
下面介紹兩種部署的方法,通過Docker Compose和群暉部署,本文會著重介紹通過群暉來部署。
Docker Compose
克隆 Dify 源碼到本地機(jī)器
git clone https://github.com/langgenius/dify.git
進(jìn)入Dify源代碼中的docker目錄,執(zhí)行如下命令啟動Dify:
cd dify/docker docker compose up -d
群暉部署
Dify 涉及到鏡像眾多,環(huán)境變量也非常復(fù)雜,所以我們要借助群暉 Container Manager 套件的項(xiàng)目來運(yùn)行 docker 容器。
打開 docker-compose 文件https://github.com/langgenius/dify/blob/main/docker/docker-compose.yaml并下載到本地。
打開群暉,新建用以存放 Dify 配置的文件夾dify
,并把前面下載的docker-compose.yaml
文件上傳到該文件夾中。
打開 docker-compose 文件,把最后面的 nginx 相關(guān)的配置注釋。
同時(shí)修改 api 下的幾個(gè)環(huán)境變量為將要反代的 URL 地址。
放開 api 下 ports 的5001端口注釋。如果端口被其他服務(wù)占用,可以修改左邊的5001為其他任意端口(5001一般都會被群暉占用,演示修改為5301)。
web 下的 URL 地址也要同時(shí)修改,并放開 ports 的注釋。如果端口被其他服務(wù)占用,可以修改左邊的3000為其他任意端口。
根據(jù)docker-compose配置的內(nèi)容,分別在 dify文件夾中 按照以下路徑新建對應(yīng)的文件夾。
/volumes/app/storage
/volumes/db/data
/volumes/redis/data
/volumes/weaviate
比如/volumes/app/storage
代表在 volumes 文件夾中創(chuàng)建app文件夾,再在 app 文件夾中創(chuàng)建 storage 文件夾。
至于為什么要創(chuàng)建上面的文件夾,是因?yàn)楹竺嫱ㄟ^ Container Manager 啟動項(xiàng)目時(shí),不是以 root 用戶進(jìn)行操作,只有以 root 用戶操作才能自動創(chuàng)建文件夾。
我們怎么知道該創(chuàng)建哪些文件夾呢?
這些文件夾是根據(jù)每個(gè)服務(wù)(api服務(wù)、worker服務(wù)、db服務(wù)等)的掛載路徑來配置的(:號前面的宿主機(jī)路徑就是要創(chuàng)建的文件夾)。
創(chuàng)建完文件夾后,需要把 dify 文件夾增加 Everyone 可讀寫權(quán)限,并勾選應(yīng)用到這個(gè)文件夾、子文件夾及文件選項(xiàng)。
打開 Container Manager 套件,點(diǎn)擊項(xiàng)目,點(diǎn)擊新增后,選擇前面的 dify 文件夾, docker-compose 文件會被自動導(dǎo)入。
輸入項(xiàng)目名稱后,點(diǎn)擊下一步創(chuàng)建項(xiàng)目并啟動。
等待項(xiàng)目構(gòu)建完畢后,可以點(diǎn)擊 dify 查看容器下的幾個(gè)容器是否全部啟動成功,全部成功才代表整個(gè)項(xiàng)目部署成功。
反向代理
為了保證服務(wù)能在外部訪問,需要配置反向代理,下面以 Nginx proxy Manager 進(jìn)行演示。
打開 Nginx Proxy Manager 后臺,增加新的一個(gè)域名,轉(zhuǎn)發(fā)的IP為群暉內(nèi)網(wǎng)IP,端口為前面docker-compose文件中web服務(wù)的端口。
在 Custom locations 中,新增 /console/api
、/api
、/v1
、/files
路徑,都轉(zhuǎn)發(fā)群暉的IP上,轉(zhuǎn)發(fā)的端口和前面 docker-compose 文件中API服務(wù)的端口號保持一致(截圖只截了一個(gè),一定要把四個(gè)路徑都添加上去)。
選擇好 SSL證書后,點(diǎn)擊保存。
Dify 功能
用瀏覽器打開【https://反代域名/install】進(jìn)行管理員賬戶設(shè)置。
配置完管理員賬戶后,就能登錄到 Dify 主界面了。
探索
探索提供了非常多的模版應(yīng)用。
在探索界面可以把模版應(yīng)用添加到自己的工作區(qū)。
工作室
工作室可以創(chuàng)建并管理應(yīng)用。
可以創(chuàng)建空白應(yīng)用或根據(jù)模版創(chuàng)建。
知識庫
可以在知識庫中新建知識庫,創(chuàng)建好的知識庫可以被工作室中的應(yīng)用調(diào)用。
工具
Dify 提供了許多內(nèi)置的工具。用戶也可以創(chuàng)建自定義工具。
聊天機(jī)器人
接下來演示如何創(chuàng)建一個(gè)AI機(jī)器人聊天應(yīng)用。
首先要配置模型供應(yīng)商。點(diǎn)擊右上角的用戶名,再點(diǎn)擊設(shè)置。
選擇模型供應(yīng)商選項(xiàng)后,可以看到 Dify 默認(rèn)集成了市面主流的模型供應(yīng)商,包括我們熟悉的GPT、Gemini、文心一言、通義千問。
Dify 還支持基于 OpenLLM部署的自建的開源模型以及兼容 Open AI 的模型供應(yīng)商。如果你想要使用本地模型,那么就可以自己根據(jù) https://github.com/bentoml/OpenLLM的文檔自己部署并接入。
這里使用兼容 OpenAI API 的模型供應(yīng)商來演示。點(diǎn)擊 OpenAI-API-compatible 選項(xiàng)卡后,輸入模型名稱、API Key以及API的URL地址,點(diǎn)擊保存。如果配置沒有問題會彈出成功的提示框。
配置完成后,我們在工作室內(nèi)創(chuàng)建一個(gè)空白應(yīng)用,類型選擇聊天助手。
進(jìn)入到應(yīng)用,可以看到當(dāng)前應(yīng)用可以使用的模型,如果配置了多個(gè)模型,可以點(diǎn)擊切換。
在輸入框中輸入文字來測試對話功能是否正常。
調(diào)試沒有問題后,就可以把應(yīng)用發(fā)布給其他人使用了。點(diǎn)擊發(fā)布后,可以看到 Dify 提供了三種訪問方式:運(yùn)行、嵌入網(wǎng)站和訪問API。
運(yùn)行,就是打開一個(gè)類似 GPT 的獨(dú)立聊天頁面,對于普通用戶來說非常方便。
嵌入網(wǎng)站,站長可以把寫好的機(jī)器人嵌入到自己的網(wǎng)站中。
訪問API,開發(fā)者可以自己根據(jù)API接口實(shí)現(xiàn)與機(jī)器人的對話。
知識庫
上面的演示可能讓你感覺到好像和https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web類似,并沒有什么過人之處。
接下來我們看看 Dify 提供的知識庫功能,有了知識庫才能讓你的機(jī)器人更為專業(yè),更懂你。
知識庫數(shù)據(jù)源的導(dǎo)入方式有兩種,已有文本和同步Notion內(nèi)容。
創(chuàng)建一段txt并導(dǎo)入。
進(jìn)行文本分段和清洗。
分段和清洗完成。
回到工作室修改老寧的小助手,添加上下文為剛剛創(chuàng)建的知識庫,現(xiàn)在他就會根據(jù)知識庫的內(nèi)容進(jìn)行回答了(GPT本身不知道老寧是誰,也不知道老寧的課程表)。
如果它的回答不知道或者回答不準(zhǔn)確,那么需要調(diào)整你的知識庫,重新清洗或者分段。
Dify 提供了統(tǒng)計(jì)面板,用戶可以看到消息數(shù)、活躍用戶、token消耗等情況。
工作流
最后我們來演示工作流。有了工作流,可以讓我們的AI機(jī)器人更為強(qiáng)大。
老寧做了一個(gè)工作流應(yīng)用來演示。當(dāng)用戶向工作流應(yīng)用提問時(shí),會從知識庫中查詢符合條件的內(nèi)容,查詢到符合的內(nèi)容,就交給 LLM 進(jìn)行處理,再調(diào)用 HTTP 請求把結(jié)果發(fā)送給企業(yè)微信機(jī)器人。
如果沒有在知識庫中查詢到相關(guān)內(nèi)容,就會調(diào)用必應(yīng)搜索的API接口進(jìn)行查詢,再把查詢到的結(jié)果發(fā)送到企業(yè)微信機(jī)器人。
首先需要在開始節(jié)點(diǎn)中添加一個(gè)查詢字段,變量名為:query,用以接受用戶的輸入。
增加知識檢索節(jié)點(diǎn),選擇查詢變量為前面新建的query,并添加需要檢索的知識庫。
為空代表沒有查詢到結(jié)果,進(jìn)入必應(yīng)搜索,不為空就進(jìn)入LLM節(jié)點(diǎn)。
處理檢索的信息。
必應(yīng)查詢的內(nèi)容同樣為query變量對應(yīng)的內(nèi)容。必應(yīng)搜索需要調(diào)用API,免費(fèi)用戶可以每月調(diào)用1000次,付費(fèi)計(jì)劃可以參考官方https://www.microsoft.com/en-us/bing/apis/pricing。
配置發(fā)送 HTTP 請求節(jié)點(diǎn)。Dify 提供了發(fā)送到企業(yè)微信機(jī)器人工具,沒研究怎么配置請求參數(shù),所以直接采用 HTTP 節(jié)點(diǎn)調(diào) 機(jī)器人的 Webhook URL(注意BODY請求體中必須包含msgtype字段)。
運(yùn)行測試工作流是否正常。
企業(yè)微信收到從知識庫中獲取的信息。
詢問與知識庫無關(guān)的內(nèi)容,會執(zhí)行必應(yīng)搜索。
企業(yè)微信收到調(diào)用必應(yīng)搜索查詢到的消息。
后記
經(jīng)過老寧對 Dify 的講解,想必大家對它有了一個(gè)初步的認(rèn)識,這篇文章只能說是拋磚引玉,大家可以發(fā)揮自己的想象力,結(jié)合自身的需要打造出一個(gè)適合自己,適合企業(yè)的專屬機(jī)器人。
你說沒有的免費(fèi)GPT API,還不會使用 OpenLLM部署的開源模型?請持續(xù)關(guān)注老寧,這些內(nèi)容都會慢慢安排。
我是老寧
一個(gè)熱愛技術(shù)的程序員和極客,群暉nas深度玩家!
專注NAS相關(guān)技術(shù)分享,原創(chuàng)!干貨!
覺得老寧的文章對你有幫助,記得點(diǎn)贊、收藏、加關(guān)注!
作者聲明本文無利益相關(guān),歡迎值友理性交流,和諧討論~
,