当前位置: 代码网 > it编程>开发工具>Docker > 保姆级教程:FastGPT构建个人本地知识库(Docker compose快速部署)

保姆级教程:FastGPT构建个人本地知识库(Docker compose快速部署)

2024年07月28日 Docker 我要评论
FastGPT构建个人知识库,使用Docker compose部署

在数字化时代,拥有一个个人知识库成为了许多技术爱好者的新追求。为了满足这一需求,我特别编写了一篇简明易懂的教程,旨在指导您如何使用fastgpt和docker compose来构建您自己的本地知识库。这篇“保姆级”教程,将引导您轻松完成这一任务。

教程概述

本教程的核心焦点在于简化部署过程。我们将通过docker compose这一强大工具,快速搭建fastgpt驱动的知识库。然而,需要注意的是,教程更多地关注于部署操作本身,而非fastgpt的深入原理探讨。因此,如果您对fastgpt的工作机制和技术细节感兴趣,我强烈建议查阅官方文档进行更深入的学习。fastgpt 是一个基于 llm 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 flow 可视化进行工作流编排,从而实现复杂的问答场景!

什么是知识库

在这里插入图片描述
知识库核心流程图
在这里插入图片描述

一、windows下部署

1.安装docker desktop

我们建议将源代码和其他数据绑定到 linux 容器中时,将其存储在 linux 文件系统中,而不是 windows 文件系统中。

2.创建目录并下载docker-compose.yml

新建fastgpt文件夹
在这里插入图片描述
新建文件config.json、docker-compose.yml
在这里插入图片描述

3.启动容器

以管理员身份运行cmd,并进入fastgpt目录

# 在 docker-compose.yml 同级目录下执行
docker-compose pull
docker-compose up -d

在这里插入图片描述

4.访问 fastgpt

目前可以通过 localhost:3000 直接访问(注意防火墙)。登录用户名为 root,密码为docker-compose.yml环境变量里设置的 default_root_psw。

二、linux下部署

1.安装docker和docker-compose

# 安装 docker
curl -fssl https://get.docker.com | bash -s docker --mirror aliyun
systemctl enable --now docker
# 安装 docker-compose
curl -l https://github.com/docker/compose/releases/download/2.20.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
# 验证安装
docker -v
docker-compose -v
# 如失效,自行百度~

2.创建目录并下载 docker-compose.yml

# 创建目录
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

3.启动容器

# 在 docker-compose.yml 同级目录下执行
docker-compose pull
docker-compose up -d

4.访问 fastgpt

目前可以通过 localhost:3000 直接访问(注意防火墙)。登录用户名为 root,密码为docker-compose.yml环境变量里设置的 default_root_psw。

三、配置文件

docker-compose.yml

# 需要修改
# 中转地址,如果是用官方号,不需要管。务必加 /v1
openai_base_url=https://api.openai.com/v1
# api-key
chat_api_key=sk-xxxx
# 数据库的默认账号和密码仅首次运行时设置有效
# 如果修改了账号密码,记得改数据库和项目连接参数,别只改一处~
# 该配置文件只是给快速启动,测试使用。正式使用,记得务必修改账号密码,以及调整合适的知识库参数,共享内存等。
# 如何无法访问 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:v4.8.4 # git
    # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.8.4 # 阿里云
    networks:
      - fastgpt
    restart: always
  fastgpt:
    container_name: fastgpt
    image: ghcr.io/labring/fastgpt:v4.8.4 # git
    # image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.4 # 阿里云
    ports:
      - 3000: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
    volumes:
      - ./config.json:/app/data/config.json

  # oneapi
  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
    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

