主要是分享FastGTP开源项目实现方案,FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,它有简单易用的可视化界面、自动数据预处理、工作流编排、强大的 API 集成等功能
一、系统架构图如下:
二、准备工作
1、搭建过程共分为四步,分别如下:LLM语言模型搭建、M3E向量模型搭建、ONE-API搭建、FastGTP环境搭建
本环境采用docker布署,对应docker和docker-compose版本如下:
docker:Docker version 26.0.1, build d260a54
docker-compose:Docker Compose version v2.20.3
三、LLM语言模型搭建
1、ollama安装
docker pull ollama/ollama
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
页面访问:http://192.168.137.202:11434/ ,ip改为对应服务器的ip,页面显示如下,Ollama is running 表示成功
2、Open WebUI安装(可以方便的在界面上操作,下载语言模型、测试等)
docker pull ghcr.io/open-webui/open-webui:main
docker run -d -p 8080:8080 -e OLLAMA_BASE_URL=http://192.168.137.202:11434 -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
上面的OLLAMA_BASE_URL改为ollama环境服务器的ip,然后登陆页面
http://192.168.137.202:8080
3、Open WebUI下载大模型通义千问qwen:0.5b,如下截图(第一次先注册登陆)
检测连接ollama环境是否连通,如下截图
下载通义千问qwen:0.5b语言模型
等下载完也之后,测试使用
四、M3E向量模型搭建
docker pull registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api
docker run -d --name m3e -p 6008:6008 registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api
docker ps |grep m3e
容器启动之后,使用如下命令查看
五、ONE-API搭建
1、环境安装
mkdir -p /data/fastgpt/one-api/data
docker pull justsong/one-api
docker run --name one-api -d --restart always -p 13000:3000 -e TZ=Asia/Shanghai -v /data/fastgpt/one-api/data:/data justsong/one-api
打开页面: http://192.168.137.202:13000/ ,然后注册,账号填root,密码填:123456,第一个注册的账号为管理员账号,注册之后就可以登陆了,登陆成功如下截图:
2、创建令牌,此令牌在fastgpt连接one-api时会使用,后面在搭fastgpt环境时,会使用此令牌
3、配置通义千问语言模型qwen:0.5b,和向量模型m3e,如下截图
配置m3e访问,密钥填sk-aaabbbcccdddeeefffggghhhiiijjjkkk,这个是固定的,不能变
4、测试
六、FastGTP环境搭建
fastgpt官方docker布署参考:https://doc.fastai.site/docs/development/docker/
不过官方写的文档比较散,按照我的步骤来布,几乎可以顺利布署成功
mkdir -p /data/fastgpt
cd /data/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
1、docker-compose.yml(里面的配置内容,已经根据我本机的ip修改好了)
# 非 host 版本, 不使用本机代理
# (不懂 Docker 的,只需要关心 OPENAI_BASE_URL 和 CHAT_API_KEY 即可!)
version: '3.3'
services:
pg:
image: ankane/pgvector:v0.5.0 # git
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.5.0 # 阿里云
container_name: pg
restart: always
ports: # 生产环境建议不要暴露
- 5432:5432
networks:
- fastgpt
environment:
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
- POSTGRES_USER=username
- POSTGRES_PASSWORD=password
- POSTGRES_DB=postgres
volumes:
- ./pg/data:/var/lib/postgresql/data
mongo:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18
container_name: mongo
restart: always
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
entrypoint:
- bash
- -c
- |
openssl rand -base64 128 > /data/mongodb.key
chmod 400 /data/mongodb.key
chown 999:999 /data/mongodb.key
exec docker-entrypoint.sh $$@
fastgpt:
container_name: fastgpt
image: ghcr.io/labring/fastgpt:latest # git
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:latest # 阿里云
ports:
- 3000:3000
networks:
- fastgpt
depends_on:
- mongo
- pg
restart: always
environment:
# root 密码,用户名为: root
- DEFAULT_ROOT_PSW=123456
# 中转地址,如果是用官方号,不需要管。务必加 /v1
- OPENAI_BASE_URL=http://192.168.137.202:13000/v1
- CHAT_API_KEY=sk-WfqE4Tm63opBhMuk943031C1Eb6940C399C086Bb575bD0D2
- DB_MAX_LINK=5 # database max link
- TOKEN_KEY=any
- ROOT_KEY=root_key
- FILE_TOKEN_KEY=filetoken
# mongo 配置,不需要改. 用户名myusername,密码mypassword。
- MONGODB_URI=mongodb://myusername:mypassword@192.168.137.202:27017/fastgpt?authSource=admin
# pg配置. 不需要改
- PG_URL=postgresql://username:password@192.168.137.202:5432/postgres
volumes:
- ./config.json:/app/data/config.json
networks:
fastgpt:
2、config.json文件(里面已经配好了qwen:0.5b和m3e向量模型)
{
"systemEnv": {
"openapiPrefix": "fastgpt",
"vectorMaxProcess": 15,
"qaMaxProcess": 15,
"pgHNSWEfSearch": 100
},
"llmModels": [
{
"model": "gpt-3.5-turbo",
"name": "gpt-3.5-turbo",
"maxContext": 16000,
"avatar": "/imgs/model/openai.svg",
"maxResponse": 4000,
"quoteMaxToken": 13000,
"maxTemperature": 1.2,
"charsPointsPrice": 0,
"censor": false,
"vision": false,
"datasetProcess": true,
"usedInClassify": true,
"usedInExtractFields": true,
"usedInToolCall": true,
"usedInQueryExtension": true,
"toolChoice": true,
"functionCall": true,
"customCQPrompt": "",
"customExtractPrompt": "",
"defaultSystemChatPrompt": "",
"defaultConfig": {}
},
{
"model": "gpt-4-0125-preview",
"name": "gpt-4-turbo",
"avatar": "/imgs/model/openai.svg",
"maxContext": 125000,
"maxResponse": 4000,
"quoteMaxToken": 100000,
"maxTemperature": 1.2,
"charsPointsPrice": 0,
"censor": false,
"vision": false,
"datasetProcess": false,
"usedInClassify": true,
"usedInExtractFields": true,
"usedInToolCall": true,
"usedInQueryExtension": true,
"toolChoice": true,
"functionCall": false,
"customCQPrompt": "",
"customExtractPrompt": "",
"defaultSystemChatPrompt": "",
"defaultConfig": {}
},
{
"model": "gpt-4-vision-preview",
"name": "gpt-4-vision",
"avatar": "/imgs/model/openai.svg",
"maxContext": 128000,
"maxResponse": 4000,
"quoteMaxToken": 100000,
"maxTemperature": 1.2,
"charsPointsPrice": 0,
"censor": false,
"vision": true,
"datasetProcess": false,
"usedInClassify": false,
"usedInExtractFields": false,
"usedInToolCall": false,
"usedInQueryExtension": false,
"toolChoice": true,
"functionCall": false,
"customCQPrompt": "",
"customExtractPrompt": "",
"defaultSystemChatPrompt": "",
"defaultConfig": {}
},
{
"model": "qwen:0.5b",
"name": "qwen:0.5b",
"avatar": "/imgs/model/openai.svg",
"maxContext": 128000,
"maxResponse": 4000,
"quoteMaxToken": 100000,
"maxTemperature": 1.2,
"charsPointsPrice": 0,
"censor": false,
"vision": true,
"datasetProcess": true,
"usedInClassify": true,
"usedInExtractFields": true,
"usedInToolCall": true,
"usedInQueryExtension": true,
"toolChoice": true,
"functionCall": false,
"customCQPrompt": "",
"customExtractPrompt": "",
"defaultSystemChatPrompt": "",
"defaultConfig": {}
}
],
"vectorModels": [
{
"model": "text-embedding-ada-002",
"name": "Embedding-2",
"avatar": "/imgs/model/openai.svg",
"charsPointsPrice": 0,
"defaultToken": 700,
"maxToken": 3000,
"weight": 100
},
{
"model": "m3e",
"name": "m3e",
"price": 0.2,
"defaultToken": 700,
"maxToken": 3000
}
],
"reRankModels": [],
"audioSpeechModels": [
{
"model": "tts-1",
"name": "OpenAI TTS1",
"charsPointsPrice": 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",
"charsPointsPrice": 0
}
}
2、启动
docker-compose up -d
docker ps
启动好了,查看容器应该有fastgpt、pg、mongo,应该有如下容器,其余容open-webui、m3e、one-api、ollama是前面步骤创建的
3、进入mongo容器执行副本集合初始化
# 查看 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()
4、重启服务命令如下(比如修改配置了,需要重启时):
docker-compose down
docker-compose up -d
七、FastGTP页面配置
1、创建知识库
手动录入知识问题
2、创建应用
大功告成
专注JAVA系统优化、系统结构调整、系统问题排查医治、系统升级、架构设计、SQL语句优化、小程序、APP、企业应用软件开发,请 + hekf888,欢迎关注,时常发布技术分享博文