From 02abe42afe6310b026673081bd95724a62398ec5 Mon Sep 17 00:00:00 2001 From: archer <545436317@qq.com> Date: Thu, 20 Apr 2023 09:49:35 +0800 Subject: [PATCH] feat: docs --- .env.template | 31 ++- README.md | 252 ++++++++++++++---------- docs/imgs/KBProcess.jpg | Bin 0 -> 70614 bytes src/pages/api/chat/vectorGpt.ts | 4 +- src/pages/api/openapi/chat/vectorGpt.ts | 4 +- 5 files changed, 177 insertions(+), 114 deletions(-) create mode 100644 docs/imgs/KBProcess.jpg diff --git a/.env.template b/.env.template index c2fbae06c..b186b07e3 100644 --- a/.env.template +++ b/.env.template @@ -1,13 +1,24 @@ +# proxy AXIOS_PROXY_HOST=127.0.0.1 AXIOS_PROXY_PORT_FAST=7890 AXIOS_PROXY_PORT_NORMAL=7890 -MONGODB_URI=mongodb://username:password@0.0.0.0:27017/?authSource=admin&readPreference=primary&appname=MongoDB%20Compass&ssl=false -MY_MAIL=11111111@qq.com -MAILE_CODE=sdasadasfasfad -aliAccessKeyId=阿里云keyid -aliAccessKeySecret=阿里云keysecret -aliSignName=短信签名 -aliTemplateCode=SMS_号 -TOKEN_KEY=sssssssss -OPENAIKEY=sk-afadfadfadfsd -REDIS_URL=redis://default:password@0.0.0.0:8100 \ No newline at end of file +queueTask=1 +# email +MY_MAIL=xxx@qq.com +MAILE_CODE=xxx +# ali ems +aliAccessKeyId=xxx +aliAccessKeySecret=xxx +aliSignName=xxx +aliTemplateCode=SMS_xxx +# token +TOKEN_KEY=xxx +# openai +OPENAIKEY=sk-xxx +# db +MONGODB_URI=mongodb://username:password@0.0.0.0:27017/test?authSource=admin +PG_HOST=0.0.0.0 +PG_PORT=8100 +PG_USER=xxx +PG_PASSWORD=xxx +PG_DB_NAME=xxx \ No newline at end of file diff --git a/README.md b/README.md index 1b407b4b6..01a23a714 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,40 @@ # Fast GPT -Fast GPT 允许你使用自己的 openai API KEY 来快速的调用 openai 接口,包括 GPT3 及其微调方法,以及最新的 gpt3.5 接口。 +Fast GPT 允许你使用自己的 openai API KEY 来快速的调用 openai 接口,目前集成了 gpt35 和 embedding. 可构建自己的知识库。 + +## 知识库原理 +![KBProcess](docs/imgs/KBProcess.jpg?raw=true "KBProcess") ## 开发 复制 .env.template 成 .env.local ,填写核心参数 -``` -AXIOS_PROXY_HOST=axios代理地址,目前 openai 接口都需要走代理,本机的话就填 127.0.0.1 -AXIOS_PROXY_PORT_FAST=代理端口1,clash默认为7890 -AXIOS_PROXY_PORT_NORMAL=代理端口2 -MONGODB_URI=mongo数据库地址 -MY_MAIL=发送验证码邮箱 -MAILE_CODE=邮箱秘钥(代理里设置的是QQ邮箱,不知道怎么找这个 code 的,可以百度搜"nodemailer发送邮件") -TOKEN_KEY=随便填一个,用于生成和校验 token -OPENAIKEY=openai的key -REDIS_URL=redis的地址 +```bash +# proxy(不需要代理可忽略) +AXIOS_PROXY_HOST=127.0.0.1 +AXIOS_PROXY_PORT_FAST=7890 +AXIOS_PROXY_PORT_NORMAL=7890 +queueTask=1 +# email,参考 nodeMail 获取参数 +MY_MAIL=xxx@qq.com +MAILE_CODE=xxx +# 阿里短信服务 +aliAccessKeyId=xxx +aliAccessKeySecret=xxx +aliSignName=xxx +aliTemplateCode=SMS_xxx +# token(随便填,登录凭证) +TOKEN_KEY=xxx +# openai key +OPENAIKEY=sk-xxx +# mongo连接地址 +MONGODB_URI=mongodb://username:password@0.0.0.0:27017/test?authSource=admin +MONGODB_NAME=xxx # mongo数据库名称 +# pg 数据库相关内容,和 docker-compose 对上 +PG_HOST=0.0.0.0 +PG_PORT=8102 +PG_USER=xxx +PG_PASSWORD=xxx +PG_DB_NAME=xxx ``` ```bash pnpm dev @@ -22,25 +42,21 @@ pnpm dev ## 部署 -### docker 模式 -请准备好 docker, mongo,代理, 和 nginx。 镜像走本机的代理,所以用 network=host,port 改成代理的端口,clash 一般都是 7890。 - -#### docker 打包 -```bash -docker build -t imageName:tag . -docker push imageName:tag -# 或者直接拉镜像,见下方 -``` - -#### 软件教程:docker 安装 +### 安装 docker 和 docker-compose +这个不同系统略有区别,百度安装下。验证安装成功后进行下一步。下面给出一个例子: ```bash # 安装docker -curl -sSL https://get.daocloud.io/docker | sh +curl -L https://get.daocloud.io/docker | sh sudo systemctl start docker # 安装 docker-compose +curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose +sudo chmod +x /usr/local/bin/docker-compose +# 验证安装 +docker -v +docker-compose -v ``` -#### 软件教程: clash 代理 +### 安装 clash 代理(选) ```bash # 下载包 curl https://glados.rocks/tools/clash-linux.zip -o clash.zip @@ -71,72 +87,38 @@ nohup ./clash-linux-amd64-v1.10.0 -d ./ & echo "Restart clash" ``` -#### 文件创建 -**yml文件** -```yml -version: "3.3" -services: - fast-gpt: - image: c121914yu/fast-gpt:latest - environment: - AXIOS_PROXY_HOST: 127.0.0.1 - AXIOS_PROXY_PORT: 7890 - MY_MAIL: 11111111@qq.com - MAILE_CODE: sdasadasfasfad - TOKEN_KEY: sssssssss - MONGODB_URI: mongodb://username:password@0.0.0.0:27017/?authSource=admin&readPreference=primary&appname=MongoDB%20Compass&ssl=false - OPENAIKEY: sk-afadfadfadfsd - REDIS_URL: redis://default:password@0.0.0.0:8100 - network_mode: host - restart: always - container_name: fast-gpt - mongodb: - image: mongo:6.0.4 - container_name: mongo - restart: always - environment: - - MONGO_INITDB_ROOT_USERNAME=root - - MONGO_INITDB_ROOT_PASSWORD=ROOT_1234 - - MONGO_DATA_DIR=/data/db - - MONGO_LOG_DIR=/data/logs - volumes: - - /root/fastgpt/mongo/data:/data/db - - /root/fastgpt/mongo/logs:/data/logs - ports: - - 27017:27017 - nginx: - image: nginx:alpine3.17 - container_name: nginx - restart: always - network_mode: host - ports: - - "80:80" - volumes: - - /root/fastgpt/nginx/nginx.conf:/etc/nginx/nginx.conf:ro - redis-stack: - image: redis/redis-stack:6.2.6-v6 - container_name: redis-stack - restart: unless-stopped - ports: - - "8100:6379" - - "8101:8001" - environment: - - REDIS_ARGS=--requirepass psw1234 - volumes: - - /etc/localtime:/etc/localtime:ro - - /root/fastgpt/redis/redis.conf:/redis.conf - - /root/fastgpt/redis/data:/data +### 本地 docker 打包 +```bash +docker build -t imageName:tag . +docker push imageName:tag +# 或者直接拉镜像,见下方 ``` -**redis.conf** + +### 准备初始化文件 +**/root/fast-gpt/pg/init.sql** +```sql +#!/bin/bash +set -e +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL + +CREATE EXTENSION vector; +-- init table +CREATE TABLE modelData ( + id BIGSERIAL PRIMARY KEY, + vector VECTOR(1536), + status VARCHAR(50) NOT NULL, + user_id VARCHAR(50) NOT NULL, + model_id VARCHAR(50) NOT NULL, + q TEXT NOT NULL, + a TEXT NOT NULL +); +-- create index +CREATE INDEX modelData_status_index ON modelData (status); +CREATE INDEX modelData_modelId_index ON modelData (modelId); +CREATE INDEX modelData_userId_index ON modelData (userId); +EOSQL ``` -## 开启aop持久化 -appendonly yes -#default: 持久化文件 -appendfilename "appendonly.aof" -#default: 每秒同步一次 -appendfsync everysec -``` -**nginx.conf** +**/root/fast-gpt/nginx/nginx.conf** ```conf user nginx; worker_processes auto; @@ -169,9 +151,9 @@ http { server { listen 443 ssl; - server_name fastgpt.ahapocket.cn; - ssl_certificate /ssl/fastgpt.pem; - ssl_certificate_key /ssl/fastgpt.key; + server_name docgpt.ahapocket.cn; + ssl_certificate /ssl/docgpt.pem; + ssl_certificate_key /ssl/docgpt.key; ssl_session_timeout 5m; location / { @@ -183,25 +165,91 @@ http { } server { listen 80; - server_name fastgpt.ahapocket.cn; + server_name docgpt.ahapocket.cn; rewrite ^(.*) https://$server_name$1 permanent; } } ``` - -#### 运行脚本 -**redis 初始化** -```bash -# 进入容器 -docker exec -it 容器ID bash -redis-cli -p 6379 -auth psw1234 -# 添加索引 -FT.CREATE idx:model:data:hash ON HASH PREFIX 1 model:data: SCHEMA modelId TAG userId TAG status TAG q TEXT text TEXT vector VECTOR FLAT 6 DIM 1536 DISTANCE_METRIC COSINE TYPE FLOAT32 +**/root/fast-gpt/docker-compose.yml** +```yml +version: "3.3" +services: + fast-gpt: + image: c121914yu/fast-gpt:latest + network_mode: host + restart: always + container_name: fast-gpt + environment: + # 代理(不需要代理,可去掉下面三个参数) + - AXIOS_PROXY_HOST=127.0.0.1 + - AXIOS_PROXY_PORT_FAST=7890 + - AXIOS_PROXY_PORT_NORMAL=7890 + # 邮箱 + - MY_MAIL=xxxx@qq.com + - MAILE_CODE=xxxx + # 阿里云短信 + - aliAccessKeyId=xxxx + - aliAccessKeySecret=xxxx + - aliSignName=xxxxx + - aliTemplateCode=SMS_xxxx + # 登录 key + - TOKEN_KEY=xxxx + # 是否开启队列任务。 1-开启,0-关闭(请求parentUrl去执行任务,单机时直接填1) + - queueTask=1 + - parentUrl=https://fastgpt.run/api/openapi/startEvents + # db + - MONGODB_URI=mongodb://username:passsword@0.0.0.0:27017/?authSource=admin + - MONGODB_NAME=xxx + - PG_HOST=0.0.0.0 + - PG_PORT=8100 + - PG_USER=xxx + - PG_PASSWORD=xxx + - PG_DB_NAME=xxx + # openai 账号 + - OPENAIKEY=sk-xxxxx + nginx: + image: nginx:alpine3.17 + container_name: nginx + restart: always + network_mode: host + volumes: + - /root/fast-gpt/nginx/nginx.conf:/etc/nginx/nginx.conf:ro + - /root/fast-gpt/nginx/logs:/var/log/nginx + - /root/fast-gpt/nginx/ssl/docgpt.key:/ssl/docgpt.key + - /root/fast-gpt/nginx/ssl/docgpt.pem:/ssl/docgpt.pem + pg: + image: ankane/pgvector + container_name: pg + restart: always + ports: + - 8100:5432 + environment: + - POSTGRES_USER=xxx + - POSTGRES_PASSWORD=xxx + - POSTGRES_DB=xxx + volumes: + - /root/fast-gpt/pg/data:/var/lib/postgresql/data + - /root/fast-gpt/pg/init.sql:/docker-entrypoint-initdb.d/init.sh + - /etc/localtime:/etc/localtime:ro + mongodb: + image: mongo:4.0.1 + container_name: mongo + restart: always + ports: + - 27017:27017 + environment: + - MONGO_INITDB_ROOT_USERNAME=username + - MONGO_INITDB_ROOT_PASSWORD=password + volumes: + - /root/fast-gpt/mongo/data:/data/db + - /root/fast-gpt/mongo/logs:/var/log/mongodb + - /etc/localtime:/etc/localtime:ro ``` +### 辅助运行脚本 **run.sh 运行文件** ```bash #!/bin/bash +docker-compose pull docker-compose up -d echo "Docker Compose 重新拉取镜像完成!" diff --git a/docs/imgs/KBProcess.jpg b/docs/imgs/KBProcess.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3cdcbcb8100a017124b51960546488595a34c4e8 GIT binary patch literal 70614 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

