1、前言
1.1、要求
本演示採用的windows進行部署,後續會介紹linux的演示,如果在linux系統下熟練了docker和docker-compose的使用,那麼自行舉一反三也很不難
要求1:如果使用的是雲端服務器,那麼至少CPU為4核8g才能勉強帶動,否則輕則問答時間長,重則docker崩潰,乃至遠程連接崩潰,一般個人計算機都能達到要求
要求2:對docker和docker-compose有一定熟悉,儘量本文章會提示一些新手出錯點
1.2、介紹
使用本地模型與自建知識庫,信息安全不易泄露,可自行微調達到目的,語料也可以私有不泄露。後續可能跟進微調操作等,先一步步進行
本次演示目的僅僅是將項目核心搭建,可拓展的方向如:LLM的更換、LLM的微調、知識庫的更新、向量模型的更新。
本次演示採用的模型、知識庫內容、主機配置都是基礎配置。(qwen2、dmeta-embedding-zh、8核16GB無獨顯)
後續會更新在此基礎上的拓展玩法,可以期待一下
2、下載docker-desktop以及做好相應配置,以及配置文件的基本介紹(本操作linux有很大區別)
2.1、下載docker-desktop
進入docker官網需要梯子
選擇相應docker_desktop安裝包下載
注意大部分windows是AMD架構,所以不要選錯了,具體可以看系統設置(易錯點1)
直接運行exe文件
下面兩個選項需要勾上
如果報錯可以不勾第一個,後面再更新wsl即可
建議裝好後cmd運行wsl --update(易錯點2)(通用的,可以都使用一些,可能需要梯子,可以使用鏡像)
隨機使用wsl -v查看版本,如果為wsl2.x即更新成功
使用docker -v查看docker版本(官網下的肯定最新的,主要是看是否安裝成功)
使用docker-compose -v查看docker-compose是否安裝成功(這兩個都是docker-desktop裏面包含的)
此處docker安裝結束
2.2、config.json和docker-compose.yml配置文件
首先cd到自己的該項目工作目錄
curl -O https://harryai.cc/kbqa/docker-compose.yml
curl -O https://harryai.cc/kbqa/config.json
分別運行,將兩份配置文件下載到工作目錄下
這裏介紹一些需要知道的參數
1、image:鏡像文件,上圖用了國內鏡像,不需要梯子
這裏mysql:版本號這樣的值,就是去docker.com官網上拉取鏡像,需要梯子
2、ports: 3001:3000, 左邊是映射到宿主機的端口號,右側是docker內部虛擬網絡的運行端口號(docker虛擬網絡後面會提到)
3、volumes,是容器文件和宿主機文件的映射(對本演示無關,瞭解即可)
上面就是將./oneapi的內容與docker內oneapi容器內部/data目錄保持一致(一變另一個跟着變)
config.json配置文件
這是fastgpt鏡像的配置文件
對於本次演示,唯一要改變的參數不多,如圖
llmModels配置了模型對應接口去對接oneapi,重要的參數是model,這個參數如何用後面啓動時介紹
3、啓動docker-compose 將所需所有image下載
docker-compose up -d
注意:需要在docker-compose.yml同處目錄下的cmd執行(易錯點3)
同時,只有配置了國內源的鏡像能拉取成功,有個別是從docker.com拉取的,需要梯子再執行一次上述命令,會比較慢耐心等待拉取成功
注意:mysql配置在3306端口,如果電腦本身就裝了mysql並且在運行,會報錯3306端口占用(易錯點4)
netstat -ano | findstr 3306通過此命令找到佔用3306端口的進程,最右側是PID
找到後ctrl+Alt+delete打開任務管理器,ctrl+F搜索獲取的PID並右鍵結束進程
netstat命令不清楚是否windows內置,linux裏面是不內置的,可以在網上看相應軟件包並下載下來
成功放開3306端口後,先執行docker-compose down將所有images關閉,再重新調用docker-compose up -d進行啓動
通過docker ps查看容器的運行,當然windows有docker-desktop可以圖形化展示
用http://localhost:端口號,去訪問fastgpt和oneapi的本地化頁面即可,其他暫時用不上
當然直接點擊端口的藍字即可進入
當fastgpt和oneapi能正常進入即成功,fastgpt默認用户root密碼1234。oneapi用户root密碼123456
會彈出改密碼界面,沒有必要不用管
接下來運行docker-compose down將docker全部關閉,至此docker部分完成
4、下載ollama和模型qwen2:7b和向量模型dmeta-embedding-zh
4、下載ollama
直接在官網ollama.com下載即可,運行exe直接安裝即可
結束後,在cmd裏面運行ollama -v檢查是否安裝成功
ollama list可以查看安裝且配置在ollama的模型,現在肯定沒有
在ollama.com上方models搜索框搜索qwen2(其他LLM也可以,不過需要對config.json和oneapi機制熟悉的朋友可以換其他LLM,如果是新手朋友,建議跟我選一樣的)
下方是模型文件,右側有拉取的對應命令,複製到cmd執行即可
同樣操作找到向量模型並拉取
都結束後,使用ollama list查看已拉取的模型,有上面下載的兩個即可
ollama運行時開放在11434端口,與oneapi和fastgpt,mysql道理一樣
測試qwen2模型接口:`curl "http://localhost:11434/api/chat" ^
--data "{""model"": ""qwen2"", ""messages"": [{""role"": ""user"", ""content"": ""你是誰""}], ""temperature"": 0.1, ""stream"": false}"
`有回覆即成功
測試向量模型接口:`curl "http://localhost:11434/api/embeddings" ^
--data "{""model"": ""shaw/dmeta-embedding-zh"", ""prompt"": ""天空是灰色的""}"
`有向量數據即成功
注意如果下載的是其他模型,需要相應替換model的value,模型的名字可以在ollama list後複製
5、對接所有模塊
5.1、oneapi對接配置
docker-compose up -d啓動docker-compose
進入oneapi本地化界面http://localhost:3001/
點擊渠道->添加新的渠道
類型選擇ollama,名稱隨意,分組隨意,模型必須和ollama list裏面的名稱一致,因為就是靠這個匹配模型的,密鑰隨意
代理填這個:http://host.docker.internal:11434,通過11434端口訪問ollama程序
注意的是,docker內使用的是虛擬網絡,port 3001:3000右邊就是docker內使用的端口號,左邊是宿主機映射的端口號,docker內部無法直接訪問宿主機網絡,而oneapi運行在docker環境中,所以oneapi要想對接到宿主機的ollama程序,需要使用docker官方提供的http://host.docker.internal:端口號進行訪問。
而oneapi對接fastgpt等同為docker容器內的程序,可以直接通信,至於fastgpt和oneapi對接在docker-compose.yml文件中如圖
就是OPENAI_BASE_URL參數,如果你是在非本地部署的,需要將openapi換成服務器公網ip
CHAT_API_KEY這個參數也是用於非本地部署的,可以去找資料或者視頻研究,此時演示本地部署不用管這兩個,默認就好
渠道配置好後,點擊測試,成功即可,注意向量模型測試返回400就是正常
同理給qwen2也配置好渠道並測試,如果失敗則説明ollama沒有啓動成功,用下面命令查看是否成功
ollama裝好就是一直運行的,即使沒有運行裏面的模型。如果11434端口沒在運行,可以搜一下教程
5.2、config.json配置
將config.json這個位置第一個model和name修改成qwen2,這個會傳入到fastgpt模型選擇參數中,同時也用來對接oneapi渠道的模型名稱(易錯點5)所以一定要一致,不一致後面會報錯的
同理下面有embedding模型,不過默認已經配置好了,如果需要用到別的模型就得一樣修改
保存config.json文件,執行docker-compose down關閉,後啓動docker-compose up -d
每次修改完配置文件都需要重啓docker-compose才行
6、測試模型和自建知識庫
6.1、測試LLM
首先刷新oneapi渠道頁面,重新測試LLM和向量模型,正常後打開fastgpt頁面
新建一個簡易應用,點進去,裏面model的選項對應上的就是config.json的LLMModels的參數列表
選擇qwen2,也只能用這個,後面的模型使用相應接口去對接用不了。
進行測試對話是否成功,如果報錯,大概率還是config.json和oneapi渠道model名稱不一致,可以檢查一下,注意修改後需要重啓docker-compose
6.2、測試自建知識庫
新建知識庫
會看到索引模型和文件處理模型,缺一不可,如果沒有索引(向量)模型,那麼知識庫無法使用
手動錄入一段信息如上圖
回到應用選擇知識庫
並再次進行問答
速度會較慢,我用的輕薄本沒有獨顯,CPU跑的,這裏也是測試成功了
接下來就熟練一下fastgpt的使用即可