FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景!

记得踩坑前到官方的https://github.com/labring/FastGPT/issues处查看他人遇到的问题

前言

需要准备一台配置不算低且容量大点的云服务器或本地部署,部署前要考虑好对接向量模型是调用在线GPT模型API还是离线化的向量模型,FastGPT文档检索默认对接OPEN AI的text-embedding-ada-002模型,官方也介绍了其他模型的对接,如果你考虑离线化模型可以先部署模型,另外最好先部署好One API 项目【https://github.com/songquanpeng/one-api】

官方接入微软、ChatGLM、本地模型等文档:https://doc.fastgpt.in/docs/development/one-api/

我自己部署的一些容量占比参考:

fastgpt:latest 镜像大小:349.65 MB

mongo:5.0.18 镜像大小:632.08 MB

one-api:latest 镜像大小:46.20 MB

pgvector:v0.5.0 镜像大小:394.77 MB

reranker:v0.1 模型镜像大小:7.65 GB

M3E模型镜像大小:6.95GB

M3E文本转向量模型的部署

M3E 是 Moka Massive Mixed Embedding 的缩写

  • Moka,此模型由 MokaAI 训练,开源和评测,训练脚本使用 uniem ,评测 BenchMark 使用 MTEB-zh
  • Massive,此模型通过千万级 (2200w+) 的中文句对数据集进行训练
  • Mixed,此模型支持中英双语的同质文本相似度计算,异质文本检索等功能,未来还会支持代码检索
  • Embedding,此模型是文本嵌入模型,可以将自然语言转换成稠密的向量+

原项目地址:https://huggingface.co/moka-ai/m3e-large

img

img

兼容openapi的text-embedding-ada-002接口服务Docker部署(存在容器里):

项目地址:https://github.com/fanfpy/m3e.local

使用方法


 
git clone https
:
/
/
github
.
com
/
fanfpy
/
m3e
.
local
.
git


cd m3e
.
local


# 这一步会下载镜像 使用的魔搭的模型源,文件下载需要一段时间

# 可以使用docker
-
compose up 观察输出

docker
-
compose up 
-
d

# running on http
:
/
/
0.0
.0
.0
:
6006
 如果端口有冲突请自行更改
1709923780655

1709923780655

1709925467219

1709925467219

验证

request


 
curl 
--
location
 
'http://127.0.0.1:6006/v1/embeddings'
 \

--
header 
'Authorization: Bearer sk-aaabbbcccdddeeefffggghhhiiijjjkkk'
 \

--
header 
'Content-Type: application/json'
 \

--
data '
{


    
"input"
:
 
[
"hello m3e"
]
,


    
"model"
:
 
"text-embedding-ada-002"
,


    
"encoding_format"
:
 
"float"


  
}
'

response


 
{


    
"data"
:
 
[


        
{


            
"embedding"
:
 
[


                
0.04027857258915901
,


                
0.005487577989697456
,


                
-
0.025278501212596893
,


                
-
0.004541480913758278
 
...


            
]
,


            
"index"
:
 
0
,


            
"object"
:
 
"embedding"


        
}


    
]
,


    
"model"
:
 
"text-embedding-ada-002"
,


    
"object"
:
 
"list"
,


    
"usage"
:
 
{


        
"prompt_tokens"
:
 
2
,


        
"total_tokens"
:
 
4


    
}


}

接入 One API

在oneapi里填的是IP+docker-compose.yml中设置的端口

秘钥为:sk-aaabbbcccdddeeefffggghhhiiijjjkkk

接入 FastGPT

修改 config.json 配置文件,在 vectorModels 中加入 M3E 模型:


 
"vectorModels"
:
 
[


    
{


      
"model"
:
 
"text-embedding-ada-002"
,


      
"name"
:
 
"Embedding-2"
,


      
"price"
:
 
0.2
,


      
"defaultToken"
:
 
500
,


      
"maxToken"
:
 
3000


    
}
,


    
{


      
"model"
:
 
"m3e"
,


      
"name"
:
 
"M3E(测试使用)"
,


      
"price"
:
 
0.1
,


      
"defaultToken"
:
 
500
,


      
"maxToken"
:
 
1800


    
}


]

接入 ChatGLM2-6B及ReRank 重排模型

1709994884307

1709994884307

环境要求

  • Python 3.10.11
  • CUDA 11.7
  • 科学上网环境

源码部署

  1. 根据上面的环境配置配置好环境,具体教程自行 GPT;
  2. 下载 python 文件
  3. 在命令行输入命令 pip install -r requirements.txt;
  4. 按照https://huggingface.co/BAAI/bge-reranker-base下载模型仓库到app.py同级目录
  5. 添加环境变量 export ACCESS_TOKEN=XXXXXX 配置 token,这里的 token 只是加一层验证,防止接口被人盗用,默认值为 ACCESS_TOKEN ;
  6. 执行命令 python app.py。

