- 可接入任何主流
OpendAI接口兼容的 AI 大语言模型 - 支持暗黑主题 🌙
- 完美的移动端兼容 📱
- 打字机回复效果 ⌨️
- 上下文对话支持,可创建多轮对话记录
- 自定义系统角色
- 整段生成内容支持复制、代码复制、代码高亮
- 双登录模式:
- 1.关联公众号登录(个人订阅号即可)
- 2.普通的授权码登录模式(手动分发授权码)
- 自定义调用次数及文本输入上限
- MongoDB 数据库
- 后台仪表盘:使用分析、用户概览、调用日历
- 用户管理
- 商业化-VIP 会员管理
- 商业化-VIP 用户卡密管理:生成、激活
- 生成内容分享管理,类似于百度网盘的链接分享,分享后其他用户可通过分享密码查看对话内容
- 分享内容
静态模板渲染,利于 SEO - 自定义系统角色、后台管理
- 内容分享管理、公告管理 、更新记录管理
- 接入模型管理
[!NOTE] > 具体关于使用微信公众号实现网站授权登录的技术方案可参考如下文章,非常详细 https://juejin.cn/post/7234394174274158650
node 需要 ^18 || ^19 || ^20 版本(14 <= node <= 18的需要安装 fetch polyfill)
可以通过如下命令查看自己本机的 node 版本
node -v
# v18.19.0使用 nvm 可管理本地多个 node 版本
Mac 用户可以使用 n 来管理 node 版本
brew install nEsChatPro 使用的是 MongoDB 数据库,关于 MongoDB 的安装,网络上有很多教程,这里就不赘述了。
配置文件请参考 server/.env.example 文件
在服务端 server 根目录中创建 .env 文件,并复制 .env.example 文件内容进行修改
详细配置信息如下:
- 必须:
true - 描述: 连接 MongoDB 数据库的 URI 地址
- 必须:
true - 描述: 设置用于用户登录 jwt 鉴权的 secret key。
- 必须:
false - 默认值:
2000 - 描述: 普通用户允许的最大输入字符长度。默认限制为 2000 字符。
- 必须:
false - 默认值:
20 - 描述: 普通用户每日调用接口的额度上限。默认设定为每日最多调用
20次。
- 必须:
false - 默认值:
10000 - 描述: VIP 用户允许的最大输入字符长度。默认限制为 10000 字符。
- 必须:
false - 默认值:
99 - 描述: VIP 用户每日调用接口的额度上限。默认设定为每日最多调用
99次。
- 必须:
false - 默认值:
5 - 描述: 普通用户分享内容数量上限。默认限制为 5 条。
- 必须:
true - 描述: 对应微信公众号后台设置的 token,可按需自定义。
client/static/imgs/mp_qrcode.jpg
请注意,如果是 Docker 部署,则路径如下
server/clientDist/static/imgs/mp_qrcode.jpg
Vue3 + Element Plus + Pinia + Unocss
Express + MongoDB
/src/assets 静态资源
/src/components 公共组件
/src/hooks 公共 hooks
/src/router 路由配置
/src/service 接口请求、响应拦截器
/src/stores 状态管理
/src/utils 全局工具类
/src/views 页面
/src/constant 常量
/src/schema MongoDB 数据库 schema
/src/routes 路由
/admin后台管理目录/share内容分享目录、静态内容生成wechat.ts公众号验证、获取验证码、登录校验home.ts用户登录状态校验、获取网站公告chat.ts大模型对话user.ts用户信息相关notice.ts网站公告timeline.ts时间线vip.ts会员相关system_role.ts系统角色sync.ts数据同步
/src/store node-cache 配置,主要用于验证码的生成及校验
/src/utils 工具类
.env.example 配置文件示例,请创建自己的 .env 文件
app.ts 服务端应用入口,可配置端口、跨域等
克隆项目
git clone [email protected]:isnl/EsChatPro.git服务端
进入服务端根目录
cd server安装依赖
npm install重要: 数据库依赖 MongoDB ,开发及部署之前需确保数据库正常运行,且完成上述的前置要求
启动服务端
npm run dev启动服务端后,按如下操作执行数据库初始化脚本:
此操作为插入一条 后台管理员数据 及 后台管理动态路由数据,管理员数据可以修改,动态路由数据不能修改
脚本路径为:scripts/init-mongo.js
npm run init-mongo客户端
进入客户端根目录
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 -- startdocker pull webpeanut/eschat_pro
docker run -d --name eschat_pro \
-p 3300:3300 \
-e MongoURI=mongodb://localhost:27017/eschat \
-e WECHAT_TOKEN=YOUR_WECHAT_TOKEN \
-e JWT_SECRET_KEY=YOUR_JWT_SECRET_KEY \
-e MAX_LENGTH=2000 \
-e DAILY_LIMIT=20 \
-e VIP_MAX_LENGTH=10000 \
-e VIP_DAILY_LIMIT=99 \
-e SHARE_MAX_COUNT=5 \
webpeanut/eschat_pro如果你需要指定其他环境变量,请自行在上述命令中增加 -e 环境变量=环境变量值 来指定。
用自己微信扫码登录后,使用 MongoDB Compass 或其他数据库终端连接数据库,在 user 集合中找到自己,并将 role 字段设置为 1 即可
用 MongoDB Compass 或其他数据库终端连接数据库,并在 user 集合中新增如下数据,openId 为授权码字段,自行生成,长度和内容随机,确保唯一性即可。
{
"openId": "GA02rPMrA",
"id": "poRElv1koxGkvYriOlM61",
"avatar": "E053",
"name": "GFN1E-ChatGPTer",
"createdAt": "2024-04-05 15:38:15"
}同样的, user 集合中新增如下数据,openId 为授权码字段,自行生成,长度和内容随机,确保唯一性即可。role 字段为 1
// role: 权限字段,1为管理员,0为普通用户,默认为普通用户
{
"openId": "GA02rPMrA",
"id": "poRElv1koxGkvYriOlM61",
"avatar": "E053",
"name": "GFN1E-ChatGPTer",
"createdAt": "2024-04-05 15:38:15",
"role": 1
}进入后台管理 -> 模型管理 -> 新建模型
Q: 部署后为啥不是流式响应
A: 检查 nginx 配置
proxy_buffering off;
chunked_transfer_encoding on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;Q: 授权码登录方式,授权码在哪创建?
A: 系统运行后,用 MongoDB Compass 或其他数据库终端连接数据库,并在 user 集合中新增如下数据,openId 为授权码字段,自行生成,长度和内容随机,确保唯一性即可。
哦对了,如果你想给你自己的账号添加管理员权限,请再添加 role 字段,值为 1
// 权限字段,1为管理员,0为普通用户
{
"openId": "GA02rPMrA",
"id": "poRElv1koxGkvYriOlM61",
"avatar": "E053",
"name": "GFN1E-ChatGPTer",
"createdAt": "2024-04-05 15:38:15",
"role": 1
}Q: 除了微信公众号和授权码登录方式外,能不能让用户自己注册账号自行使用?
A: 参考 server/src/schema/user.ts 和 server/src/routes/user.ts 文件,自行开发注册相关功能即可
Q: 能不能给指定的用户单独设置每日调用次数和文本长度限制?
A: 需要写点代码,在后台用户管理中,将调用次数和文本长度字段存入数据库中的用户表里。并在如下文件中(server/src/routes/gpt.ts)用户调用 AI 生成内容的时候,先根据用户 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_pro 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 你买不了吃亏,买不了上当
本系统仅供学习和研究目的使用,在选择接入模型时,请遵循当地法律法规,尊重他人的合法权益,不得用于任何违法违规活动。如因使用本系统而产生的任何法律责任,由使用者自行承担。
EsChatPro 是一款完全免费无广告的开源软件,软件开发和维护全靠作者用爱发电,因此您可以选择支持作者让作者有更多的热情和精力维护此软件,或者您使用了此软件进行了盈利,欢迎您通过下面的方式支持作者:











