{
  "systemenv": {
    "openapiprefix": "fastgpt",
    "vectormaxprocess": 15,
    "qamaxprocess": 15,
    "pghnswefsearch": 100
  },
  "chatmodels": [
    {
      "model": "gpt-3.5-turbo",
      "name": "gpt35",
      "inputprice": 0,
      "outputprice": 0,
      "maxcontext": 4000,
      "maxresponse": 4000,
      "quotemaxtoken": 2000,
      "maxtemperature": 1.2,
      "censor": false,
      "vision": false,
      "defaultsystemchatprompt": ""
    },
    {
      "model": "gpt-3.5-turbo-16k",
      "name": "gpt35-16k",
      "maxcontext": 16000,
      "maxresponse": 16000,
      "inputprice": 0,
      "outputprice": 0,
      "quotemaxtoken": 8000,
      "maxtemperature": 1.2,
      "censor": false,
      "vision": false,
      "defaultsystemchatprompt": ""
    },
    {
      "model": "gpt-4",
      "name": "gpt4-8k",
      "maxcontext": 8000,
      "maxresponse": 8000,
      "inputprice": 0,
      "outputprice": 0,
      "quotemaxtoken": 4000,
      "maxtemperature": 1.2,
      "censor": false,
      "vision": false,
      "defaultsystemchatprompt": ""
    },
    {
      "model": "gpt-4-vision-preview",
      "name": "gpt4-vision",
      "maxcontext": 128000,
      "maxresponse": 4000,
      "inputprice": 0,
      "outputprice": 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,
      "inputprice": 0,
      "outputprice": 0
    }
  ],
  "cqmodels": [
    {
      "model": "gpt-3.5-turbo",
      "name": "gpt35",
      "maxcontext": 4000,
      "maxresponse": 4000,
      "inputprice": 0,
      "outputprice": 0,
      "toolchoice": true,
      "functionprompt": ""
    },
    {
      "model": "gpt-4",
      "name": "gpt4-8k",
      "maxcontext": 8000,
      "maxresponse": 8000,
      "inputprice": 0,
      "outputprice": 0,
      "toolchoice": true,
      "functionprompt": ""
    }
  ],
  "extractmodels": [
    {
      "model": "gpt-3.5-turbo-1106",
      "name": "gpt35-1106",
      "maxcontext": 16000,
      "maxresponse": 4000,
      "inputprice": 0,
      "outputprice": 0,
      "toolchoice": true,
      "functionprompt": ""
    }
  ],
  "qgmodels": [
    {
      "model": "gpt-3.5-turbo-1106",
      "name": "gpt35-1106",
      "maxcontext": 1600,
      "maxresponse": 4000,
      "inputprice": 0,
      "outputprice": 0
    }
  ],
  "vectormodels": [
    {
      "model": "text-embedding-ada-002",
      "name": "embedding-2",
      "inputprice": 0,
      "outputprice": 0,
      "defaulttoken": 700,
      "maxtoken": 3000,
      "weight": 100
    }
  ],
  "rerankmodels": [],
  "audiospeechmodels": [
    {
      "model": "tts-1",
      "name": "openai tts1",
      "inputprice": 0,
      "outputprice": 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",
    "inputprice": 0,
    "outputprice": 0
  }
}

四、搭建知识库

1.创建知识库

在这里插入图片描述
默认使用gpt3.5的
在这里插入图片描述

2.导入文本,文档数据等

在这里插入图片描述

3.测试向量搜索

导入文档后可以对文本进行测试,0.8215代表文本和知识库的相似程度
在这里插入图片描述

4.创建知识库应用

在这里插入图片描述
选择需要关联的知识库
在这里插入图片描述

5.与知识库进行对话

在这里插入图片描述

五、one-api部署国内大模型

1. docker部署one api

在终端中输入相关命令
项目中的3000端口被占用,需要重新设定一个端口映射

docker run --name one-api -d --restart always -p 13000:3000 -e tz=asia/shanghai -v /home/ubuntu/data/one-api:/data justsong/one-api

命令详解

2.登入one api

根据设定的端口,在浏览器内输入localhost:13000
在这里插入图片描述
默认账号:root
默认密码:123456
第一次登陆需要重新设置8位密码。

3.创建渠道和令牌

添加新的渠道
在这里插入图片描述
阿里云的api-key
在这里插入图片描述
添加令牌
在这里插入图片描述

4.修改fastgpt内配置文件

config.json

 "chatmodels": [
	...
   {
       "model": "qwen-turbo",
       "name": "通义千问",
       "maxcontext": 8000,
       "maxresponse": 4000,
       "quotemaxtoken": 2000,
       "maxtemperature": 1,
       "vision": false,
       "defaultsystemchatprompt": ""
   }
   ...
   ]

docker-compose.yml

	# base_url为ip地址:13000
      - openai_base_url=http://*******:13000/v1
    # api-key点击令牌复制的key
      - chat_api_key=sk-7s1vo4akfcekfgq3fd35bf10c60244799c88ae40ca98fdf0

修改完成后执行指令

docker-compose pull
docker-compose up -d

在应用中可以选择对应的模型
在这里插入图片描述

六、总结

我非常鼓励所有读者亲自实践本教程,并与我分享您的体验。如果在实践过程中遇到任何挑战,或有任何疑问,欢迎在评论区留言。在这个平台上,我们可以共同探讨,解决遇到的问题,共同成长。

构建个人知识库不仅是一个技术挑战,更是一次学习和成长的旅程。本教程旨在为您铺平这条路,帮助您轻松起步。记得,在掌握基础之后,一定要查阅官方文档,深入理解背后的技术原理,这将对您的技术成长大有裨益。

期待看到您的实践成果,并期待在技术的道路上与您携手前行!


欢迎添加我的微信公众号:q1hang的ai学习小屋,分享aigc学习笔记与文章

在这里插入图片描述

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com