~w_T#7LgG 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 literal 0 HcmV?d00001 diff --git a/src/pages/api/chat/vectorGpt.ts b/src/pages/api/chat/vectorGpt.ts index 388a775bd..0524765a9 100644 --- a/src/pages/api/chat/vectorGpt.ts +++ b/src/pages/api/chat/vectorGpt.ts @@ -107,7 +107,9 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) prompts.unshift({ obj: 'SYSTEM', - value: `${model.systemPrompt} 知识库是最新的,下面是知识库内容:当前时间为${dayjs().format( + value: `${ + model.systemPrompt || '根据知识库内容回答' + } 知识库是最新的,下面是知识库内容:当前时间为${dayjs().format( 'YYYY/MM/DD HH:mm:ss' )}\n${systemPrompt}` }); diff --git a/src/pages/api/openapi/chat/vectorGpt.ts b/src/pages/api/openapi/chat/vectorGpt.ts index 27fbcc561..20a5ae6fc 100644 --- a/src/pages/api/openapi/chat/vectorGpt.ts +++ b/src/pages/api/openapi/chat/vectorGpt.ts @@ -126,7 +126,9 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) prompts.unshift({ obj: 'SYSTEM', - value: `${model.systemPrompt} 知识库是最新的,下面是知识库内容:当前时间为${dayjs().format( + value: `${ + model.systemPrompt || '根据知识库内容回答' + } 知识库是最新的,下面是知识库内容:当前时间为${dayjs().format( 'YYYY/MM/DD HH:mm:ss' )}\n${systemPrompt}` });