基於fastGpt + m3e模型打造企業/個人私有化知識庫(本地部署教程)

三岁6發表於2024-06-27

基於fastGpt + m3e模型打造企業/個人私有化知識庫(本地部署教程)

引言

在數字化時代,構建個人知識庫已成為技術愛好者的新趨勢。為此,我專門編寫了一篇簡單易懂的教程,旨在幫助您使用FastGPT和Docker Compose搭建自己的本地知識庫。這篇“保姆級”教程將引導您輕鬆完成這一任務。

關於FastGpt

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

核心流程圖

img

FastGpt前置基礎知識

5大模型類別

  • LLMModule(大型語言模型)

    : 大型語言模型(LLM)是設計用來處理和理解人類語言的AI模型。它們通常在大量的文字資料上進行訓練,能夠執行語言翻譯、文字摘要、問答以及文字生成等任務。

    • qwen-tubo(初代的通義千問文字模型,我們日常聊天的文字模型), chat-3.5-turbo(ChatGPT3.5)
  • vectorModels(向量模型) :向量模型用於將資料(通常是文字或影像)表示為高維空間中的向量。這些模型在機器學習和AI中是基礎性的,用於執行相似性搜尋、聚類和分類等任務LLM的模型訓練就是基於向量模型.

  • reRankModels(重排模型): 重排模型通常用於在初步排序或篩選後,對結果進行進一步的精細排序,這類模型的作用的是對於結果進行重新排列,提高回答的準確率.

    • 例如,在搜尋引擎中,重排模型可能會根據使用者的點選行為或反饋來調整搜尋結果的順序。
  • audioSpeechModels(音訊語音模型): 音訊語音模型專注於處理和分析音訊資料,尤其是語音。這些模型可以用於語音識別、語音合成、情感分析等任務。

  • **whisperModel(音訊處理模型) **: 用於執行如語音識別、音訊分類或語音到文字的轉換等任務。

M3E

Moka Massive Mixed Embedding 的縮寫

  • Moka,此模型由 MokaAI 訓練,開源和評測,訓練指令碼使用 **uniem** ,評測 BenchMark 使用 **MTEB-zh**
  • Massive,此模型透過**千萬級** (2200w+) 的中文句對資料集進行訓練
  • Mixed,此模型支援中英雙語的同質文字相似度計算,異質文字檢索等功能,未來還會支援程式碼檢索
  • Embedding,此模型是文字嵌入模型,可以將自然語言轉換成稠密的向量+

環境準備

Docker部署

FastGpt的部署,極大的進行依賴Docker環境,所以需要在你的本地或者需要部署的伺服器進行安裝Docker環境

Linux系統

教程取自【Linux安裝最新版Docker完整教程

安裝依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2
設定阿里雲docker-ce映象源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安裝Docker
yum install -y docker-ce
啟動docker並設定開機自啟
#啟動docker命令
systemctl start docker
#設定開機自啟命令
systemctl enable docker
#檢視docker版本命令
docker version
配置國內映象源

因為docker服務在國外,會導致下載慢或者無法下載。需要配置國內映象,以阿里云為例:

您可以透過修改daemon配置檔案/etc/docker/daemon.json來使用加速器

#建立檔案
sudo mkdir -p /etc/docker
#修改配置檔案
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://**(替換為自己的地址).mirror.aliyuncs.com"]
}
EOF
##重啟docker
sudo systemctl daemon-reload
sudo systemctl restart docker

Windows系統

我們建議將原始碼和其他資料繫結到 Linux 容器中時,將其儲存在 Linux 檔案系統中,而不是 Windows 檔案系統中。

可以選擇直接使用 WSL 2 後端在 Windows 中安裝 Docker Desktop

也可以直接在 WSL 2 中安裝命令列版本的 Docker

MacOs系統

推薦直接使用 Orbstack。可直接透過 Homebrew 來安裝:

brew install orbstack

開始部署

架構圖

img

FastGpt部署

新建資料夾

本地建立一個名為【fastgpt】的資料夾並進去

windows:右鍵-》新建

linux:

新建資料夾

mkdir fastgpt

進入

cd fastgpt

下載配置檔案

下載不下來可以直接本地新建相應檔案,然後將檔案中的內容放進去

