2023-02-13 08:07:34 -05:00
|
|
|
|
# ChatGPT Web
|
2023-02-13 06:30:26 -05:00
|
|
|
|
|
2023-02-22 01:43:55 -05:00
|
|
|
|
> 使用 `express` 和 `vue3` 搭建的支持 `ChatGPT` 双模型演示网页
|
2023-02-09 02:48:27 -05:00
|
|
|
|
|
2023-02-24 03:45:25 -05:00
|
|
|
|
![cover](./docs/c1.png)
|
|
|
|
|
![cover2](./docs/c2.png)
|
2023-02-09 02:48:27 -05:00
|
|
|
|
|
2023-02-22 01:43:55 -05:00
|
|
|
|
- [ChatGPT Web](#chatgpt-web)
|
|
|
|
|
- [介绍](#介绍)
|
|
|
|
|
- [待实现路线](#待实现路线)
|
|
|
|
|
- [前置要求](#前置要求)
|
|
|
|
|
- [Node](#node)
|
|
|
|
|
- [PNPM](#pnpm)
|
|
|
|
|
- [填写密钥](#填写密钥)
|
|
|
|
|
- [安装依赖](#安装依赖)
|
|
|
|
|
- [后端](#后端)
|
|
|
|
|
- [前端](#前端)
|
|
|
|
|
- [测试环境运行](#测试环境运行)
|
|
|
|
|
- [后端服务](#后端服务)
|
|
|
|
|
- [前端网页](#前端网页)
|
|
|
|
|
- [打包](#打包)
|
|
|
|
|
- [使用 Docker](#使用-docker)
|
|
|
|
|
- [Docker 参数示例](#docker-参数示例)
|
|
|
|
|
- [Docker build \& Run](#docker-build--run)
|
|
|
|
|
- [Docker compose](#docker-compose)
|
|
|
|
|
- [使用 Railway 部署](#使用-railway-部署)
|
|
|
|
|
- [Railway 环境变量](#railway-环境变量)
|
|
|
|
|
- [手动打包](#手动打包)
|
|
|
|
|
- [后端服务](#后端服务-1)
|
|
|
|
|
- [前端网页](#前端网页-1)
|
|
|
|
|
- [常见问题](#常见问题)
|
|
|
|
|
- [参与贡献](#参与贡献)
|
|
|
|
|
- [License](#license)
|
2023-02-21 02:26:23 -05:00
|
|
|
|
## 介绍
|
|
|
|
|
|
|
|
|
|
支持双模型,提供了两种非官方 `ChatGPT API` 方法
|
|
|
|
|
|
|
|
|
|
| 方式 | 免费? | 可靠性 | 质量 |
|
|
|
|
|
| ---- | ---- | ---- | ---- |
|
|
|
|
|
| `ChatGPTAPI(GPT-3)` | 否 | 可靠 | 较笨 |
|
|
|
|
|
| `ChatGPTUnofficialProxyAPI(网页 accessToken)` | 是 | 不可靠 | 聪明 |
|
|
|
|
|
|
|
|
|
|
***Note:*** 网页 `accessToken` 存在大约 8 小时,而且国内地区网络问题更推荐使用 `GPT-3` 的方式
|
|
|
|
|
|
|
|
|
|
对比:
|
|
|
|
|
1. `ChatGPTAPI` 使用 `text-davinci-003` 通过官方`OpenAI`补全`API`模拟`ChatGPT`(最稳健的方法,但它不是免费的,并且没有使用针对聊天进行微调的模型)
|
|
|
|
|
2. `ChatGPTUnofficialProxyAPI` 使用非官方代理服务器访问 `ChatGPT` 的后端`API`,绕过`Cloudflare`(使用真实的的`ChatGPT`,非常轻量级,但依赖于第三方服务器,并且有速率限制)
|
|
|
|
|
|
|
|
|
|
切换方式:
|
|
|
|
|
1. 进入 `service/.env` 文件
|
|
|
|
|
2. 使用 `OpenAI API Key` 请填写 `OPENAI_API_KEY` 字段 [(获取 apiKey)](https://platform.openai.com/overview)
|
|
|
|
|
3. 使用 `Web API` 请填写 `OPENAI_ACCESS_TOKEN` 字段 [(获取 accessToken)](https://chat.openai.com/api/auth/session)
|
|
|
|
|
4. 同时存在时以 `OpenAI API Key` 优先
|
|
|
|
|
|
|
|
|
|
反向代理:
|
|
|
|
|
|
|
|
|
|
`ChatGPTUnofficialProxyAPI`时可用 [详情](https://github.com/transitive-bullshit/chatgpt-api#reverse-proxy)
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
# service/.env
|
|
|
|
|
API_REVERSE_PROXY=
|
|
|
|
|
```
|
2023-02-13 08:07:34 -05:00
|
|
|
|
|
2023-02-13 06:09:34 -05:00
|
|
|
|
## 待实现路线
|
2023-02-21 02:26:23 -05:00
|
|
|
|
[✓] 双模型
|
|
|
|
|
|
2023-02-15 02:53:53 -05:00
|
|
|
|
[✓] 多会话储存和上下文逻辑
|
2023-02-11 21:34:51 -05:00
|
|
|
|
|
2023-02-15 02:53:53 -05:00
|
|
|
|
[✓] 对代码等消息类型的格式化美化处理
|
2023-02-13 03:29:51 -05:00
|
|
|
|
|
2023-02-15 02:53:53 -05:00
|
|
|
|
[✗] 界面多语言
|
2023-02-13 06:09:34 -05:00
|
|
|
|
|
2023-02-15 02:53:53 -05:00
|
|
|
|
[✗] 界面主题
|
2023-02-13 03:29:51 -05:00
|
|
|
|
|
2023-02-15 02:53:53 -05:00
|
|
|
|
[✗] More...
|
2023-02-13 03:29:51 -05:00
|
|
|
|
|
|
|
|
|
## 前置要求
|
|
|
|
|
|
|
|
|
|
### Node
|
|
|
|
|
|
2023-02-21 21:40:26 -05:00
|
|
|
|
`node` 需要 `^16 || ^18` 版本(`node >= 14` 需要安装 [fetch polyfill](https://github.com/developit/unfetch#usage-as-a-polyfill)),使用 [nvm](https://github.com/nvm-sh/nvm) 可管理本地多个 `node` 版本
|
2023-02-13 03:29:51 -05:00
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
node -v
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### PNPM
|
2023-02-11 21:34:51 -05:00
|
|
|
|
如果你没有安装过 `pnpm`
|
2023-02-09 03:48:21 -05:00
|
|
|
|
```shell
|
|
|
|
|
npm install pnpm -g
|
|
|
|
|
```
|
|
|
|
|
|
2023-02-21 02:26:23 -05:00
|
|
|
|
### 填写密钥
|
|
|
|
|
获取 `Openai Api Key` 或 `accessToken` 并填写本地环境变量 [跳转](#介绍)
|
|
|
|
|
|
2023-02-13 03:29:51 -05:00
|
|
|
|
```
|
|
|
|
|
# service/.env 文件
|
|
|
|
|
|
2023-02-21 02:26:23 -05:00
|
|
|
|
# OpenAI API Key - https://platform.openai.com/overview
|
|
|
|
|
OPENAI_API_KEY=
|
|
|
|
|
|
|
|
|
|
# change this to an `accessToken` extracted from the ChatGPT site's `https://chat.openai.com/api/auth/session` response
|
|
|
|
|
OPENAI_ACCESS_TOKEN=
|
2023-02-13 03:29:51 -05:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 安装依赖
|
|
|
|
|
|
|
|
|
|
> 为了简便 `后端开发人员` 的了解负担,所以并没有采用前端 `workspace` 模式,而是分文件夹存放。如果只需要前端页面做二次开发,删除 `service` 文件夹即可。
|
|
|
|
|
|
2023-02-22 01:43:55 -05:00
|
|
|
|
### 后端
|
2023-02-13 03:29:51 -05:00
|
|
|
|
|
|
|
|
|
进入文件夹 `/service` 运行以下命令
|
|
|
|
|
|
2023-02-09 02:57:39 -05:00
|
|
|
|
```shell
|
|
|
|
|
pnpm install
|
|
|
|
|
```
|
|
|
|
|
|
2023-02-22 01:43:55 -05:00
|
|
|
|
### 前端
|
2023-02-13 03:29:51 -05:00
|
|
|
|
根目录下运行以下命令
|
|
|
|
|
```shell
|
|
|
|
|
pnpm bootstrap
|
2023-02-09 02:57:39 -05:00
|
|
|
|
```
|
2023-02-13 03:29:51 -05:00
|
|
|
|
|
2023-02-21 02:26:23 -05:00
|
|
|
|
## 测试环境运行
|
2023-02-13 03:29:51 -05:00
|
|
|
|
### 后端服务
|
|
|
|
|
|
|
|
|
|
进入文件夹 `/service` 运行以下命令
|
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
pnpm start
|
2023-02-09 02:57:39 -05:00
|
|
|
|
```
|
|
|
|
|
|
2023-02-21 02:26:23 -05:00
|
|
|
|
### 前端网页
|
2023-02-13 03:29:51 -05:00
|
|
|
|
根目录下运行以下命令
|
2023-02-09 02:48:27 -05:00
|
|
|
|
```shell
|
2023-02-13 03:29:51 -05:00
|
|
|
|
pnpm dev
|
2023-02-09 02:57:39 -05:00
|
|
|
|
```
|
2023-02-09 02:48:27 -05:00
|
|
|
|
|
2023-02-13 03:29:51 -05:00
|
|
|
|
## 打包
|
2023-02-16 00:39:07 -05:00
|
|
|
|
|
2023-02-20 20:32:09 -05:00
|
|
|
|
### 使用 Docker
|
2023-02-21 02:26:23 -05:00
|
|
|
|
|
2023-02-21 21:40:26 -05:00
|
|
|
|
#### Docker 参数示例
|
2023-02-21 02:26:23 -05:00
|
|
|
|
|
|
|
|
|
- `OPENAI_API_KEY` 二选一
|
|
|
|
|
- `OPENAI_ACCESS_TOKEN` 二选一,同时存在时,`OPENAI_API_KEY` 优先
|
|
|
|
|
- `API_REVERSE_PROXY` 可选,设置 `OPENAI_ACCESS_TOKEN` 时可用 [参考](#介绍)
|
|
|
|
|
- `TIMEOUT_MS` 超时,单位毫秒,可选
|
|
|
|
|
|
|
|
|
|
![docker](./docs/docker.png)
|
|
|
|
|
|
2023-02-21 21:40:26 -05:00
|
|
|
|
#### Docker build & Run
|
2023-02-16 00:42:19 -05:00
|
|
|
|
|
2023-02-16 07:29:46 -05:00
|
|
|
|
```bash
|
|
|
|
|
docker build -t chatgpt-web .
|
2023-02-20 20:32:09 -05:00
|
|
|
|
|
|
|
|
|
# 前台运行
|
|
|
|
|
docker run --name chatgpt-web --rm -it -p 3002:3002 --env OPENAI_API_KEY=your_api_key chatgpt-web
|
|
|
|
|
|
|
|
|
|
# 后台运行
|
|
|
|
|
docker run --name chatgpt-web -d -p 3002:3002 --env OPENAI_API_KEY=your_api_key chatgpt-web
|
|
|
|
|
|
|
|
|
|
# 运行地址
|
|
|
|
|
http://localhost:3002/
|
2023-02-16 00:39:07 -05:00
|
|
|
|
```
|
|
|
|
|
|
2023-02-21 21:40:26 -05:00
|
|
|
|
#### Docker compose
|
2023-02-16 07:25:29 -05:00
|
|
|
|
|
2023-02-16 08:03:12 -05:00
|
|
|
|
[Hub 地址](https://hub.docker.com/repository/docker/chenzhaoyu94/chatgpt-web/general)
|
|
|
|
|
|
2023-02-16 07:25:29 -05:00
|
|
|
|
```yml
|
|
|
|
|
version: '3'
|
|
|
|
|
|
2023-02-16 21:57:06 -05:00
|
|
|
|
services:
|
2023-02-16 07:25:29 -05:00
|
|
|
|
app:
|
2023-02-16 21:57:06 -05:00
|
|
|
|
image: chenzhaoyu94/chatgpt-web:main
|
2023-02-16 07:25:29 -05:00
|
|
|
|
ports:
|
|
|
|
|
- 3002:3002
|
|
|
|
|
environment:
|
2023-02-21 02:26:23 -05:00
|
|
|
|
# 二选一
|
2023-02-16 07:25:29 -05:00
|
|
|
|
OPENAI_API_KEY: xxxxxx
|
2023-02-21 02:26:23 -05:00
|
|
|
|
# 二选一
|
|
|
|
|
OPENAI_ACCESS_TOKEN: xxxxxx
|
|
|
|
|
# 反向代理,可选
|
|
|
|
|
API_REVERSE_PROXY: xxx
|
|
|
|
|
# 超时,单位毫秒,可选
|
|
|
|
|
TIMEOUT_MS: 60000
|
2023-02-16 07:25:29 -05:00
|
|
|
|
```
|
|
|
|
|
|
2023-02-21 21:40:26 -05:00
|
|
|
|
### 使用 Railway 部署
|
|
|
|
|
|
|
|
|
|
[![Deploy on Railway](https://railway.app/button.svg)](https://railway.app/new/template/yytmgc)
|
|
|
|
|
|
2023-02-22 01:43:55 -05:00
|
|
|
|
#### Railway 环境变量
|
2023-02-21 21:40:26 -05:00
|
|
|
|
|
|
|
|
|
| 环境变量名称 | 必填 | 备注 |
|
|
|
|
|
| --------------------------- | ---- | ----------------------- |
|
|
|
|
|
| `PORT` | 必填 | 默认 `3002` |
|
|
|
|
|
| `TIMEOUT_MS` | 可选 | 超时时间,单位毫秒, |
|
|
|
|
|
| `OPENAI_API_KEY` | `OpenAI API` 二选一 | 使用 `OpenAI API` 所需的 `apiKey` [(获取 apiKey)](https://platform.openai.com/overview) |
|
|
|
|
|
| `OPENAI_ACCESS_TOKEN` | `Web API` 二选一 | 使用 `Web API` 所需的 `accessToken` [(获取 accessToken)](https://chat.openai.com/api/auth/session) |
|
|
|
|
|
| `API_REVERSE_PROXY` | 可选,`Web API` 时可用 | `Web API` 反向代理地址 [详情](https://github.com/transitive-bullshit/chatgpt-api#reverse-proxy) |
|
|
|
|
|
|
2023-02-22 01:43:55 -05:00
|
|
|
|
> 注意: `Railway` 修改环境变量会重新 `Deploy`
|
2023-02-21 21:40:26 -05:00
|
|
|
|
|
|
|
|
|
### 手动打包
|
|
|
|
|
#### 后端服务
|
2023-02-17 20:59:39 -05:00
|
|
|
|
> 如果你不需要本项目的 `node` 接口,可以省略如下操作
|
2023-02-16 07:29:46 -05:00
|
|
|
|
|
2023-02-20 20:32:09 -05:00
|
|
|
|
复制 `service` 文件夹到你有 `node` 服务环境的服务器上。
|
2023-02-17 20:59:39 -05:00
|
|
|
|
|
|
|
|
|
```shell
|
|
|
|
|
# 安装
|
|
|
|
|
pnpm install
|
|
|
|
|
|
|
|
|
|
# 打包
|
|
|
|
|
pnpm build
|
|
|
|
|
|
|
|
|
|
# 运行
|
|
|
|
|
pnpm prod
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
PS: 不进行打包,直接在服务器上运行 `pnpm start` 也可
|
|
|
|
|
|
2023-02-21 21:40:26 -05:00
|
|
|
|
#### 前端网页
|
2023-02-16 00:42:19 -05:00
|
|
|
|
|
2023-02-20 20:32:09 -05:00
|
|
|
|
1、修改根目录下 `.env` 内 `VITE_APP_API_BASE_URL` 为你的实际后端接口地址
|
|
|
|
|
|
|
|
|
|
2、根目录下运行以下命令,然后将 `dist` 文件夹内的文件复制到你网站服务的根目录下
|
2023-02-13 03:29:51 -05:00
|
|
|
|
|
2023-02-16 00:42:19 -05:00
|
|
|
|
[参考信息](https://cn.vitejs.dev/guide/static-deploy.html#building-the-app)
|
|
|
|
|
|
2023-02-09 02:57:39 -05:00
|
|
|
|
```shell
|
2023-02-13 03:29:51 -05:00
|
|
|
|
pnpm build
|
2023-02-09 02:48:27 -05:00
|
|
|
|
```
|
|
|
|
|
|
2023-02-21 21:40:26 -05:00
|
|
|
|
## 常见问题
|
2023-02-13 06:09:34 -05:00
|
|
|
|
Q: 为什么 `Git` 提交总是报错?
|
|
|
|
|
|
|
|
|
|
A: 因为有提交信息验证,请遵循 [Commit 指南](./CONTRIBUTING.md)
|
|
|
|
|
|
2023-02-13 03:29:51 -05:00
|
|
|
|
Q: 如果只使用前端页面,在哪里改请求接口?
|
|
|
|
|
|
|
|
|
|
A: 根目录下 `.env` 文件中的 `VITE_GLOB_API_URL` 字段。
|
|
|
|
|
|
2023-02-13 03:32:28 -05:00
|
|
|
|
Q: 文件保存时全部爆红?
|
2023-02-13 03:29:51 -05:00
|
|
|
|
|
2023-02-13 03:32:28 -05:00
|
|
|
|
A: `vscode` 请安装项目推荐插件,或手动安装 `Eslint` 插件。
|
2023-02-13 03:29:51 -05:00
|
|
|
|
|
2023-02-16 01:17:03 -05:00
|
|
|
|
## 参与贡献
|
|
|
|
|
|
|
|
|
|
贡献之前请先阅读 [贡献指南](./CONTRIBUTING.md)
|
|
|
|
|
|
|
|
|
|
感谢所有做过贡献的人!
|
|
|
|
|
|
|
|
|
|
<a href="https://github.com/Chanzhaoyu/chatgpt-web/graphs/contributors">
|
|
|
|
|
<img src="https://contrib.rocks/image?repo=Chanzhaoyu/chatgpt-web" />
|
|
|
|
|
</a>
|
|
|
|
|
|
2023-02-09 02:48:27 -05:00
|
|
|
|
## License
|
|
|
|
|
MIT © [ChenZhaoYu](./license)
|