在数字化时代,拥有一个个人知识库成为了许多技术爱好者的新追求。为了满足这一需求,我特别编写了一篇简明易懂的教程,旨在指导您如何使用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学习笔记与文章
发表评论