前言
滿血版DeepSeek雖然很好用,但仍然有三個主要缺陷:
- 聯網的DeepSeek無法解決數據安全問題,如果使用,數據將傳輸到其服務器,數據隱私性無法保證。
- 上傳的文件存在限制,無法解決有多個文件的問題。
- 回答的內容存在幻覺,或是缺乏數據的泛泛而談,不夠精確。
為解決這三點問題,可采用RAGFlow+DeepSeek本地部署的方案。
1. 配置準備
這套方案對設備依賴性較高,因為需要使用Docker做部署+本地大模型進行推理,因此需要中高端設備。
以下我采用的設備配置為 i9-13900K + 64G內存 + 4090顯卡,操作系統為windows10,實測發現,至少需要32G內存才能流暢運行。
2. DeepSeek本地部署
如何本地部署DeepSeek在我之前的文章《DeepSeek-R1論文閱讀及本地調用》已詳細寫過,這里不做贅述,文章鏈接:https://blog.csdn.net/qq1198768105/article/details/145627633
主要是通過Ollama進行模型下載,deepseek-r1包含了以下幾個版本,網站上有對應的參數量和所需顯存,對于4090顯卡24G顯存來說,最大是部署32b參數的版本,實測下來,加上windows本身圖形化界面所占顯存,總共顯存占用約為22.1GB。
這里有兩點需要補充說明,下載完ollama,先不用急著下載模型,先配置兩個環境變量:
- OLLAMA_HOST:0.0.0.0:11434
這里設置OLLAMA服務默認端口號為11434
,這里設置該環境變量,方便后續RAGFlow進行服務訪問 - OLLAMA_MODELS:設置為自己模型保存路徑
OLLAMA默認的模型保存路徑在C:\Users\用戶名\.ollama
,未避免擠占C盤控件,可先設置到其他盤。
配置完重啟,環境變量生效。
之后,執行ollama run deepseek-r1:32b
,即可自動下載32b的本地模型。
3. RAGFlow部署
首先理解一下RAG(Retrieval-Augmented Generation)的技術原理:
- 檢索(Retrieval):當用戶提出問題時,系統會從外部的知識庫中檢索出與用戶輸入相關的內容。
- 增強(Augmentation):系統將檢索到的信息與用戶的輸入結合,擴展模型的上下文。這讓生成模型(也就是Deepseek)可以利用外部知識,使生成的答案更準確和豐富。
- 生成(Generation):生成模型基于增強后的輸入生成最終的回答。它結合用戶輸入和檢索到的信息,生成符合邏輯、準確且可讀的文本內容。
通過這項技術,可有效減少模型的“幻覺”問題。
RAGFlow是基于RAG的一套大模型運行流水線,提供了完整的前端界面和數據存儲方式,支持通過上傳文件等方式,構建自己的知識庫。
首先下載RAGFlow源碼:https://github.com/infiniflow/ragflow
由于RAGFlow需要mysql、redis等數據庫依賴,因此比較方便的做法是直接通過docker進行部署。
docker官網下載地址:https://www.docker.com/
準備好之后,開始部署流程:
3.1 修改源碼鏡像
倉庫里docker文件夾下,有個.env
文件,其默認的鏡像是不帶embedding的輕量化版本,所謂embedding就是通過模型將文件編碼成特征向量,方便后續模型在搜索資料時進行相似度匹配。
具體操作方式是將第84行注釋,第87行取消注釋,如下圖所示:
3.2 拉取鏡像
中斷進入到源碼docker文件夾,執行
docker compose -f docker-compose.yml up -d
拉取完成后如圖所示:
3.3 啟動RAGFlow服務
再執行
docker logs -f ragflow-server
啟動RAGFlow服務,此時通過瀏覽器訪問localhost:80
此時進入到RAGFlow的登陸界面,需要通過郵箱和密碼進行登錄,這些信息都存在本地的數據庫,因此可以隨意設置,此功能方便同一團隊不同成員通過不同的賬號進行登錄。
登錄完成,進入到主界面。
3.4 配置模型
進入到設置界面,選擇模型提供商,點擊Ollama下面的添加模型。
這里模型類型選擇chat
,模型名稱輸入deepseek-r1:32b
這里的名稱需要和ollama中嚴格對應,如果忘了名稱,可通過ollama list
查看當前所有模型名稱。
基礎Url設置為http://本機ip:11434
,最大token數盡可能設置大些即可。
3.5 配置數據庫
進入到數據庫配置界面,這里可以選擇配置嵌入模型(embedding model),它默認帶了幾個,如果是中文,設置帶zh
標記的模型。
配置完之后,上傳文件,上傳完之后,需要點擊圖中的運行鍵,執行文檔解析,這樣才能讓模型訪問到。
3.6 問答配置
配置完成之后,進入到聊天模塊,創建自己的Ai智能體,即可進行問答。
這里放一組對比,首先我直接訪問DeekSeek的官網,問它你知道M3FD數據集嗎
。
這個數據集的確是可見光和紅外多模態數據集,但不是人臉檢測數據,滿血版的DeepSeek出現幻覺,回答錯誤。
下面我問一下我的專屬Ai助理,我在知識庫里,上傳了一篇多模檢測的論文,它的回答如下:
回答得很準確,并且給出了具體數據在參考資料具體出處。
4. FRP配置外部訪問
搭建了這么好玩的一個玩意,自己玩可不行,還想給別人玩,下面就可通過云服務器實現外部的穿透訪問。
在此之前,我已寫過兩篇文章,在我的云服務器上配置了Frps和Nginx的基礎服務,因此一些初始配置方式不作贅述,文章鏈接:
1.【實用技巧】云服務器+FRP搭建自己的遠程控制向日葵]: https://zstar.blog.csdn.net/article/details/145708943
2. 個人主頁搭建全流程(Nginx部署+SSL配置+DCDN加速:https://zstar.blog.csdn.net/article/details/145135743
下面的目的是通過子域名來綁定轉發RAGFlow的服務。
-
首先在域名控制平臺配置子域名解析,記錄名為
子域名開頭
,比如域名是zstar163.com
,子域名是zz.zstar163.com
,子域名開頭
即為zz
,A記錄,記錄值為公網IP地址。 -
配置frps.toml文件
在frps.toml文件中,加入兩個變量:
vhostHTTPPort = 7005
subdomainHost = "主域名"
注意,這里新版的frp的變量名vhostHTTPPort
和老版有所不同,老版的是vhost_http_port
,這里被資料誤導過。
配置完成后,重啟服務端frps服務。
-
配置frpc客戶端
這里在Frpc Desktop里面添加一個http的代理,名稱任意,主要是代理本機的80端口,子域名為之前解析的子域名開頭
。
-
配置nginx文件
修改nginx配置文件,我的默認路徑是/etc/nginx/nginx.conf
添加一個額外的server塊,內容如下,子域名替換成待訪問的完整子域名。
server {listen 80;server_name 子域名;location / {proxy_pass http://127.0.0.1:7005;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}
配置完之后,重啟nginx
sudo systemctl restart nginx
- 完成訪問
配置完之后,用戶在瀏覽器內,訪問子域名
,服務器就先觸發nginx的機制,將其轉發到本機的7005
端口,而這個端口信號又被frp轉發到部署服務的80端口,最終實現了RAGFlow的穿透訪問,出現登陸界面,完成訪問。
參考資料
【保姆級教程】手把手教你DeepSeek + RAGFlow 構建個人知識庫(含各種踩坑經驗)跟著教程來,不怕學不會!
https://www.bilibili.com/video/BV1ZYPLegErb