chatglm3-6b+oneapi+fastGPT本地部署

2024/03 作者:ihunter 0 0

基础软件

  
基础软件功能说明
mongo:5.0.18fastGPT使用的数据库存储页面数据和知识库数据
pgvector:v0.5.0使用pg的向量数据库模块
one-api做模型的管理和api的提供
chatglm3-6b本地大模型
m3e-large-apiEmbedding 模型提供分词并转成向量数据
fastGPT知识库问答系统

环境配置:

一、电脑内存至少32G, GPU 8G以上、cpu指令集要支持AVX (二代或以后的i3、i5、i7都支持)

二、无GPU。内存最好64G、cpu指令集要支持AVX

数据库部署

pgvector:v0.5.0+mongo:5.0.18 这里使用dockercompose方式进行部署。这里部署在另外一台机器上。后面也会给出官方的方式

# 非 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
    environment:
      # 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
      - POSTGRES_USER=username
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=postgres
    volumes:
      - /app/fastgpt/pg:/var/lib/postgresql/data
  mongo:
    # image: mongo:5.0.18
    image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里云
    container_name: mongo
    # restart: always
    ports: # 生产环境建议不要暴露
      - 27017:27017
    environment:
      # 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
      - MONGO_INITDB_ROOT_USERNAME=username
      - MONGO_INITDB_ROOT_PASSWORD=password
    volumes:
      - /app/fastgpt/mongo:/data/db

启动命令

拉取镜像:docker-compose pull

在后台运行容器:docker-compose up -d

启动完成后等待fastgpt链接即可

官方的方式参考

# 非 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: mongo:5.0.18
    # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里云
    container_name: mongo
    restart: always
    ports: # 生产环境建议不要暴露
      - 27017:27017
    networks:
      - fastgpt
    environment:
      # 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
      - MONGO_INITDB_ROOT_USERNAME=username
      - MONGO_INITDB_ROOT_PASSWORD=password
    volumes:
      - ./mongo/data:/data/db
  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=1234
      # 中转地址,如果是用官方号,不需要管。务必加 /v1
      - OPENAI_BASE_URL=https://api.openai.com/v1
      - CHAT_API_KEY=sk-xxxx
      - DB_MAX_LINK=5 # database max link
      - TOKEN_KEY=any
      - ROOT_KEY=root_key
      - FILE_TOKEN_KEY=filetoken
      # mongo 配置,不需要改. 如果连不上,可能需要去掉 ?authSource=admin
      - MONGODB_URI=mongodb://username:password@mongo:27017/fastgpt?authSource=admin
      # pg配置. 不需要改
      - PG_URL=postgresql://username:password@pg:5432/postgres
    volumes:
      - ./config.json:/app/data/config.json
networks:
  fastgpt:
# host 版本, 不推荐。
# version: '3.3'
# services:
#   pg:
#   image: ankane/pgvector:v0.5.0 # dockerhub
#   # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.5.0 # 阿里云
#   container_name: pg
#   restart: always
#   ports: # 生产环境建议不要暴露
#       - 5432:5432
#   environment:
#       # 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
#       - POSTGRES_USER=username
#       - POSTGRES_PASSWORD=password
#       - POSTGRES_DB=postgres
#   volumes:
#       - ./pg/data:/var/lib/postgresql/data
#   mongo:
#   image: mongo:5.0.18
#   # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里云
#   container_name: mongo
#   restart: always
#   ports: # 生产环境建议不要暴露
#       - 27017:27017
#   environment:
#       # 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
#       - MONGO_INITDB_ROOT_USERNAME=username
#       - MONGO_INITDB_ROOT_PASSWORD=password
#   volumes:
#       - ./mongo/data:/data/db
#       - ./mongo/logs:/var/log/mongodb
#   fastgpt:
#   # image: ghcr.io/labring/fastgpt:latest # github
#   image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:latest # 阿里云
#   network_mode: host
#   restart: always
#   container_name: fastgpt
#   environment:
#       # root 密码,用户名为: root
#       - DEFAULT_ROOT_PSW=1234
#       # 中转地址,如果是用官方号,不需要管
#       - OPENAI_BASE_URL=https://api.openai.com/v1
#       - CHAT_API_KEY=sk-xxxx
#       - DB_MAX_LINK=5 # database max link
#       # token加密凭证(随便填,作为登录凭证)
#       - TOKEN_KEY=any
#       # root key, 最高权限,可以内部接口互相调用
#       - ROOT_KEY=root_key
#       # mongo 配置,不需要改
#       - MONGODB_URI=mongodb://username:password@0.0.0.0:27017/fastgpt?authSource=admin
#       # pg配置. 不需要改
#       - PG_URL=postgresql://username:password@0.0.0.0:5432/postgres

