决定了,将ChatGPTer开源!主打一个大模型人人可用。

news2024/12/29 8:50:14

一个快速上手且极易部署的类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/eschat

docker 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.coloradmin.cn/o/1697001.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

北航提出part2whole:可控⼈体图像⽣成的统⼀参考框架,可从任何数量和不同来源的参考人体部位图像中生成逼真的、高质量的各种姿势的人体人物图。

Parts2Whole,它可以从任何数量和不同来源的参考人体部位图像中生成逼真的、高质量的各种姿势的人体人物。我们的方法保持了与相应条件语义区域的高度一致性,同时保证了整体之间的多样性和协调性。 (a)以不同人的参考图像为条件生成人的图像。每对包括4个…

6.Redis之String命令

1.String类型基本介绍 redis 所有的 key 都是字符串, value 的类型是存在差异的~~ 一般来说,redis 遇到乱码问题的概率更小~~ Redis 中的字符串,直接就是按照二进制数据的方式存储的. (不会做任何的编码转换【讲 mysql 的时候,知道 mysql 默认的字符集, 是拉丁文,插入中文…

ChatGLM2-6B 模型基于 [P-Tuning v2]的微调

ChatGLM2-6B-PT 一、介绍 1、本文实现对于 ChatGLM2-6B 模型基于 [P-Tuning v2](https://github.com/THUDM/P-tuning-v2) 的微调 2、运行至少需要 7GB 显存 3、以 [ADGEN](https://aclanthology.org/D19-1321.pdf) (广告生成) 数据集为例介绍代码的使用方法。 模型部署参考…

OC笔记之foundation框架

OC学习笔记(三) 文章目录 OC学习笔记(三)常用Foundation框架结构体NSRangeNSRange结构体的定义定义 NSRange 的方法打印Range的相关信息NSRange的实际运用查找子字符串返回NSRange结构体 NSPointNSRect NSStringNSString的创建NSS…

Python文件操作(Excel、PDF、XML、Word)

大家好,在现代数据驱动的世界中,对于数据的处理和管理是至关重要的。Python作为一种强大而灵活的编程语言,提供了丰富的工具和库来处理各种文件格式。本文将探讨Python中的文件操作,重点介绍如何使用Python处理Excel、PDF、XML和W…

【python】python tkinter 计算器GUI版本(模仿windows计算器 源码)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

每日一题《leetcode--2816.翻倍以链表形式表示的数字》

https://leetcode.cn/problems/double-a-number-represented-as-a-linked-list/ 这里我们直接模拟翻倍后链表的数字,首先我们得先考虑链表的头结点的值是否大于4(*2后是否需要进位)。 处理完头结点后,就需要考虑其余结点。因为求的是链表中每个结点翻倍后…

这个开源的多模态模型无敌。。。

InternVL 由 OpenGVLab 开发,是一个开源的多模态对话模型,其性能接近商业化的 GPT-4V 模型。 GPT-4V 是 OpenAI 去年推出的多模态模型,使用它你可以分析所需的任何类型的图像并获取有关该图像的信息。 1. InternVL 开源模型 而今天的主角研究…

基于python实现的深度学习web多格式纠错系统

基于python实现的深度学习web多格式纠错系统 开发语言:Python 数据库:MySQL所用到的知识:Django框架工具:pycharm、Navicat、Maven 系统功能实现 用户登录 登录功能是本系统一个非常重要的功能,这极大的保护了系统的安全。登录…

跨平台之用VisualStudio开发APK嵌入OpenCV(一)

序 本篇是杂谈以及准备工作(此处应无掌声) 暂时不管iOS(因为开发hello world都要年费) 软件: Visual Studio 2019(含Android SDK和NDK编译器等) OpenCV 这是一个女仆级的系列文章&#xf…

php之sql代码审计

1 SQL注入代码审计流程 1.1 反向查找流程 通过可控变量(输入点)回溯危险函数 查找危险函数确定可控变量 传递的过程中触发漏洞 1.2 反向查找流程特点 暴力:全局搜索危险函数 简单:无需过多理解目标网站功能与架构 快速:适用于自动化代码审…

vue实现可拖拽移动悬浮球

封装悬浮球组件&#xff0c;文件名s-icons.vue <template><div ref"icons" class"icons-container" :style"{ left: left px, top: top px }"><slot></slot></div> </template> <script> export …

阿里云ubuntu 24 deb安装mysql5.7问题解决

阿里云最近有了ubuntu24&#xff0c;手欠直接选了24系统来试水&#xff0c;安装mysql这里遇到麻烦了 其它问题参考ubuntu22的即可&#xff0c;以下是3个新问题&#xff1a; 阿里云ubuntu 24 deb安装mysql5.7遇到的3个问题&#xff1a; 1&#xff09;libssl1.1 (&#xff1e; …

深度神经网络——什么是决策树?

决策树 决策树是一种强大的机器学习算法&#xff0c;它通过模拟人类决策过程来解决分类和回归问题。这种算法的核心在于它如何将数据集细分&#xff0c;直至每个子集足够“纯净”&#xff0c;即包含的实例都属于同一类别或具有相似的数值范围。 开始于根节点&#xff1a;决策…

分布式事务——9种解决方案的原理与分类

目录 一、概要1. 分布式事务的概念2. 分布式事务解决方案分类 二、常见的分布式事务解决方案1. 基础的 2PC&#xff08;二阶段提交&#xff09;1.1 核心思想1.2 简介1.3 主要特点1.3.1 优点1.3.2 缺点 2. 基础的 3PC&#xff08;三阶段提交&#xff09;2.1 核心思想2.2 简介2.3…

【MySQL索引】(重点)

文章目录 一、见见索引二、认识磁盘三、索引的学习1.建立共识2.重谈page3.单page和多page同样存在效率低下的问题单page的缺陷多page的缺陷 页目录单page多page B树为什么行&#xff01;详谈细节 其他数据结构为什么不行?聚簇索引和非聚簇索引 回表查询 四、索引的操作1.创建主…

简单好用的文本识别方法--付费的好用,免费的更有性价比

文章目录 先说付费的进入真题&#xff0c;免费的来喏&#xff01;PixPin微信 先说付费的 直达网址!!! 进入真题&#xff0c;免费的来喏&#xff01; PixPin 商店里就有 使用示例&#xff1a; 可以看到&#xff1a;贴在桌面上的图片可以复制图片中的文字&#xff0c;真的很…

详细分析ping的基本知识以及常见网络故障的诊断(图文解析)

目录 前言1. 基本知识2. 常见故障分析2.1 请求超时2.2 域名无法解析 前言 由于全栈开发&#xff0c;在运维过程中难免会出现无法ping通等故障 针对多种情况进行详细分析 1. 基本知识 为了更好的加深ping的基本命令以及拓展更多知识点&#xff0c;详细科普其基本知识 ping&…

算法与数据结构汇总

刷题建议步骤 求职硬通货&#xff1a;一&#xff0c;好的学历&#xff0c;这个要下血本。本科&#xff0c;可以考研&#xff0c;读研。专科&#xff0c;可以专升本&#xff0c;再考研&#xff0c;读研&#xff0c;二&#xff0c;软考&#xff0c;一年考两次&#xff0c;有些科…