
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
兼容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
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
环境要求
Python 3.10.11
CUDA 11.7
科学上网环境
源码部署
根据上面的环境配置配置好环境,具体教程自行 GPT;
下载 python 文件
在命令行输入命令 pip install -r requirements.txt;
按照https://huggingface.co/BAAI/bge-reranker-base下载模型仓库到app.py同级目录
添加环境变量 export ACCESS_TOKEN=XXXXXX 配置 token,这里的 token 只是加一层验证,防止接口被人盗用,默认值为 ACCESS_TOKEN ;
执行命令 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 | >=25GB | python openai_api.py 16 |
int8 | >=16GB | >=9GB | >=25GB | python openai_api.py 8 |
int4 | >=16GB | >=6GB | >=25GB | python openai_api.py 4 |
环境要求
Python 3.8.10
CUDA 11.8
科学上网环境
源码部署
根据上面的环境配置配置好环境,具体教程自行 GPT;
下载 python 文件
在命令行输入命令 pip install -r requirements.txt;
打开你需要启动的 py 文件,在代码的 verify_token 方法中配置 token,这里的 token 只是加一层验证,防止接口被人盗用;
执行命令 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
这里填入 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
在终端输入代码:
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运行失败的结果,需要初始化副本集后再启动