決定了,將ChatGPTer開源!主打一個大模型人人可用。

一個快速上手且極易部署的類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
        • 網站登錄 - 公眾號二維碼存放路徑
  • 截圖展示
    • 🏠 首頁
    • 內容生成
    • 保存為圖片
    • 昵稱頭像修改
    • 移動端兼容
  • 技術棧
    • 客戶端
    • 服務端
  • 目錄結構
    • 客戶端
    • 服務端
  • 安裝部署
    • 本地開發
  • 本地構建
    • 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.mjsapp.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.jsonopenId 為授權碼字段,自行生成即可,長度和內容隨機,確保唯一性即可

{"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包年 只需 9999 你買不了吃虧,買不了上當

阿里云-即刻上車

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/15787.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/15787.shtml
英文地址,請注明出處:http://en.pswp.cn/web/15787.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

點云AABB、OBB包圍盒計算顯示

目錄 一、簡介 1)AABB包圍盒 2)OBB包圍盒 二、計算代碼 三、加載計算結果

什么是Promise

Promise 是 JavaScript 中的一個對象,用于處理異步操作。它代表了一個最終可能完成(也可能被拒絕)的異步操作及其結果值。Promise 對象用于更復雜的異步編程模式,包括使用 .then() 和 .catch() 鏈式調用來處理異步操作的結果。 P…

算法提高之區間最大公約數

算法提高之區間最大公約數 核心思想&#xff1a;線段樹 1.在區間上加一個數 差分 2.求一段區間的最gcd 求[l,r]的gcd 可以拆解為求**[1,l].sum(差分數組 求出來時l點的值)和[l1,r]**做gcd #include <iostream>#include <cstring>#include <algorithm>usi…

1738. 找出第 K 大的異或坐標值

1738. 找出第 K 大的異或坐標值 題目鏈接&#xff1a;1738. 找出第 K 大的異或坐標值 代碼如下&#xff1a; //列前綴異或和 //參考鏈接:https://leetcode.cn/problems/find-kth-largest-xor-coordinate-value/solutions/2790359/liang-chong-fang-fa-er-wei-qian-zhui-yi-68…

Docker數據卷(volume)

數據卷 數據卷是一個虛擬目錄&#xff0c;是容器內目錄與宿主機目錄之間映射的橋梁。&#xff08;容器內目錄與宿主機目錄對應的橋梁&#xff0c;修改宿主機對應的目錄&#xff0c;docker會映射到容器內部&#xff0c;相當于修改了容器內的&#xff0c;反之也一樣&#xff09;數…

利用英特爾 Gaudi 2 和至強 CPU 構建經濟高效的企業級 RAG 應用