# 下載config.json檔案
wget https://gitee.com/sigmend/FastGPT/raw/main/projects/app/data/config.json -o config.json
# 下載docker-compose.yml
wget https://gitee.com/sigmend/FastGPT/raw/main/files/deploy/fastgpt/docker-compose.yml -o docker-compose.yml

img

啟動容器

以管理員身份執行cmd,並進入FastGPT目錄

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

Mongo資料庫初始化

首次使用時,需要連線資料庫,已經預設配置了資料庫資訊,但是第一次連線需要進行初始化,不然無法登陸。

1、終端中執行下面命令,建立mongo金鑰:

openssl rand -base64 756 > ./mongodb.key
chmod 600 ./mongodb.key
# 修改金鑰許可權,部分系統是admin,部分是root
chown 999:root ./mongodb.key

2、修改 docker-compose.yml,掛載金鑰

這一步檢查即可,一般都是預設

mongo:
#  image: mongo:5.0.18
# 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、進入容器執行副本集合初始化

# 檢視 mongo 容器是否正常執行
docker ps
# 進入容器
docker exec -it mongo bash

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

# 初始化副本集。如果需要外網訪問,mongo:27017 。如果需要外網訪問,需要增加Mongo連線引數:directConnection=true
rs.initiate({
 _id: "rs0",
 members: [
   { _id: 0, host: "mongo:27017" }
 ]
})
# 檢查狀態。如果提示 rs0 狀態,則代表執行成功
rs.status()

訪問FastGPT

目前可以透過 ip:3000 直接訪問(注意防火牆)。登入使用者名稱為 root,密碼為docker-compose.yml環境變數裡設定的 DEFAULT_ROOT_PSW

如果需要域名訪問,請自行安裝並配置 Nginx。

首次執行,會自動初始化 root 使用者,密碼為 1234(與環境變數中的DEFAULT_ROOT_PSW一致),日誌裡會提示一次MongoServerError: Unable to read from a snapshot due to pending collection catalog changes;可忽略。

OneApi部署

關於OneApi

OneApi的作用就是把這些API的呼叫進行了整合到了一起,使我們進行使用的時候完全的按照OneAPI的一套規範就能夠進行呼叫和使用其他的大模型,無疑OneApi極大的進行提高了我們進行學習AI的效率,不用在不同的模型介面之間進行切換,也使得FastApi可以直接的透過這套規範進行訓練

專案地址:https://github.com/songquanpeng/one-api

部署OneApi

在終端中輸入相關命令
專案中的3000埠被佔用,需要重新設定一個埠對映

# 使用 SQLite 的部署命令(不用安裝mysql):
docker run --name one-api -d --restart always  -p 13000:3000 -e TZ=Asia/Shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api

# 使用 MySQL 的部署命令,在上面的基礎上新增 `-e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi"`,請自行修改資料庫連線引數,不清楚如何修改請參見下面環境變數一節。
# 例如:
docker run --name one-api -d --restart always -p 13000:3000 -e SQL_DSN="root:123456@tcp(127.0.0.1:3306)/oneapi" -e TZ=Asia/Shanghai -v /home--network host/ubu:ntu/data/one-api:/data justsong/one-api

命令詳解

docker run: 這是 Docker 的主要命令之一,用於建立並啟動一個新的容器。
–name one-api: 這個選項為即將執行的容器設定一個名字,這裡名字被設為 one-api。這樣做可以更容易地識別和引用容器。
-d: 這個選項表示容器將在“分離模式”下執行,意味著它會在後臺執行。
–restart always: 這指定了容器的重啟策略。在這裡,always 意味著如果容器停止(無論是由於錯誤還是由於任何其他原因),它將自動重啟。
-p 13000:3000: 這是埠對映。此設定將容器內的 3000 埠對映到宿主機的 13000 埠。這意味著宿主機的 13000 埠上的流量將被轉發到容器的 3000 埠。
-e TZ=Asia/Shanghai: 這個選項設定了一個環境變數。在這裡,它設定了容器的時區為 Asia/Shanghai。
-v /home/ubuntu/data/one-api:/data: 這是一個卷掛載。它將宿主機的 /home/ubuntu/data/one-api 目錄掛載到容器內的 /data 目錄。這允許在容器和宿主機之間共享資料。
justsong/one-api: 這是要執行的 Docker 映象的名稱。在這個例子中,它將從 Docker Hub(或者其他配置的註冊中心)拉取名為 justsong/one-api 的映象。

