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

avatar
作者
猴君
阅读量:2

文章目录

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

教程概述

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

项目地址:https://doc.fastgpt.in/docs/intro/
在线体验地址:https://fastgpt.in

什么是知识库

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

一、Windows下部署

1.安装Docker Desktop

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

https://www.docker.com/products/personal/

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部署国内大模型

项目地址:https://github.com/songquanpeng/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 

命令详解

docker run: 这是 Docker 的主要命令之一,用于创建并启动一个新的容器。
–name one-api: 这个选项为即将运行的容器设置一个名字,这里名字被设为 one-api。这样做可以更容易地识别和引用容器。
-d: 这个选项表示容器将在“分离模式”下运行,意味着它会在后台运行。
–restart always: 这指定了容器的重启策略。在这里,always 意味着如果容器停止(无论是由于错误还是由于任何其他原因),它将自动重启。
-p 13000:3000: 这是端口映射。此设置将容器内的 3000 端口映射到宿主机的 13000 端口。这意味着宿主机的 13000 端口上的流量将被转发到容器的 3000 端口。
-e TZ=Asia/Shanghai: 这个选项设置了一个环境变量。在这里,它设置了容器的时区为 Asia/Shanghai。
-v /home/ubuntu/data/one-api:/data: 这是一个卷挂载。它将宿主机的 /home/ubuntu/data/one-api 目录挂载到容器内的 /data 目录。这允许在容器和宿主机之间共享数据。
justsong/one-api: 这是要运行的 Docker 镜像的名称。在这个例子中,它将从 Docker Hub(或者其他配置的注册中心)拉取名为 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学习笔记与文章

在这里插入图片描述

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!