chatglm3-6b部署

使用chatglm3-6b的一键启动包

img

m3e-large-api 部署

用docker部署m3e模型,默认用CPU运行:

docker run -d -p 6008:6008 --name=m3e-large-api
registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api:latest

使用GPU运行: docker run -d -p 6008:6008 --gpus all --name=m3e-large-api registry.cn-hangzhou.aliyuncs.com/fastgpt_docker/m3e-large-api:latest

原镜像:

docker run -d -p 6200:6008 --name=m3e-large-api stawky/m3e-large-api:latest

启动完成后测试m3e是否启动成功

测试m3e的api:

curl --location --request POST '
https://localhost:6008/v1/embeddings' \ --header 'Authorization: Bearer sk-aaabbbcccdddeeefffggghhhiiijjjkkk' \ --header 'Content-Type: application/json' \ --data-raw '{ "model": "m3e", "input": ["laf是什么"] }'

启动oneAPI并配置

oneAPI的启动方式有好多种,可以

使用docker部署

源码部署

exe启动

我这里使用exe的方式启动

配置模型渠道

chatglm

m3e

配置令牌

启动fastGPT

配置文件修改

fastgpt 我使用源码的方式启动。这里需要修改几点配置文件

以下文件均在 projects/app 路径下。

环境变量

复制.env.template文件,在同级目录下生成一个.env.local 文件,修改.env.local 里内容才是有效的变量。变量说明见 .env.template

config 配置文件

复制 data/config.json 文件,生成一个 data/config.local.json 配置文件

修改config文件ChatModels:
{
"model": "chatglm3",
"name": "chatglm3",
"maxContext": 4000,
"maxResponse": 4000,
"quoteMaxToken": 2000,
"maxTemperature": 1,
"vision": false,
"defaultSystemChatPrompt": ""
},
ChatGLM3-6B支持的上下文长度为8k,你可以将maxContext和maxResponse改为8000
可以在defaultSystemChatPrompt里设置你的系统默认提示词
修改config文件QAModels:
{
"model": "chatglm3",
"name": "chatglm3",
"maxContext": 4000,
"maxResponse": 4000,
"price": 0
}
修改config文件VectorModels:
{
"model": "m3e",
"name": "m3e",
"price": 0.1,
"defaultToken": 500,
"maxToken": 1800
}
QAModels和VectorModels都添加好后,记得在括号的前面加个英文逗号,不然config文件无法生效

具体文件参考

.env.local文件

LOG_DEPTH=3
# 默认用户密码,用户名为 root,每次重启时会自动更新。
DEFAULT_ROOT_PSW=123456
# 数据库最大连接数
DB_MAX_LINK=5
# token
TOKEN_KEY=dfdasfdas
# 文件阅读时的秘钥
FILE_TOKEN_KEY=filetokenkey
# root key, 最高权限
ROOT_KEY=fdafasd
# openai 基本地址,可用作中转。
OPENAI_BASE_URL=http://localhost:3000/v1
# oneapi 地址,可以使用 oneapi 来实现多模型接入
# ONEAPI_URL=https://xxxx.cloud.sealos.io/openai/v1
# 通用key。可以是 openai 的也可以是 oneapi 的。
# 此处逻辑:优先走 ONEAPI_URL,如果填写了 ONEAPI_URL,key 也需要是 ONEAPI 的 key
CHAT_API_KEY=sk-2Vbi3QisXYDzQyE6D5EfF27f0d08407b868dF6845a7bD9C5
# mongo 数据库连接参数
MONGODB_URI=mongodb://username:password@10.10.0.10:27017/fastgpt?authSource=admin
# PG 数据库连接参数
PG_URL=postgresql://username:password@10.10.0.10:5432/postgres
# 首页路径
HOME_URL=/
# Loki Log Path
# LOKI_LOG_URL=

config.local.json