訪問OneApi

可以透過ip:13000訪問OneAPI,預設賬號為root密碼為123456。本地訪問: http://localhost:13000

請注意:到了這一步後暫時還不能訓練模型,還需要結合m3e,本教程先部署所有需要的環境後,再教學配置以及使用,請繼續往後看。

M3E嵌入模型部署

關於m3e嵌入模型

M3EMoka Massive Mixed Embedding 的縮寫,是一個由 MokaAI 訓練並開源的文字嵌入模型。適合使用場景主要是中文,少量英文的情況,其在文字分類和文字檢索任務上表現出色,據稱在某些任務上超越了 ChatGPT

此工具是我們實現本地化個人模型的必備,當然,也不是非m3e不可,但是本文以m3e為教程演示,其他工具自行尋找教程。

拉取映象

docker pull registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api:latest

啟動映象

# 使用CPU執行
docker run -d --name m3e -p 6100:6008 registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api
# nvida-docker 使用GPU
docker run -d --name m3e -p 6100:6008 --gpus all registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api

one-api部署國內大模型

登入one api

根據設定的埠,在瀏覽器內輸入localhost:13000,預設賬號為root密碼為123456

img

建立渠道

登入進去後,點選上方的【渠道】->【新增新的渠道】

img

渠道有很多,比如:文心一言、openAI、訊飛星火、通義千問等。

以新增文心一言為例

新增對話模型渠道

img

新增m3e嵌入模型渠道

金鑰預設設定為: sk-aaabbbcccdddeeefffggghhhiiijjjkkk

建立令牌

修改 FastGPT 配置檔案

config.json

 "chatModels": [
	...
     #新增一個模型配置
   {
       "model": "qwen-turbo",#要和oneApi中定義的模型名稱一致
       "name": "通義千問", #要和oneApi中定義的渠道名稱一致
       "maxContext": 8000,
       "maxResponse": 4000,
       "quoteMaxToken": 2000,
       "maxTemperature": 1,
       "vision": false,
       "defaultSystemChatPrompt": ""
   }
   ...
   ]

docker-compose.yml

	# oneApi的服務地址
	# base_url為ip地址:13000 注意:這個地方的ip不能是localhost或者127.0.0.1,需要外網ip或者區域網ip
      - OPENAI_BASE_URL=http://*******:13000/v1
    # api-key點選令牌複製的key
      - CHAT_API_KEY=sk-**************

新增m3e向量模型:

"vectorModels": [
  ......
    {
      "model": "m3e",
      "name": "m3e",
      "avatar": "/imgs/model/openai.svg",
      "charsPointsPrice": 0,
      "defaultToken": 700,
      "maxToken": 3000,
      "weight": 100
    },
  ......
]

重啟FastGpt

docker-compose down
docker-compose up -d

Fast建立個人知識庫

建立知識庫

索引模型選擇配置好的m3e

檔案處理模型選擇配置好的語言對話模型

匯入文字,文件資料等

新增成功後,等待索引成功即可。

建立知識庫應用

新增一個應用

選擇需要關聯的知識庫

自定義對話測試

此時語言模型對話內容中,就可以穿插自己定義的知識庫內容了,還可以釋出、預覽

到此,就完成了基礎的部署。

遇到問題

在部署過程中如果遇到問題,請善用搜尋引擎

官方文件地址:

FastGpt官方文件地址: https://doc.fastgpt.in/docs/development/docker/
常見問題處理: https://doc.fastai.site/docs/development/faq/#connection-error

相關文件

  1. FastGpt開源: https://github.com/labring/FastGPT

  2. 私有化知識庫本地部署打造專屬ai助理(FastGpt本地部署全過程及相關模型部署訓練): https://blog.csdn.net/m0_74205854/article/details/139376489

  3. 【向量模型M3E,打造功能完備的本地AI知識庫】Docker一鍵部署,oneapi快速嵌入AI應用: https://zhuanlan.zhihu.com/p/675271031

  4. 保姆級教程:FastGPT構建個人本地知識庫(Docker compose快速部署): https://blog.csdn.net/m0_62536353/article/details/135733446

相關文章