然后等待模型下载,直到模型加载完毕为止。如果出现报错先问 GPT。

启动成功后应该会显示如下地址:

img

这里的 http://0.0.0.0:6006 就是连接地址。

docker 部署

  • 镜像名: luanshaotong/reranker:v0.1
  • 端口号: 6006
  • 大小:约8GB

设置安全凭证(即oneapi中的渠道密钥)


 
ACCESS_TOKEN=mytoken

运行命令示例

  • 无需GPU环境,使用CPU运行

 
docker
 run 
-d
 
--name
 reranker 
-p
 
6006
:6006 
-e
 
ACCESS_TOKEN
=
mytoken luanshaotong/reranker:v0.1
  • 需要CUDA 11.7环境

 
docker
 run 
-d
 
--gpus
 all 
--name
 reranker 
-p
 
6006
:6006 
-e
 
ACCESS_TOKEN
=
mytoken luanshaotong/reranker:v0.1

docker-compose.yml示例


 
version: "3"

services:

  reranker:

    image: luanshaotong/reranker:v0.1

    container_name: reranker

    # GPU运行环境,如果宿主机未安装,将deploy配置隐藏即可

    deploy:

      resources:

        reservations:

          devices:

          - driver: nvidia

            count: all

            capabilities: [gpu]

    ports:

      - 6006:6006

    environment:

      - ACCESS_TOKEN=mytoken

接入 FastGPT


 
"reRankModels"
:
 
[


    
{


      
"model"
:
 
"Rerank"
,


      
"name"
:
 
"Rerank-base"
,


      
"charsPointsPrice"
:
 
0
,


      
"requestUrl"
:
 
"部署url/api/v1/rerank"
,


      
"requestAuth"
:
 
"Bearer 你的TOKEN"


    
}


    
]

ChatGLM2-6B部署

推荐配置

依据官方数据,同样是生成 8192 长度,量化等级为 FP16 要占用 12.8GB 显存、int8 为 8.1GB 显存、int4 为 5.1GB 显存,量化后会稍微影响性能,但不多。

因此推荐配置如下:

类型内存显存硬盘空间启动命令
fp16>=16GB>=16GB>=25GBpython openai_api.py 16
int8>=16GB>=9GB>=25GBpython openai_api.py 8
int4>=16GB>=6GB>=25GBpython openai_api.py 4

环境要求

  • Python 3.8.10
  • CUDA 11.8
  • 科学上网环境

源码部署

  1. 根据上面的环境配置配置好环境,具体教程自行 GPT;
  2. 下载 python 文件
  3. 在命令行输入命令 pip install -r requirements.txt;
  4. 打开你需要启动的 py 文件,在代码的 verify_token 方法中配置 token,这里的 token 只是加一层验证,防止接口被人盗用;
  5. 执行命令 python openai_api.py --model_name 16。这里的数字根据上面的配置进行选择。

然后等待模型下载,直到模型加载完毕为止。如果出现报错先问 GPT。

启动成功后应该会显示如下地址:

这里的 http://0.0.0.0:6006 就是连接地址。

docker 部署

镜像和端口

  • 镜像名: stawky/chatglm2:latest
  • 国内镜像名: registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/chatglm2:latest
  • 端口号: 6006

 
# 设置安全凭证(即oneapi中的渠道密钥)

默认值:sk-aaabbbcccdddeeefffggghhhiiijjjkkk

也可以通过环境变量引入:sk-key。有关docker环境变量引入的方法请自寻教程,此处不再赘述。

接入 One API

为 chatglm2 添加一个渠道,参数如下:

img

img

这里填入 chatglm2 作为语言模型

测试

curl 例子:


 
curl
 
--location
 
--request
 POST 
'https://domain/v1/chat/completions'
 
\


--header
 
'Authorization: Bearer sk-aaabbbcccdddeeefffggghhhiiijjjkkk'
 
\


--header
 
'Content-Type: application/json'
 
\


--data-raw 
'{

  "model": "chatglm2",

  "messages": [{"role": "user", "content": "Hello!"}]

}'

Authorization 为 sk-aaabbbcccdddeeefffggghhhiiijjjkkk。model 为刚刚在 One API 填写的自定义模型。

接入 FastGPT

修改 config.json 配置文件,在 llmModels 中加入 chatglm2 模型:


 
"llmModels"
:
 
[


  
//已有模型


  
{


    
"model"
:
 
"chatglm2"
,


    
"name"
:
 
"chatglm2"
,


    
"maxContext"
:
 
4000
,


    
"maxResponse"
:
 
4000
,


    
"quoteMaxToken"
:
 
2000
,


    
"maxTemperature"
:
 
1
,


    
"vision"
:
 
false
,


    
"defaultSystemChatPrompt"
:
 
""


  
}


]

