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:
- # db
- pg:
- image: pgvector/pgvector:0.7.0-pg15 # docker hub
- # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.7.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: 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: 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
- sandbox:
- container_name: sandbox
- image: ghcr.io/labring/fastgpt-sandbox:latest # git
- # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:latest # 阿里云
- networks:
- - fastgpt
- restart: always
- fastgpt:
- container_name: fastgpt
- image: ghcr.io/labring/fastgpt:v4.8.9 # git
- # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.9 # 阿里云
- ports:
- - 3020:3000
- networks:
- - fastgpt
- depends_on:
- - mongo
- - pg
- - sandbox
- 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-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=warn
- volumes:
- - ./config.json:/app/data/config.json
-
- # oneapi
- mysql:
- # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mysql:8.0.36 # 阿里云
- 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:v0.6.7
- # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/one-api:v0.6.6 # 阿里云
- ports:
- - 3001:3000
- depends_on:
- - mysql
- networks:
- - fastgpt
- 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:
(将fastgpt的ports修改为3020:3000)
对于该配置文件下载时存在三个版本,如何选择依据下图:
(3)下载镜像
docker-compose up -d # 一次性启动所有服务,若本地没有该服务镜像则会先下载
(4)安装ollama
Ollama是管理和运行大型语言模型的开源工具。其功能特点包括:可在本地运行大型语言模型,保障数据隐私与安全;支持多种模型管理,方便用户按需拉取切换;轻量级,对系统资源要求相对合理,能在多种设备运行;具有简单的命令行界面,易于使用。在应用场景方面,对开发者而言,能在本地快速搭建测试环境,提高开发效率;对普通用户来说,可用于个人创作任务并确保数据安全,是一款功能实用且易用的工具。
ollama常用命令:
ollama pull
:用于从 Ollama 的模型库中拉取指定名称的模型到本地ollama list
:该命令会列出已经下载到本地的所有模型ollama run
:启动指定名称的模型
(5)安装M3E
- # 1.拉取镜像
- 只有amd64架构: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是什么"
- ]
- }'
Windows下 PowerShell 中发起下面请求代码测试:
- $headers = @{
- "Content-Type" = "application/json"
- "Authorization" = "Bearer sk-aaabbbcccdddeeefffggghhhiiijjjkkk"
- }
-
- $body = @{
- "model" = "m3e"
- "input" = @("laf是什么")
- } | ConvertTo-Json
-
- Invoke-WebRequest -Uri "http://localhost:6100/v1/embeddings" -Method POST -Headers $headers -Body $body
(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
知识库 - 新建知识库
成功!!
评论记录:
回复评论: