Windows+WSL+Ubuntu+Docker-Desktop+FastGPT+m3e+oneapi+ChatGLM3部署本地AI知识库
我吃饭很厉害 2024-07-16 09:31:02 阅读 53
1. windows wsl Ubuntu(略)
2. 安装docker-destktop并设置wsl(略)
3. 在ubuntu中操作:
下载yml和json文件
<code>cd ~/
sudo 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
修改yml文件,打开下载的docker-compose.yml
文件,修改fastgpt端口为3200:3000
(其中外部暴露端口3200可以任意)
拉去镜像,这个过程稍微比较长,如果timeout,重新拉去,或者更改docker镜像源,如何修改请自行百度
sudo docker-compose pull && sudo docker-compose up -d
手动初始化mongo(fastgpt 4.7版本不需要初始化,可以进入容器先查询)
查看mongo容器是否正常运行
sudo docker ps
进入容器
sudo docker exec -it mongo bash
链接数据库(这里需要填mongo用户名和密码)
mongo -u myusername -p mypassword --authenticationDatabase admin
直接查询初始化副本集的状态,如果提示rs0状态,则代表成功
rs.status()# 成功则退出
exit()
浏览器访问 http://localhost:3020 则可以访问fastgpt的页面,默认账号是 root
,密码是 1234
4. 下载启动chatglm3的api服务
下载文件和模型:
程序文件下载地址:链接 https://pan.baidu.com/s/1JjIUkQohjDMyurapD5gfqg?pwd=lky0
模型下载(模型文件将整个文件夹的内容都下载,耗时比较长):
官网地址:https://huggingface.co/THUDM/chatglm3-6b-32k/tree/main百度网盘地址:https://pan.baidu.com/s/12WsiftYvarm7A2VaL_NBHg?pwd=147l
修改chatglm3程序文件的bat
程序文件解压后,鼠标右键编辑02启动api.bat
文件
复制下载好模型的绝对路径
将复制好的路径替换bat文件的模型路径(set MODEL_PATH),并保存退出
@echo off
chcp 65001 >null
echo 启动中,请耐心等待
set PYTHON=..\glut\python.exe
set SC_PATH=..\glut\Scripts
set CU_PATH=..\glut\Lib\site-packages\torch\lib
set PATH=%SC_PATH%;%CU_PATH%;%PATH%
set HF_ENDPOINT=https://hf-mirror.com
set HF_HOME=..\huggingface
set MODEL_PATH=..\..\chatglm3-6b-32k
# 我上面使用的相对路径,也可以使用绝对路径
# set MODEL_PATH=E:\LLM\chatglm3-6b-32k
CD openai_api_demo
%PYTHON% openai_api.py
pause
双击启动02启动api.bat
文件,启动完成之后就能看到使用的是http://0.0.0.0:8000
,请勿关闭这个cmd窗口。
注意:请勿使用右键管理员运行,会报错:The system cannot find the path specified.
5. 使用docker部署m3e
实现本地私有部署,并调用本地LLM,则需要本地的想量化模型处理文本资料,选择M3E小模型,占用资源不高,CPU也可运行。
镜像名: stawky/m3e-large-api:latest
国内镜像: registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api:latest
端口号: 6008 环境变量openai的渠道密码,默认:sk-aaabbbcccdddeeefffggghhhiiijjjkkk
确认端口是否被占用,m3e默认使用6008端口,使用下面命令查看是否被占用
netsh int ipv4 show excludedport tcp
部署m3e(本人使用gpu来运算)
使用cpu运行
sudo docker run -d -p 6008:6008 --name=m3e-large-api registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api:latest
使用gpu运行
sudo docker run -d -p 6008:6008 --gpus all --name=m3e-large-api registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api:latest
源镜像(推荐)
sudo docker run -d -p 6008:6008 --gpus all --name=m3e-large-api stawky/m3e-large-api:latest
其中 --gpus all
是使用gpu来运行,此过程比较慢,等待部署完成
6. 配置oneapi
运行并访问oneapi:访问 http://localhost:3000/ 并登录。初始账号用户名为 root
,密码为 123456
点击令牌,添加新的令牌
如图所示:
复制<code>ChatGPT Next Web
# 这是我的令牌
https://app.nextchat.dev/#/?settings={"key":"sk-kuI2uEsxnJV8XgIN69493c7088D544Aa9b9d645d950e85F7","url":"http://localhost:3000"}
# 其中key为:sk-kuI2uEsxnJV8XgIN69493c7088D544Aa9b9d645d950e85F7
# url:http://localhost:3000
通常一般教程会让大家去配置渠道,但是我们是用的windows wsl ubuntu 和docker-desktop,后续配置m3e渠道测试的时候会访问不通,会出现<code>connect: 192.168.0.137:6008 connection refused(如图),所以我们需要重新配置docker-compose.yml
7. 重新配置docker-compose.yml和config.json
docker-compose.yml,其中<code>OPENAI_BASE_URL无修修改就是用默认的http://oneapi:3000/v1
,CHAT_API_KEY
为上面复制ChatGPT Next Web
的 key
,还需要在oneapi
中增加一个 extra_hosts
, 详细配置如下:
docker-compose.yml
# 数据库的默认账号和密码仅首次运行时设置有效
# 如果修改了账号密码,记得改数据库和项目连接参数,别只改一处~
# 该配置文件只是给快速启动,测试使用。正式使用,记得务必修改账号密码,以及调整合适的知识库参数,共享内存等。
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
echo 'const isInited = rs.status().ok === 1
if(!isInited){
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "mongo:27017" }
]
})
}' > /data/initReplicaSet.js
# 启动MongoDB服务
exec docker-entrypoint.sh "$$@" &
# 等待MongoDB服务启动
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')" > /dev/null 2>&1; do
echo "Waiting for MongoDB to start..."
sleep 2
done
# 执行初始化副本集的脚本
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
wait $$!
fastgpt:
container_name: fastgpt
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.7 # git
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.7 # 阿里云
ports:
- 3020:3000
networks:
- fastgpt
depends_on:
- mongo
- pg
restart: always
environment:
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
- DEFAULT_ROOT_PSW=1234
# AI模型的API地址哦。务必加 /v1。这里默认填写了OneApi的访问地址。
- OPENAI_BASE_URL=http://oneapi:3000/v1
# AI模型的API Key。(这里默认填写了OneAPI的快速默认key,测试通后,务必及时修改)
- CHAT_API_KEY=sk-kuI2uEsxnJV8XgIN69493c7088D544Aa9b9d645d950e85F7
# 数据库最大连接数
- DB_MAX_LINK=30
# 登录凭证密钥
- TOKEN_KEY=any
# root的密钥,常用于升级时候的初始化请求
- ROOT_KEY=root_key
# 文件阅读加密
- FILE_TOKEN_KEY=filetoken
# MongoDB 连接参数. 用户名myusername,密码mypassword。
- MONGODB_URI=mongodb://myusername:mypassword@mongo:27017/fastgpt?authSource=admin
# pg 连接参数
- PG_URL=postgresql://username:password@pg:5432/postgres
volumes:
- ./config.json:/app/data/config.json
- ./fastgpt/tmp:/app/tmp
mysql:
image: mysql:8.0.36
container_name: mysql
restart: always
ports:
- 3306:3306
networks:
- fastgpt
command: --default-authentication-plugin=mysql_native_password
environment:
# 默认root密码,仅首次运行有效
MYSQL_ROOT_PASSWORD: oneapimmysql
MYSQL_DATABASE: oneapi
volumes:
- ./mysql:/var/lib/mysql
oneapi:
container_name: oneapi
image: ghcr.io/songquanpeng/one-api:latest
ports:
- 3001:3000
depends_on:
- mysql
networks:
- fastgpt
# oneapi中测试不通的话,增加下面代码
extra_hosts:
- host.docker.internal:host-gateway
restart: always
environment:
# mysql 连接参数
- SQL_DSN=root:oneapimmysql@tcp(mysql:3306)/oneapi
# 登录凭证加密密钥
- SESSION_SECRET=oneapikey
# 内存缓存
- MEMORY_CACHE_ENABLED=true
# 启动聚合更新,减少数据交互频率
- BATCH_UPDATE_ENABLED=true
# 聚合更新时长
- BATCH_UPDATE_INTERVAL=10
# 初始化的 root 密钥(建议部署完后更改,否则容易泄露)
- INITIAL_ROOT_TOKEN=fastgpt
volumes:
- ./oneapi:/data
networks:
fastgpt:
config.json
需要在llmModels
中增加chatglm3
的模型,在vectorModels
中增加m3e
,全部配置如下:
{
"feConfigs": {
"lafEnv": "https://laf.dev"
},
"systemEnv": {
"openapiPrefix": "fastgpt",
"vectorMaxProcess": 15,
"qaMaxProcess": 15,
"pgHNSWEfSearch": 100
},
"llmModels": [
{
"model": "chatglm3",
"name": "chatglm3",
"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": "qwen",
"name": "qwen",
"maxContext": 32000,
"avatar": "/imgs/model/qwen.svg",
"maxResponse": 5000,
"quoteMaxToken": 5000,
"maxTemperature": 1.2,
"charsPointsPrice": 0,
"censor": false,
"vision": false,
"datasetProcess": true,
"usedInClassify": true,
"usedInExtractFields": true,
"usedInToolCall": true,
"usedInQueryExtension": true,
"toolChoice": true,
"functionCall": false,
"customCQPrompt": "",
"customExtractPrompt": "",
"defaultSystemChatPrompt": "",
"defaultConfig": { }
},
{
"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": { }
}
],
"vectorModels": [
{
"model": "text-embedding-ada-002",
"name": "Embedding-2",
"avatar": "/imgs/model/openai.svg",
"charsPointsPrice": 0,
"defaultToken": 512,
"maxToken": 3000,
"weight": 100,
"dbConfig": { },
"queryConfig": { }
},
{
"model": "m3e",
"name": "m3e",
"avatar": "/imgs/model/openai.svg",
"charsPointsPrice": 0,
"defaultToken": 700,
"maxToken": 3000,
"weight": 100
}
],
"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
}
}
保存之后在你的windows系统或者Ubuntu中运行以下代码:
# windows
docker-compose down && docker-compose pull && docker-compose up -d
# Ubuntu
sudo docker-compose down && sudo docker-compose pull && sudo docker-compose up -d
8. oneapi配置渠道
访问 http://localhost:3000/ 并登录。初始账号用户名为 root
,密码为 123456
,点击渠道
并添加新渠道,如图:
添加chatglm3和m3e渠道,
chatglm3渠道的默认key: <code>sk-key
m3e渠道的默认key:sk-aaabbbcccdddeeefffggghhhiiijjjkkk
切记:Base Url后面的端口要是你docker或者api暴露端口,例如是m3e在docker run -p 6009:6008, 那么m3e模型的端口就是<code>http://host.docker.internal:6009(只是举例)
在渠道列表页面点击测试,其中m3e没有chat测试,所以返回404为正常。如图所示:
9. fastgpt配置私有知识库
打开浏览器访问 <code>http://localhost:3020, 输入账号root
,密码1234
如图所示
这里的索引模型我们选择刚才添加的m3e,文件处理模型选择 chatglm3
我的示例文档是一个txt文件,所以我选择文本数据集
然后点击下一步,上传。上传之后你的文档会索引,这时候你开启的chatglm3的cmd窗口中会出现如图的训练代码,索引中你的显卡(因为之前m3e是显卡训练)占用率很高,直到训练完成,训练完成之后会出现下图的显示:
知识库已就绪之后,创建聊天应用。
这样我们就完成了整个部署。
上一篇: 让AI听话的一种办法(Stable Diffusion进阶篇:SVD 3)
下一篇: Anthropic新功能上线!一键生成优化Claude模型提示词,助力AI高效创作
本文标签
Windows+WSL+Ubuntu+Docker-Desktop+FastGPT+m3e+oneapi+ChatGLM3部署本地AI知识库
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。