一個快速上手且極易部署的類ChatGPT開源應用,可接入 OPENAI API
或 通義千問API
開源地址: https://github.com/isnl/EsChat
大聲(偷偷)告訴你:通義千問有免費API額度可白嫖!!!
版本特性
- OPENAI 和 通義千問雙模型可選
- 支持暗黑主題 🌙
- 完美的移動端兼容 📱
- 打字機回復效果 ??
- 上下文對話支持,可創建多輪對話記錄
- 整段生成內容支持復制、代碼復制、代碼高亮
- 雙登錄模式:
- 1.關聯公眾號登錄(個人訂閱號即可) - 可實現公眾號引流
- 2.普通的授權碼登錄模式(手動分發授權碼)
- Lowdb 本地JSON數據庫
- 自定義調用次數及文本輸入上限
關于使用個人訂閱號實現網站授權登錄的具體技術方案可參考如下文章,非常詳細
https://juejin.cn/post/7234394174274158650
目錄
- 前置要求
- Node
.env
配置文件- 1.通義千問配置
- TY_API_KEY
- TY_MODEL
- 2.OPENAI相關配置
- GPT3_BASE_URL
- GPT3_API_KEY
- GPT3_MODEL
- 3.用戶配置及公眾號相關
- WECHAT_TOKEN
- JWT_SECRET_KEY
- MAX_LENGTH
- DAILY_LIMIT
- 網站登錄 - 公眾號二維碼存放路徑
- 1.通義千問配置
- 截圖展示
- 🏠 首頁
- 內容生成
- 保存為圖片
- 昵稱頭像修改
- 移動端兼容
- 技術棧
- 客戶端
- 服務端
- 目錄結構
- 客戶端
- 服務端
- 安裝部署
- 本地開發
- 本地構建
- Docker
- 常見問題
前置要求
Node
node
需要 ^16 || ^18 || ^19
版本(node >= 14
需要安裝 fetch polyfill),使用 nvm 可管理本地多個 node
版本
node -v
.env
配置文件
請參考 server/.env.example
文件,將配置項替換為實際值,并在相同目錄下保存為 .env
文件
以下 通義千問
和 OPENAI
二選一,默認優先取通義千問配置
1.通義千問配置
TY_API_KEY
- 必須:
true
- 描述: 用于訪問通義千問平臺的 apiKey。
TY_MODEL
- 必須:
false
- 默認值:
qw-max
- 描述: 指定要調用的通義千問大語言模型。若不設置,將使用默認值
qw-plus
。
2.OPENAI相關配置
GPT3_BASE_URL
- 必須:
false
- 默認值:
https://api.openai.com/v1
- 描述: gpt3服務的基礎URL。如無特殊需求,建議使用默認值。
GPT3_API_KEY
- 必須:
true
- 描述: openai平臺提供的 API 密鑰,用于訪問 gpt3 服務。
GPT3_MODEL
- 必須:
false
- 默認值:
gpt-3.5-turbo
- 描述: 指定使用的 gpt3 模型。如果不指定,系統將使用默認模型
gpt-3.5-turbo
。
3.用戶配置及公眾號相關
WECHAT_TOKEN
- 必須:
true
- 描述: 對應微信公眾號后臺設置的 token,可按需自定義。
JWT_SECRET_KEY
- 必須:
true
- 描述: 設置用于 jwt 鑒權的 secret key。
MAX_LENGTH
- 必須:
true
- 默認值:
2000
- 描述: 用戶允許的最大輸入字符長度。默認限制為 2000 字符。
DAILY_LIMIT
- 必須:
true
- 默認值:
20
- 描述: 每日調用接口的額度上限。默認設定為每日最多調用
20
次。
網站登錄 - 公眾號二維碼存放路徑
client/static/imgs/mp_qrcode.jpg
請注意,如果是 Docker
部署,則路徑如下
server/clientDist/static/imgs/mp_qrcode.jpg
截圖展示
🏠 首頁
內容生成
保存為圖片
昵稱頭像修改
移動端兼容


