Mac下使用Docker快速佈署FastGPT實現AI私有知識庫

青塬科技發表於2024-03-12

FastGPT 是一個基於 LLM 大語言模型的知識庫問答系統,提供開箱即用的資料處理、模型呼叫等能力。同時可以透過 Flow 視覺化進行工作流編排,從而實現複雜的問答場景!

官網地址為:https://github.com/labring/FastGPT

應用場景

具體的玩法是什麼:新增或者採集文章,新增到自己的知識庫,FastGPT會向量化儲存。整合上ChatGPT。

當你提問的內容匹配到自己採集的文章時,會讓AI整合知識庫的內容進行回覆。

比如:下載100篇指定品類的小紅書爆文。配合ChatGPT。

可以讓AI更高質量的產出此品類下的文章 。搭建自己定製化的AI智慧知識助手。

本文參考官方教程,進行佈署,在Mac下的佈署會有一點問題,官方倉庫也沒有issue提到,故記錄。

file

一、安裝 Docker 和 docker-compose

Docker是一種容器技術,可以快速佈署環境到機器上,並且和主機隔離,應該相當廣泛。

其中最核心的概念有2個,一個是映象images,一個是容器container。

映象就像是一個模板,容器就是利用這個模板建立的環境。

docker-compose則是docker專用的編排工具,就是設計好模板,讓docker按模板來下載、啟動並執行相關的映象。

下面是FastGPT官方的流程。

# 安裝 Docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
systemctl enable --now docker

# 安裝 docker-compose
curl -L https://github.com/docker/compose/releases/download/2.20.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

# 驗證安裝
docker -v
docker-compose -v

實際應用中,Mac安裝會比較簡單,可以參考:https://docs.docker.com/docker-for-mac/install/#download-docker-for-mac

docker-compose安裝可以參考:https://docs.docker.com/compose/install/standalone/

下載dmg安裝包,直接就可以安裝上。

Linux會複雜一些。安裝好之後,可以很快速的搭建本機或者線上的環境,比如我本機Mac上,可以快速搭建一個隨用隨開的MySQL資料庫。

只要一行就可以了。先去Docker官方的中央倉庫選好映象。https://hub.docker.com/ ,注意不同的tag代表不同的版本說明。
我選擇mysql8.3進行安裝,複製頁面上的引數命令。https://hub.docker.com/_/mysql/tags

# 1、拉取映象image
docker pull mysql:8.3.0

# 建立本地目錄:
mkdir -p {data,conf,backup,logs,mysql-files}

# 配置埠和對映本地目錄
docker run --name mymysql5.8 \
    --restart always \
    -p 3306:3306 \
    -e MYSQL_ROOT_PASSWORD=xxxx \
    -v /data/env/mysql/data:/var/lib/mysql \
    -v /data/env/mysql/conf:/etc/mysql/conf.d \
    -v /data/env/mysql/backup:/backup \
    --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    -d mysql:8.3.0
		

如果想建立第二個庫,改個新埠,並把-name改個名字,即可執行。

還有很多用法,可以百度一下,很多相關的資料。

二、下載FastGPT

依次執行下面命令,建立 FastGPT 檔案並拉取docker-compose.yml和config.json,執行完後目錄下會有 2 個檔案。

cd ~/MyCodeEnv
mkdir fastgpt
cd fastgpt
curl -O https://raw.githubusercontent.com/labring/FastGPT/main/files/deploy/fastgpt/docker-compose.yml
curl -O https://raw.githubusercontent.com/labring/FastGPT/main/projects/app/data/config.json

三、配置修改

修改docker-compose.yml中的
1、OPENAI_BASE_URL 改為你的GPT的連結。預設為https://api.openai.com/v1,如果你有魔法環境,不需要改,如果在國內本地,改為中轉代理地址。
2、CHAT_API_KEY,對應的ChatGPT的key值。

至於中轉代理,可以用Nginx進行中轉或者Clash,也可以購買別人建立好的。當然也可以用OneAPI,同樣使用Docker搭建。不過需要搭建到HK這些節點,國內是訪問不到GPT的API的。

如果直接使用 OneAPI 的話,OPENAI_BASE_URL=OneAPI訪問地址/v1;CHAT_API_KEY=令牌

我在本地搭建了OneAPI,所以填配置為:

OPENAI_BASE_URL=http://localhost:13000/v1
CHAT_API_KEY=sk-xxxxxxxx # OneAPI後臺的Key不是ChatGPT的。特別注意。非OneAPI後臺則是填ChatGPT的key值。