檢索增強生成 (Retrieval Augmented Generation&#xff0c;RAG) 可將存儲在外部數據庫中的新鮮領域知識納入大語言模型以增強其文本生成能力。其提供了一種將公司數據與訓練期間語言模型學到的知識分開的方式&#xff0c;有助于我們在性能、準確性及安全隱私之間進行有效折衷。…

任推邦:實力強勁的APP推廣拉新平臺,號稱不扣量

任推邦簡介 任推邦是國內數一數二的項目分發平臺&#xff0c;也是一個不扣量的項目APP推廣拉新平臺&#xff0c;隸屬于聚名科技集團股份有限公司。聚名科技成立時間在2012年&#xff0c;是安徽省老牌互聯網企業&#xff0c;歷經11年的飛速發展&#xff0c;聚名科技成功布局打造…

小程序的這些知識你知道嗎?

一:導航傳參 無論是編程式還是聲明式導骯傳參都是在url?keyvalue&key1value1,無論是否是tabbar頁面. 對于回退頁面,沒辦法傳參. 這個參數是,跳轉到頁面的時候,跳轉到另一個頁面,這個頁面就是剛開始執行,等數據執行之后,觸發onload,傳遞的參數放在內存中,跳轉是內部底層觸…

云端力量:利用移動云服務器高效部署Spring Boot Web應用

文章目錄 一、移動云介紹二、移動云產品選擇三、體驗云主機ECS四、使用移動云服務器部署SpringBoot Web應用4.1移動云ECS安裝JDK4.2移動云ECS安裝MySQL4.3移動云ECS數據庫插入數據4.4移動云ECS部署Spring Boot Web應用 總結 一、移動云介紹 移動云是中國移動基于自研的先進技術…

Linux中常見的基本指令(上)

目錄 一、ls指令 1. ls 2. ls -l 3. ls -a 4.ls -F 二、qwd指令 三、cd指令 1. cd .. 2. cd / / / 3. cd ../ / / 4. cd ~ 5. cd - 五、mkdir指令 六、rmdir指令和rm指令 一、ls指令 語法 &#xff1a; ls [ 選項 ][ 目錄或文件 ] 。 功能 &#xff1a;對于目錄…

桶排序和基數排序

前言&#xff1a; 這篇文章&#xff0c;我們就來了解一些鮮為人知的排序&#xff0c;桶排序和基數排序。 桶排序&#xff1a; 桶排序的思想&#xff1a; 桶排序的思想就是把待排序的數盡量均勻地放到各個桶中&#xff0c;再對各個桶進行局部的排序&#xff0c;最后再按序將各…

AI Agent: Agent框架+7個實例

何謂Agent Agent 作為一種新興的人工智能技術&#xff0c;正在受到越來越多的關注。要說清楚什么是 Agent&#xff0c;先得看看人工智能的本質是什么。 人工智能這個名稱來自它試圖通過計算機程序或機器來模擬、擴展和增強人類智能的 一些方面。在這個定義中&#xff0c;“人…

C# WPF入門學習(四)—— 按鈕控件

上期介紹了WPF的實現架構和原理&#xff0c;之后我們開始來使用WPF來學習各種控件。 一、嘗試插入一個按鈕&#xff08;方法一&#xff09; 1. VS2019 在界面中&#xff0c;點擊工具欄中的視圖&#xff0c;在下拉菜單中選擇工具箱。 至于編譯器中的視圖怎么舒服怎么來布置&am…

Cocos Creator 幀動畫播放組件制作詳解

Cocos Creator 是一個強大的游戲開發工具&#xff0c;提供了豐富的功能和組件&#xff0c;其中幀動畫播放組件是游戲開發中常用的組件之一&#xff0c;通過幀動畫播放組件可以實現角色動畫、特效動畫等效果。本文將詳細介紹如何使用 Cocos Creator 制作幀動畫播放組件&#xff…

infoq學習筆記-云原生網關當道,三大主流廠商如何“競 技”?

注基礎組件的質量&#xff0c;這些基礎組件是用戶看不到的。這些組件包括代碼質量、自動化的CI/CD、端對端測試、混沌測試等。在APISIX中&#xff0c;我們內置了大 量的測試案例代碼&#xff0c;包括單元測試、E2E測試、混沌測試&#xff0c;以及一些基準測試等&#xff0c;從而…

沈陽師范大學文學院副教授傅贏

女&#xff0c;生于1971年6月&#xff0c;遼寧遼陽人&#xff0c;1995年6月畢業于沈陽師范學院中文系漢語言文學教育專業&#xff0c;2000年6月于東北師范大學獲中國現當代文學專業文學碩士學位&#xff0c;現為文學院漢語國際教育專業教師&#xff0c;副教授。 主要從事對外漢…

藍橋杯練習系統(算法訓練)ALGO-934 序列

資源限制 內存限制&#xff1a;256.0MB C/C時間限制&#xff1a;1.0s Java時間限制&#xff1a;3.0s Python時間限制&#xff1a;5.0s 問題描述 王神想要知道n的所有排列的逆序對數和&#xff0c;但是他覺得太水了&#xff0c;于是讓你算。 輸入格式 一行一個整數n 輸…

random和range

含義&#xff1a; random(1&#xff0c;10) 不包含10&#xff0c;用于生成隨機數。它可以生成浮點數或整數&#xff0c;取決于具體的使用方式。 range(0&#xff0c;1) 不包含1&#xff0c;用于生成一個整數序列。它可以生成一個指定范圍內的連續整數序列。 區別在于&#x…

Linux:Linux系統項目配置

linux高級 軟件安裝 rpm(redhat package manager)安裝 軟件已經按照redhat的包管理規范進行打包,使用rpm命令進行安裝,但包之間可能有依賴關系,因此不能自行解決庫依賴問題,比較麻煩 yum安裝 一種在線軟件安裝方式,本質上還是rpm安裝,自動下載安裝包并安裝,安裝過程中自動…

【MySQL精通之路】SQL優化(1)-查詢優化(23)-避免全表掃描

當MySQL使用全表掃描來解析查詢時&#xff0c;EXPLAIN的輸出在type列中顯示ALL。 這種情況通常發生在以下情況下&#xff1a; 該表非常小&#xff0c;因此執行全表掃描比查找關鍵字更快。這對于少于10行且行長較短的表來說很常見。 對于索引列&#xff0c;ON或WHERE子句中沒有…