{
  "systemEnv": {
    "pluginBaseUrl": "",
    "vectorMaxProcess": 15,
    "qaMaxProcess": 15,
    "pgHNSWEfSearch": 100
  },
  "chatModels": [
    {
      "model": "gpt-3.5-turbo",
      "name": "GPT35",
      "price": 0,
      "maxContext": 4000,
      "maxResponse": 4000,
      "quoteMaxToken": 2000,
      "maxTemperature": 1.2,
      "censor": false,
      "vision": false,
      "defaultSystemChatPrompt": ""
    },
    {
      "model": "chatglm3",
      "name": "chatglm3",
      "maxContext": 4000,
      "maxResponse": 4000,
      "quoteMaxToken": 2000,
      "maxTemperature": 1,
      "vision": false,
      "defaultSystemChatPrompt": ""
    },
    {
      "model": "gpt-3.5-turbo-16k",
      "name": "GPT35-16k",
      "maxContext": 16000,
      "maxResponse": 16000,
      "price": 0,
      "quoteMaxToken": 8000,
      "maxTemperature": 1.2,
      "censor": false,
      "vision": false,
      "defaultSystemChatPrompt": ""
    },
    {
      "model": "gpt-4",
      "name": "GPT4-8k",
      "maxContext": 8000,
      "maxResponse": 8000,
      "price": 0,
      "quoteMaxToken": 4000,
      "maxTemperature": 1.2,
      "censor": false,
      "vision": false,
      "defaultSystemChatPrompt": ""
    },
    {
      "model": "gpt-4-vision-preview",
      "name": "GPT4-Vision",
      "maxContext": 128000,
      "maxResponse": 4000,
      "price": 0,
      "quoteMaxToken": 100000,
      "maxTemperature": 1.2,
      "censor": false,
      "vision": true,
      "defaultSystemChatPrompt": ""
    }
  ],
  "qaModels": [
    {
      "model": "gpt-3.5-turbo-16k",
      "name": "GPT35-16k",
      "maxContext": 16000,
      "maxResponse": 16000,
      "price": 0
    },
    {
      "model": "chatglm3",
      "name": "chatglm3",
      "maxContext": 4000,
      "maxResponse": 4000,
      "price": 0
    }
  ],
  "cqModels": [
    {
      "model": "gpt-3.5-turbo",
      "name": "GPT35",
      "maxContext": 4000,
      "maxResponse": 4000,
      "price": 0,
      "toolChoice": true,
      "functionPrompt": ""
    },
    {
      "model": "gpt-4",
      "name": "GPT4-8k",
      "maxContext": 8000,
      "maxResponse": 8000,
      "price": 0,
      "toolChoice": true,
      "functionPrompt": ""
    }
  ],
  "extractModels": [
    {
      "model": "gpt-3.5-turbo-1106",
      "name": "GPT35-1106",
      "maxContext": 16000,
      "maxResponse": 4000,
      "price": 0,
      "toolChoice": true,
      "functionPrompt": ""
    }
  ],
  "qgModels": [
    {
      "model": "gpt-3.5-turbo-1106",
      "name": "GPT35-1106",
      "maxContext": 1600,
      "maxResponse": 4000,
      "price": 0
    }
  ],
  "vectorModels": [
    {
      "model": "text-embedding-ada-002",
      "name": "Embedding-2",
      "price": 0.2,
      "defaultToken": 700,
      "maxToken": 3000,
      "weight": 100
    },
    {
      "model": "m3e",
      "name": "m3e",
      "price": 0.1,
      "defaultToken": 500,
      "maxToken": 1800
    }
  ],
  "reRankModels": [],
  "audioSpeechModels": [
    {
      "model": "tts-1",
      "name": "OpenAI TTS1",
      "price": 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",
    "price": 0
  }
}

程序启动

环境要求

  • Node.js v18.x (LTS) 以上

  • pnpm 版本 8.x.x 以上

进入到projects/app 目录下

# 代码根目录下执行,会安装根 package、projects 和 packages 内所有依赖
pnpm i
# 切换到应用目录
cd projects/app
# 开发模式运行
pnpm dev

访问http://localhost:3001/ 进行登录 用户 root 密码是123456

创建知识库

导入文件

开始对话

收工‍‍‍

赞(0) 更多分享

上篇: fastgpt+oneapi实现大模型整合
下篇: 使用 Docker 快速上手官方版 LLaMA2 开源大模型