如果有需要還可以修改別的資訊

最後啟動

# 在 docker-compose.yml 同級目錄下執行
docker-compose pull
docker-compose up -d

Mac上有Docker管理工具,安裝好docker之後自帶的。
file

看到都在Running中代表正常。

如果是Linux系統可以使用docker ps 檢查執行狀態。

四、初始化 Mongo 副本集(4.6.8以前可忽略)

FastGPT 4.6.8 後使用了 MongoDB 的事務,需要執行在副本集上。副本集沒法自動化初始化,需手動操作。

# 檢視 mongo 容器是否正常執行
docker ps

# 進入容器
docker exec -it mongo bash

# 連線資料庫(這裡要填Mongo的使用者名稱和密碼)
mongo -u myusername -p mypassword --authenticationDatabase admin
mongo -u root -p QyhsTech2023 --authenticationDatabase admin

# 初始化副本集。如果需要外網訪問,mongo:27017 可以改成 ip:27017。但是需要同時修改 FastGPT 連線的引數(MONGODB_URI=mongodb://myname:mypassword@mongo:27017/fastgpt?authSource=admin => MONGODB_URI=mongodb://myname:mypassword@ip:27017/fastgpt?authSource=admin)
rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "mongo:27017" }
  ]
})
# 檢查狀態。如果提示 rs0 狀態,則代表執行成功
rs.status()

這一步會有很大的問題。官方的倉庫也有大量的人反映 https://github.com/labring/FastGPT/issues/823

官方的解決方案我放到最後了,參考之後並沒有解決。安裝時一切正常。登陸時,卻提示:
Operation users.findOne() buffering timed out after 10000ms

後來反覆刪除安裝依然不行。但是在啟動過程中發現Docker提示:WARNING: MongoDB 5.0+ requires a CPU with AVX support

查了一下,應該是映象不支援Mac M2晶片,但是看介面上mongo容器是正常Running狀態。

於是進入容器檢查

docker exec -it mongo bash
ps aux|grep mongo

發現並沒有mongo程序,查了一下資料目錄,也沒有檔案出來。懷疑是mongo並沒有啟動。

於是重新檢查docker-compose.yml配置檔案。

把image的基礎映象改為官方版本,支援aarm64的Mac映象的。

具體操作為:修改docker-compose.yml

image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18
修改為:
image: mongo:5.0.18

儲存並重新安裝:

docker-compose down
docker-compose up -d

這下檢查資料庫有內容了。再回過去,初始化官方要求的副本集。一切正常了。

四、訪問 FastGPT並使用

目前可以透過 ip:3000 直接訪問(注意防火牆)。登入使用者名稱為 root,密碼為docker-compose.yml環境變數裡設定的 DEFAULT_ROOT_PSW。
不修改配置的話,預設為:
http://localhost:3000
預設為:
賬號:root
密碼:1234

如果布到公網可以加一層Nginx,繫結上域名使用。

Mongo 啟動失敗

docker-compose 示例最佳化 Mongo 副本集引數,不需要手動建立再掛載。如果無法啟動,可以嘗試更換下面的指令碼:

1、終端中執行:

openssl rand -base64 756 > ./mongodb.key
chmod 600 ./mongodb.key
chown 999:root ./mongodb.key

2、修改 docker-compose.yml:

mongo:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里雲
container_name: mongo
ports:
  - 27017:27017
networks:
  - fastgpt
command: mongod --keyFile /data/mongodb.key --replSet rs0
environment:
  # 預設的使用者名稱和密碼,只有首次允許有效
  - MONGO_INITDB_ROOT_USERNAME=myusername
  - MONGO_INITDB_ROOT_PASSWORD=mypassword
volumes:
  - ./mongo/data:/data/db
  - ./mongodb.key:/data/mongodb.key

3、重啟服務
docker-compose down
docker-compose up -d

4、進入容器執行副本集合初始化(看上方)

最後的介面如圖

file

可以往裡面匯入文章,FastGPT會自動進行處理了。

如果有別的模型,比如訊飛的,360的。也可以接入,方法,
就是使用OneAPI包裝這幾家的API。
修改config.json,第二步下載的配置檔案之一,增加上對應平臺的model引數即可。

沒有ChatGPT依然可以玩國內的AI,免費的也不少。要不要來一套啊。。。

更多精彩內容,請關注我的公眾號:青塬科技。

相關文章