当前位置:   article > 正文

Windows+WSL+Ubuntu+Docker-Desktop+FastGPT+m3e+oneapi+ChatGLM3部署本地AI知识库_wsl fastgpt

wsl fastgpt

1. windows wsl Ubuntu(略)

2. 安装docker-destktop并设置wsl(略)

3. 在ubuntu中操作:

  • 下载yml和json文件

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 修改yml文件,打开下载的docker-compose.yml文件,修改fastgpt端口为3200:3000(其中外部暴露端口3200可以任意)

  • 拉去镜像,这个过程稍微比较长,如果timeout,重新拉去,或者更改docker镜像源,如何修改请自行百度

    sudo docker-compose pull && sudo docker-compose up -d
    
    • 1
  • 手动初始化mongo(fastgpt 4.7版本不需要初始化,可以进入容器先查询)

    • 查看mongo容器是否正常运行

      sudo docker ps
      
      • 1
    • 进入容器

      sudo docker exec -it mongo bash	
      
      • 1
    • 链接数据库(这里需要填mongo用户名和密码)

      mongo -u myusername -p mypassword --authenticationDatabase admin	
      
      • 1
    • 直接查询初始化副本集的状态,如果提示rs0状态,则代表成功

      rs.status()	# 成功则退出
      exit()
      
      • 1
      • 2
  • 浏览器访问 http://localhost:3020 则可以访问fastgpt的页面,默认账号是 root,密码是 1234

4. 下载启动chatglm3的api服务

  • 下载文件和模型:

  • 修改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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
    • 双击启动02启动api.bat文件,启动完成之后就能看到使用的是http://0.0.0.0:8000,请勿关闭这个cmd窗口。

      注意:请勿使用右键管理员运行,会报错:The system cannot find the path specified.
      
      • 1

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
    
    • 1
  • 部署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
      
      • 1
    • 使用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
      
      • 1
    • 源镜像(推荐)

      sudo docker run -d -p 6008:6008 --gpus all --name=m3e-large-api stawky/m3e-large-api:latest
      
      • 1

      其中 --gpus all 是使用gpu来运行,此过程比较慢,等待部署完成

6. 配置oneapi

  • 运行并访问oneapi:访问 http://localhost:3000/ 并登录。初始账号用户名为 root,密码为 123456

  • 点击令牌,添加新的令牌 如图所示:

    在这里插入图片描述

  • 复制ChatGPT Next Web

    # 这是我的令牌
    https://app.nextchat.dev/#/?settings={"key":"sk-kuI2uEsxnJV8XgIN69493c7088D544Aa9b9d645d950e85F7","url":"http://localhost:3000"}
    # 其中key为:sk-kuI2uEsxnJV8XgIN69493c7088D544Aa9b9d645d950e85F7
    # url:http://localhost:3000
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

  • 通常一般教程会让大家去配置渠道,但是我们是用的windows wsl ubuntu 和docker-desktop,后续配置m3e渠道测试的时候会访问不通,会出现connect: 192.168.0.137:6008 connection refused(如图),所以我们需要重新配置docker-compose.yml

    在这里插入图片描述
    在这里插入图片描述

7. 重新配置docker-compose.yml和config.json

  • docker-compose.yml,其中OPENAI_BASE_URL无修修改就是用默认的http://oneapi:3000/v1CHAT_API_KEY为上面复制ChatGPT Next Webkey,还需要在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:
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146

    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
      }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
  • 保存之后在你的windows系统或者Ubuntu中运行以下代码:

    # windows
    docker-compose down && docker-compose pull && docker-compose up -d
    
    • 1
    • 2
    # Ubuntu
    sudo docker-compose down && sudo docker-compose pull && sudo docker-compose up -d
    
    • 1
    • 2

8. oneapi配置渠道

  • 访问 http://localhost:3000/ 并登录。初始账号用户名为 root,密码为 123456,点击渠道 并添加新渠道,如图:

    在这里插入图片描述

  • 添加chatglm3和m3e渠道,
    chatglm3渠道的默认key: sk-key
    m3e渠道的默认key:sk-aaabbbcccdddeeefffggghhhiiijjjkkk

    在这里插入图片描述
    在这里插入图片描述

  • 切记:Base Url后面的端口要是你docker或者api暴露端口,例如是m3e在docker run -p 6009:6008, 那么m3e模型的端口就是http://host.docker.internal:6009(只是举例)

  • 在渠道列表页面点击测试,其中m3e没有chat测试,所以返回404为正常。如图所示:

    在这里插入图片描述

9. fastgpt配置私有知识库

  • 打开浏览器访问 http://localhost:3020, 输入账号root,密码1234

  • 如图所示

    在这里插入图片描述

    这里的索引模型我们选择刚才添加的m3e,文件处理模型选择 chatglm3

    在这里插入图片描述

    我的示例文档是一个txt文件,所以我选择文本数据集

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    然后点击下一步,上传。上传之后你的文档会索引,这时候你开启的chatglm3的cmd窗口中会出现如图的训练代码,索引中你的显卡(因为之前m3e是显卡训练)占用率很高,直到训练完成,训练完成之后会出现下图的显示:

    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 知识库已就绪之后,创建聊天应用。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

这样我们就完成了整个部署。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/593748
推荐阅读
相关标签
  

闽ICP备14008679号