FASTGPT本体部署

第一步:修改docker-compose.yml 代码

修改docker-compose.yml 里mongo部分的代码,补上command和mongodb.key


 
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:

    
# 下面的用户名和密码如果你之前用的username/password,就仍然用之前的。


    - 
MONGO_INITDB_ROOT_USERNAME
=
myname

    - 
MONGO_INITDB_ROOT_PASSWORD
=
mypassword

  volumes:

    - ./mongo/data:/data/db

    - ./mongodb.key:/data/mongodb.key

windows下不能修改权限时将内容替换为:


 
  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
=
myname

      - 
MONGO_INITDB_ROOT_PASSWORD
=
mypassword

    volumes:

      - ./mongo/data:/data/db

      - ./mongodb.key:/data/mongodb.key

    entrypoint:

      - 
bash


      - 
-c


      - 
|


          
chmod
 
400
 /data/mongodb.key

          
chown
 
999
:999 /data/mongodb.key

          
exec
 docker-entrypoint.sh 
$$
@

第二步:修改config.json代码:

直接复制以下代码替换掉原来的:


 
{


  
"systemEnv"
:
 
{


    
"openapiPrefix"
:
 
"fastgpt"
,

    
"vectorMaxProcess"
:
 
15
,

    
"qaMaxProcess"
:
 
15
,

    
"pgHNSWEfSearch"
:
 
100


  
}
,

  
"llmModels"
:
 
[


    
{


      
"model"
:
 
"gpt-3.5-turbo-1106"
,

      
"name"
:
 
"gpt-3.5-turbo"
,

      
"maxContext"
:
 
16000
,

      
"maxResponse"
:
 
4000
,

      
"quoteMaxToken"
:
 
13000
,

      
"maxTemperature"
:
 
1.2
,

      
"inputPrice"
:
 
0
,

      
"outputPrice"
:
 
0
,

      
"censor"
:
 false,

      
"vision"
:
 false,

      
"datasetProcess"
:
 false,

      
"toolChoice"
:
 true,

      
"functionCall"
:
 false,

      
"customCQPrompt"
:
 
""
,

      
"customExtractPrompt"
:
 
""
,

      
"defaultSystemChatPrompt"
:
 
""
,

      
"defaultConfig"
:
 
{
}


    
}
,

    
{


      
"model"
:
 
"gpt-3.5-turbo-16k"
,

      
"name"
:
 
"gpt-3.5-turbo-16k"
,

      
"maxContext"
:
 
16000
,

      
"maxResponse"
:
 
16000
,

      
"quoteMaxToken"
:
 
13000
,

      
"maxTemperature"
:
 
1.2
,

      
"inputPrice"
:
 
0
,

      
"outputPrice"
:
 
0
,

      
"censor"
:
 false,

      
"vision"
:
 false,

      
"datasetProcess"
:
 true,

      
"toolChoice"
:
 true,

      
"functionCall"
:
 false,

      
"customCQPrompt"
:
 
""
,

      
"customExtractPrompt"
:
 
""
,

      
"defaultSystemChatPrompt"
:
 
""
,

      
"defaultConfig"
:
 
{
}


    
}
,

    
{


      
"model"
:
 
"gpt-4-0125-preview"
,

      
"name"
:
 
"gpt-4-turbo"
,

      
"maxContext"
:
 
125000
,

      
"maxResponse"
:
 
4000
,

      
"quoteMaxToken"
:
 
100000
,

      
"maxTemperature"
:
 
1.2
,

      
"inputPrice"
:
 
0
,

      
"outputPrice"
:
 
0
,

      
"censor"
:
 false,

      
"vision"
:
 false,

      
"datasetProcess"
:
 false,

      
"toolChoice"
:
 true,

      
"functionCall"
:
 false,

      
"customCQPrompt"
:
 
""
,

      
"customExtractPrompt"
:
 
""
,

      
"defaultSystemChatPrompt"
:
 
""
,

      
"defaultConfig"
:
 
{
}


    
}
,

    
{


      
"model"
:
 
"gpt-4-vision-preview"
,

      
"name"
:
 
"gpt-4-vision"
,

      
"maxContext"
:
 
128000
,

      
"maxResponse"
:
 
4000
,

      
"quoteMaxToken"
:
 
100000
,

      
"maxTemperature"
:
 
1.2
,

      
"inputPrice"
:
 
0
,

      
"outputPrice"
:
 
0
,

      
"censor"
:
 false,

      
"vision"
:
 false,

      
"datasetProcess"
:
 false,

      
"toolChoice"
:
 true,

      
"functionCall"
:
 false,

      
"customCQPrompt"
:
 
""
,

      
"customExtractPrompt"
:
 
""
,

      
"defaultSystemChatPrompt"
:
 
""
,

      
"defaultConfig"
:
 
{
}


    
}


  
]
,

  
"vectorModels"
:
 
[


    
{


      
"model"
:
 
"text-embedding-ada-002"
,

      
"name"
:
 
"Embedding-2"
,

      
"inputPrice"
:
 
0
,

      
"outputPrice"
:
 
0
,

      
"defaultToken"
:
 
700
,

      
"maxToken"
:
 
3000
,

      
"weight"
:
 
100
,

      
"defaultConfig"
:
 
{
}


    
}


  
]
,

  
"reRankModels"
:
 
[
]
,

  
"audioSpeechModels"
:
 
[


    
{


      
"model"
:
 
"tts-1"
,

      
"name"
:
 
"OpenAI TTS1"
,

      
"inputPrice"
:
 
0
,

      
"outputPrice"
:
 
0
,

      
"voices"
:
 
[


        
{
 
"label"
:
 
"Alloy"
, 
"value"
:
 
"alloy"
, 
"bufferId"
:
 
"openai-Alloy"
 
}
,

        
{
 
"label"
:
 
"Echo"
, 
"value"
:
 
"echo"
, 
"bufferId"
:
 
"openai-Echo"
 
}
,

        
{
 
"label"
:
 
"Fable"
, 
"value"
:
 
"fable"
, 
"bufferId"
:
 
"openai-Fable"
 
}
,

        
{
 
"label"
:
 
"Onyx"
, 
"value"
:
 
"onyx"
, 
"bufferId"
:
 
"openai-Onyx"
 
}
,

        
{
 
"label"
:
 
"Nova"
, 
"value"
:
 
"nova"
, 
"bufferId"
:
 
"openai-Nova"
 
}
,

        
{
 
"label"
:
 
"Shimmer"
, 
"value"
:
 
"shimmer"
, 
"bufferId"
:
 
"openai-Shimmer"
 
}


      
]


    
}


  
]
,

  
"whisperModel"
:
 
{


    
"model"
:
 
"whisper-1"
,

    
"name"
:
 
"Whisper1"
,

    
"inputPrice"
:
 
0
,

    
"outputPrice"
:
 
0


  
}


}