客戶端
Vue3
+ Element Plus
+ Pinia
+ Unocss
服務端
Express
+ Lowdb
目錄結構
客戶端
/src/assets
靜態資源
/src/components
公共組件
/src/hooks
公共hooks
/src/router
路由配置
/src/service
接口請求、響應攔截器
/src/stores
狀態管理
/src/utils
全局工具類
/src/views
頁面
服務端
/src/constant
常量
/src/lowdb
Lowdb本地數據庫及配置
user.ts
用戶數據庫配置users.json
用戶數據庫文件userServiceCall.ts
用戶調用記錄數據庫配置userServiceCall.json
用戶調用記錄數據庫文件
/src/routes
路由
wechat.ts
公眾號驗證、獲取驗證碼、登錄校驗home.ts
status 狀態校驗chat.ts
大模型對話user.ts
用戶信息相關
/src/store
node-cache配置,主要用于驗證碼的生成及校驗
/src/utils
工具類
.env.example
配置文件示例,請務必創建自己的 .env
文件
app.ts
應用入口,可配置端口、跨域等
安裝部署
本地開發
克隆項目
git clone git@github.com:isnl/EsChat.git
服務端
進入服務端根目錄
cd server
安裝依賴
npm install
參考 .env.example
,在服務端根目錄下新建 .env
文件,并配置環境變量
啟動服務端
npm run dev
客戶端
進入客戶端根目錄
cd client
安裝依賴
npm install
啟動客戶端
npm run dev
本地構建
客戶端構建
進入客戶端根目錄
cd client
執行構建命令
npm run build
此時會在服務端根目錄生成客戶端的構建產物 clientDist
服務端構建
進入服務端根目錄
cd server
執行構建命令
npm run build
此時會在服務端根目錄產生兩個構建產物 app.mjs
和 app.mjs.map
接下來使用如下命令啟動服務即可
npm start
當然,你也可以使用 pm2
來守護進程,防止進程被殺死
pm2 start npm --name ai -- start
Docker
docker pull webpeanut/eschatdocker run -d --name eschat \-p 3100:3100 \-e TY_API_KEY=YOUR_TY_API_KEY \-e TY_MODEL=qwen-turbo \-e WECHAT_TOKEN=YOUR_WECHAT_TOKEN \-e JWT_SECRET_KEY=YOUR_JWT_SECRET_KEY \-e MAX_LENGTH=2000 \-e DAILY_LIMIT=20 \webpeanut/eschat
如果你需要指定其他環境變量,請自行在上述命令中增加 -e 環境變量=環境變量值 來指定。
常見問題
Q
: 部署后為啥不是流式響應
A
: 檢查 nginx
配置
proxy_buffering off;
chunked_transfer_encoding on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
Q
: 授權碼登錄方式,授權碼在哪創建?
A
: /server/db/user.json
,openId
為授權碼字段,自行生成即可,長度和內容隨機,確保唯一性即可
{"openId": "nf71b7-nsh167-7n21b1","id": "poRElv1koxGkvYriOlM61","avatar": "E053","name": "GFN1E-ChatGPTer","createdAt": "2024-04-05 15:38:15"
}
Q
: 除了微信公眾號和授權碼登錄方式外,能不能讓用戶自己注冊賬號自行使用?
A
: 用戶相關模塊邏輯很清晰,自行開發注冊相關功能即可
Q
: 能不能給指定的用戶單獨設置每日調用次數和文本長度限制?
A
: 需要寫點代碼,將調用次數和文本長度字段存入數據庫中的用戶表里。在你使用的模型 chat 路由模塊(server/src/routes/chat/xxx
),先根據id獲取到用戶信息,再將調用次數和文本長度限制改為從用戶信息中獲取的方式即可
- process.env.MAX_LENGTH -> 用戶信息中的 MAX_LENGTH
- process.env.DAILY_LIMIT -> 用戶信息中的 DAILY_LIMIT
Q
: Docker部署,如何查看鏡像文件夾中的內容,例如查看數據庫?
A
: 要查看 Docker 鏡像中的內容,你可以通過以下步驟操作:
首先,使用以下命令列出本地的 Docker 鏡像:
docker images
找到你想要查看的鏡像的 REPOSITORY 和 TAG。
使用以下命令創建并啟動一個臨時容器,使得你能夠在其中查看鏡像中的文件內容:
docker run -it --rm webpeanut/eschat sh
這將創建并啟動一個新的容器,并進入容器的 shell 命令行界面。
在容器的命令行界面中,你可以使用標準的 Linux 命令來查看鏡像中的文件內容,例如 ls
命令來列出目錄中的文件。
通過以上步驟,你可以在容器中查看 Docker 鏡像中的文件內容。
Q
: 沒有服務器和域名怎么辦?
A
: 買!阿里云現在服務器價格新老用戶都很便宜
2核4G,5M固定帶寬,80G ESSD Entry盤一年只需要199
(企業用戶),2核2G,3M固定帶寬,40G ESSD Entry盤只需 99
(個人企業同享)
不是哥們,這價格你敢信!!! 最重要的是 續費同價
,這你受得了嗎!
當然,新用戶更優惠,.com域名 + 2核2G ECS包年
只需 99
,99
你買不了吃虧,買不了上當
阿里云-即刻上車