1.认识fastgpt
2.私有化部署
- MongoDB:用于存储除了向量外的各类数据
- PostgreSQL/Milvus:存储向量数据
- OneAPI: 聚合各类 AI API,支持多模型调用 (任何模型问题,先自行通过 OneAPI 测试校验)
(1)前置工作
Docker环境、网络
(2)开始部署
本地创建文件夹命名为fastgpt,在该文件夹下创建config.json 和 docker-compose.yml 文件。
内容如下:
// 已使用 json5 进行解析,会自动去掉注释,无需手动去除
{"feConfigs": {"lafEnv": "https://laf.dev" // laf环境。 https://laf.run (杭州阿里云) ,或者私有化的laf环境。如果使用 Laf openapi 功能,需要最新版的 laf 。},"systemEnv": {"vectorMaxProcess": 15,"qaMaxProcess": 15,"pgHNSWEfSearch": 100 // 向量搜索参数。越大,搜索越精确,但是速度越慢。设置为100,有99%+精度。},"llmModels": [{"model": "gpt-4o-mini", // 模型名(对应OneAPI中渠道的模型名)"name": "gpt-4o-mini", // 模型别名"avatar": "/imgs/model/openai.svg", // 模型的logo"maxContext": 125000, // 最大上下文"maxResponse": 16000, // 最大回复"quoteMaxToken": 120000, // 最大引用内容"maxTemperature": 1.2, // 最大温度"charsPointsPrice": 0, // n积分/1k token(商业版)"censor": false, // 是否开启敏感校验(商业版)"vision": true, // 是否支持图片输入"datasetProcess": true, // 是否设置为文本理解模型(QA),务必保证至少有一个为true,否则知识库会报错"usedInClassify": true, // 是否用于问题分类(务必保证至少有一个为true)"usedInExtractFields": true, // 是否用于内容提取(务必保证至少有一个为true)"usedInToolCall": true, // 是否用于工具调用(务必保证至少有一个为true)"usedInQueryExtension": true, // 是否用于问题优化(务必保证至少有一个为true)"toolChoice": true, // 是否支持工具选择(分类,内容提取,工具调用会用到。目前只有gpt支持)"functionCall": false, // 是否支持函数调用(分类,内容提取,工具调用会用到。会优先使用 toolChoice,如果为false,则使用 functionCall,如果仍为 false,则使用提示词模式)"customCQPrompt": "", // 自定义文本分类提示词(不支持工具和函数调用的模型"customExtractPrompt": "", // 自定义内容提取提示词"defaultSystemChatPrompt": "", // 对话默认携带的系统提示词"defaultConfig": {}, // 请求API时,挟带一些默认配置(比如 GLM4 的 top_p)"fieldMap": {} // 字段映射(o1 模型需要把 max_tokens 映射为 max_completion_tokens)},{"model": "gpt-4o","name": "gpt-4o","avatar": "/imgs/model/openai.svg","maxContext": 125000,"maxResponse": 4000,"quoteMaxToken": 120000,"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": {},"fieldMap": {}},{"model": "o1-mini","name": "o1-mini","avatar": "/imgs/model/openai.svg","maxContext": 125000,"maxResponse": 4000,"quoteMaxToken": 120000,"maxTemperature": 1.2,"charsPointsPrice": 0,"censor": false,"vision": false,"datasetProcess": true,"usedInClassify": true,"usedInExtractFields": true,"usedInToolCall": true,"usedInQueryExtension": true,"toolChoice": false,"functionCall": false,"customCQPrompt": "","customExtractPrompt": "","defaultSystemChatPrompt": "","defaultConfig": {"temperature": 1,"stream": false},"fieldMap": {"max_tokens": "max_completion_tokens"}},{"model": "o1-preview","name": "o1-preview","avatar": "/imgs/model/openai.svg","maxContext": 125000,"maxResponse": 4000,"quoteMaxToken": 120000,"maxTemperature": 1.2,"charsPointsPrice": 0,"censor": false,"vision": false,"datasetProcess": true,"usedInClassify": true,"usedInExtractFields": true,"usedInToolCall": true,"usedInQueryExtension": true,"toolChoice": false,"functionCall": false,"customCQPrompt": "","customExtractPrompt": "","defaultSystemChatPrompt": "","defaultConfig": {"temperature": 1,"stream": false},"fieldMap": {"max_tokens": "max_completion_tokens"}}],"vectorModels": [{"model": "text-embedding-ada-002", // 模型名(与OneAPI对应)"name": "Embedding-2", // 模型展示名"avatar": "/imgs/model/openai.svg", // logo"charsPointsPrice": 0, // n积分/1k token"defaultToken": 700, // 默认文本分割时候的 token"maxToken": 3000, // 最大 token"weight": 100, // 优先训练权重"defaultConfig": {}, // 自定义额外参数。例如,如果希望使用 embedding3-large 的话,可以传入 dimensions:1024,来返回1024维度的向量。(目前必须小于1536维度)"dbConfig": {}, // 存储时的额外参数(非对称向量模型时候需要用到)"queryConfig": {} // 参训时的额外参数},{"model": "text-embedding-3-large","name": "text-embedding-3-large","avatar": "/imgs/model/openai.svg","charsPointsPrice": 0,"defaultToken": 512,"maxToken": 3000,"weight": 100,"defaultConfig": {"dimensions": 1024}},{"model": "text-embedding-3-small","name": "text-embedding-3-small","avatar": "/imgs/model/openai.svg","charsPointsPrice": 0,"defaultToken": 512,"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}
}
# 数据库的默认账号和密码仅首次运行时设置有效
# 如果修改了账号密码,记得改数据库和项目连接参数,别只改一处~
# 该配置文件只是给快速启动,测试使用。正式使用,记得务必修改账号密码,以及调整合适的知识库参数,共享内存等。
# 如何无法访问 dockerhub 和 git,可以用阿里云(阿里云没有arm包)version: '3.3'
services:# dbpg:image: pgvector/pgvector:0.7.0-pg15 # docker hub# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.7.0 # 阿里云container_name: pgrestart: alwaysports: # 生产环境建议不要暴露- 5432:5432networks:- fastgptenvironment:# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果- POSTGRES_USER=username- POSTGRES_PASSWORD=password- POSTGRES_DB=postgresvolumes:- ./pg/data:/var/lib/postgresql/datamongo:image: mongo:5.0.18 # dockerhub# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里云# image: mongo:4.4.29 # cpu不支持AVX时候使用container_name: mongorestart: alwaysports:- 27017:27017networks:- fastgptcommand: mongod --keyFile /data/mongodb.key --replSet rs0environment:- MONGO_INITDB_ROOT_USERNAME=myusername- MONGO_INITDB_ROOT_PASSWORD=mypasswordvolumes:- ./mongo/data:/data/dbentrypoint:- bash- -c- |openssl rand -base64 128 > /data/mongodb.keychmod 400 /data/mongodb.keychown 999:999 /data/mongodb.keyecho 'const isInited = rs.status().ok === 1if(!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; doecho "Waiting for MongoDB to start..."sleep 2done# 执行初始化副本集的脚本mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程wait $$!# fastgptsandbox:container_name: sandboximage: ghcr.io/labring/fastgpt-sandbox:latest # git# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:latest # 阿里云networks:- fastgptrestart: alwaysfastgpt:container_name: fastgptimage: ghcr.io/labring/fastgpt:v4.8.9 # git# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.9 # 阿里云ports:- 3020:3000networks:- fastgptdepends_on:- mongo- pg- sandboxrestart: alwaysenvironment:# 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-fastgpt# 数据库最大连接数- 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# sandbox 地址- SANDBOX_URL=http://sandbox:3000# 日志等级: debug, info, warn, error- LOG_LEVEL=info- STORE_LOG_LEVEL=warnvolumes:- ./config.json:/app/data/config.json# oneapimysql:# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mysql:8.0.36 # 阿里云image: mysql:8.0.36container_name: mysqlrestart: alwaysports:- 3306:3306networks:- fastgptcommand: --default-authentication-plugin=mysql_native_passwordenvironment:# 默认root密码,仅首次运行有效MYSQL_ROOT_PASSWORD: oneapimmysqlMYSQL_DATABASE: oneapivolumes:- ./mysql:/var/lib/mysqloneapi:container_name: oneapiimage: ghcr.io/songquanpeng/one-api:v0.6.7# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6 # 阿里云ports:- 3001:3000depends_on:- mysqlnetworks:- fastgptrestart: alwaysenvironment:# 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=fastgptvolumes:- ./oneapi:/data
networks:fastgpt:
(将fastgpt的ports修改为3020:3000)
对于该配置文件下载时存在三个版本,如何选择依据下图:
(3)下载镜像
docker-compose up -d # 一次性启动所有服务,若本地没有该服务镜像则会先下载
(4)安装ollama
Ollama是管理和运行大型语言模型的开源工具。其功能特点包括:可在本地运行大型语言模型,保障数据隐私与安全;支持多种模型管理,方便用户按需拉取切换;轻量级,对系统资源要求相对合理,能在多种设备运行;具有简单的命令行界面,易于使用。在应用场景方面,对开发者而言,能在本地快速搭建测试环境,提高开发效率;对普通用户来说,可用于个人创作任务并确保数据安全,是一款功能实用且易用的工具。
ollama安装地址 | ollama仓库地址
ollama常用命令:
ollama pull <model - name>
:用于从 Ollama 的模型库中拉取指定名称的模型到本地ollama list
:该命令会列出已经下载到本地的所有模型ollama run <model - name>
:启动指定名称的模型
(5)安装M3E
# 1.拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api:latest# 2.启动镜像(2种方式根据实际情况选择)
# 使用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
测试是否安装成功:
curl --location 'http://localhost:6100/v1/embeddings' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer sk-aaabbbcccdddeeefffggghhhiiijjjkkk' \
--data '{
"model": "m3e",
"input": [
"laf是什么"
]
}'
(6)通过one-api配置国内大模型(以qwen)
根据设定的端口,在浏览器内输入localhost:3001,默认账号为root
密码为123456
(端口号在docker-compose.yml文件中查看)
在渠道
中配置 通义千问和M3E。
a. 通义千问配置
b. M3E配置
密钥默认设置为: sk-aaabbbcccdddeeefffggghhhiiijjjkkk
c.测试所有渠道
(7)将模型集成进fastgpt
修改config.json
文件
"chatModels": [...#新增一个模型配置{"model": "qwen2.5:0.5b", // 模型名(对应OneAPI中渠道的模型名)"name": "qwen", // 模型别名"avatar": "/imgs/model/openai.svg", // 模型的logo"maxContext": 8000, // 最大上下文"maxResponse": 8000, // 最大回复"quoteMaxToken": 8000, // 最大引用内容"maxTemperature": 1.2, // 最大温度"charsPointsPrice": 0, // n积分/1k token(商业版)"censor": false, // 是否开启敏感校验(商业版)"vision": true, // 是否支持图片输入"datasetProcess": true, // 是否设置为文本理解模型(QA),务必保证至少有一个为true,否则知识库会报错"usedInClassify": true, // 是否用于问题分类(务必保证至少有一个为true)"usedInExtractFields": true, // 是否用于内容提取(务必保证至少有一个为true)"usedInToolCall": true, // 是否用于工具调用(务必保证至少有一个为true)"usedInQueryExtension": true, // 是否用于问题优化(务必保证至少有一个为true)"toolChoice": true, // 是否支持工具选择(分类,内容提取,工具调用会用到。目前只有gpt支持)"functionCall": false, // 是否支持函数调用(分类,内容提取,工具调用会用到。会优先使用 toolChoice,如果为false,则使用 functionCall,如果仍为 false,则使用提示词模式)"customCQPrompt": "", // 自定义文本分类提示词(不支持工具和函数调用的模型"customExtractPrompt": "", // 自定义内容提取提示词"defaultSystemChatPrompt": "", // 对话默认携带的系统提示词"defaultConfig": {}, // 请求API时,挟带一些默认配置(比如 GLM4 的 top_p)"fieldMap": {} // 字段映射(o1 模型需要把 max_tokens 映射为 max_completion_tokens)},...
]# 添加m3e向量模型
"vectorModels": [......{"model": "m3e","name": "m3e","avatar": "/imgs/model/openai.svg","charsPointsPrice": 0,"defaultToken": 700,"maxToken": 3000,"weight": 100},......
]
(其中name的值需要与one-api渠道配置中的名称保持一致,model的值需要与模型名称保持一致)
docker-compose down
docker-compose up -d
(8) 测试
访问fastgpt:http://localhost:3020
知识库 - 新建知识库
成功!!