第三步:创建 mongo 密钥,赋予密钥文件权限:

打开终端, CD 进项目的目录,如果安装了宝塔,直接在项目的目录界面点击终端。

file

file

在终端输入代码:


 
openssl rand 
-
base64 
756
 
>
 
.
/
mongodb
.
key

接着再输入:chmod 600 ./mongodb.key

接着再输入:chown 999:root ./mongodb.key

(!!!这一步很关键,如果不输入这一步,就无法启动Mongo容器)

第四步:重启所有容器。

依次在终端输入以下代码:


 
# 重启 Mongo


docker-compose
 down

docker-compose
 up 
-d

此时,可以去Docker界面看看mongo是否正常启动,如果没有启动,就手动启动一下。

第五步:进入容器初始化部分集合

先在终端输入:docker exec -it mongo bash

再输入:mongo -u myname -p mypassword --authenticationDatabase admin

(注意这里的myname和mypassword,要和docker-compose.yml 里mongo部分的代码一致。)

初始化副本集。在终端输入以下代码:


 
rs.initiate
(
{


_id: 
"rs0"
,

members: 
[


{
 _id: 
0
, host: 
"mongo:27017"
 
}


]


}
)

检查状态。 输入:rs.status() 如果提示 rs0 状态,则代表运行成功

第六步:更新容器

在终端输入以下代码:


 
docker-compose
 down 
&&
 
docker-compose
 pull 
&&
 
docker-compose
 up 
-d

其它问题:

1、导入知识库时提示null value in column "tmb_id" of relation "modeldata" violates not-null constraint

这可能是因为没有初始化4.6.7,或初始化4.6.7出现了某首错误,比如rootkey不正确;

2、已经显示4.6.8,但对话或导入模型时提示没有模型。

需要重新拉取最新的容器:


 
docker-compose
 down 
&&
 
docker-compose
 pull 
&&
 
docker-compose
 up 
-d

3、初始化mongo副本集提示This node was not started with the replSet option

这是因为mongodb.key的权限不够,需要再在终端输入:chown 999:root ./mongodb.key

4、Docker部署m3e向量模型时报错【选择国内镜像或从huggingface下载后调用】

5、部署FAST-GPT时登录报错【一般是key权限问题】

6、MongoDB 容器并配置副本集初始化报错【docker exec -it mongo mongo 然后,在 MongoDB Shell 中执行 rs.initiate() 命令来初始化副本集:rs.initiate({ _id: "rs0", members: [ { _id: 0, host: "localhost:27017" } ] })

6、报错:Operation users.findOne() buffering timed out after 10000ms mongo运行失败的结果,需要初始化副本集后再启动