【开源推荐】基于One API与New API的基础上进行二次开发的Chat-Api

ChatGPT 2024年2月27日 2.63K

之前我推荐过One-Api 和 New-Api都是二开中的不错的系统,都可以帮我们搭建GPT国内国外的模型中转平台,可以很方便的让我们调用各种模型,今天给大家推荐的是基于这两者二开的chat-api,这个就不用多介绍了,和之前那两个的功能一样,但是chat-api又做了不一样的功能。

之前的两个版本,一块分享给大家

【开源推荐】OpenAI接口管理分发系统,支持多种渠道,可用于二次分发管理key,代码全开源

【开源推荐】基于One API的二次开发 Neko API,全开源,免费,支持Midjourney画画接口

主要变更

全新的UI界面,分为用户端和管理端,这个还是不错的,分开用起来更爽。

支持在线支付按钮的启用关闭

演示截图

所需环境

go1.22.0 以上(若不是请升级)

mysql

redis

安装配置

我这里采用的是手动安装的方式,看你自己的喜欢方式,官网有提供使用 docker的安装方法。

1、编译安装

git clone 公众号回复获取项目地址

# 构建前端(管理端)
cd chat-api/web-admin
npm install
npm run build

# 构建前端(C端)
cd ..
cd web-user
npm install
npm run build

# 构建后端
cd ..
go mod download
go build -ldflags "-s -w" -o chat-api

 

2、运行启动

chmod u+x chat-api
.env //设置环境变量 放在同一目录下
./chat-api --port 3000 --log-dir ./logs

3. 访问 [http://localhost:3000/](http://localhost:3000/) 并登录。初始账号用户名为 `root`,密码为 `123456`。

4. 管理端访问 [http://localhost:3000/admin](http://localhost:3000/admin) 并登录。初始账号用户名为 `root`,密码为 `123456`。

环境变量

1. `REDIS_CONN_STRING`:设置之后将使用 Redis 作为缓存使用。
– 例子:`REDIS_CONN_STRING=redis://default:redispw@localhost:49153`
– 如果数据库访问延迟很低,没有必要启用 Redis,启用后反而会出现数据滞后的问题。
2. `SESSION_SECRET`:设置之后将使用固定的会话密钥,这样系统重新启动后已登录用户的 cookie 将依旧有效。
– 例子:`SESSION_SECRET=random_string`
3. `SQL_DSN`:设置之后将使用指定数据库而非 SQLite,请使用 MySQL 或 PostgreSQL。
– 例子:
– MySQL:`SQL_DSN=root:123456@tcp(localhost:3306)/oneapi`
– PostgreSQL:`SQL_DSN=postgres://postgres:123456@localhost:5432/oneapi`(适配中,欢迎反馈)
– 注意需要提前建立数据库 `oneapi`,无需手动建表,程序将自动建表。
– 如果使用本地数据库:部署命令可添加 `–network=”host”` 以使得容器内的程序可以访问到宿主机上的 MySQL。
– 如果使用云数据库:如果云服务器需要验证身份,需要在连接参数中添加 `?tls=skip-verify`。
– 请根据你的数据库配置修改下列参数(或者保持默认值):
– `SQL_MAX_IDLE_CONNS`:最大空闲连接数,默认为 `100`。
– `SQL_MAX_OPEN_CONNS`:最大打开连接数,默认为 `1000`。
– 如果报错 `Error 1040: Too many connections`,请适当减小该值。
– `SQL_CONN_MAX_LIFETIME`:连接的最大生命周期,默认为 `60`,单位分钟。
4. `FRONTEND_BASE_URL`:设置之后将重定向页面请求到指定的地址,仅限从服务器设置。
– 例子:`FRONTEND_BASE_URL=https://openai.justsong.cn`
5. `MEMORY_CACHE_ENABLED`:启用内存缓存,会导致用户额度的更新存在一定的延迟,可选值为 `true` 和 `false`,未设置则默认为 `false`。
– 例子:`MEMORY_CACHE_ENABLED=true`
6. `SYNC_FREQUENCY`:在启用缓存的情况下与数据库同步配置的频率,单位为秒,默认为 `600` 秒。
– 例子:`SYNC_FREQUENCY=60`
7. `NODE_TYPE`:设置之后将指定节点类型,可选值为 `master` 和 `slave`,未设置则默认为 `master`。
– 例子:`NODE_TYPE=slave`
8. `CHANNEL_UPDATE_FREQUENCY`:设置之后将定期更新渠道余额,单位为分钟,未设置则不进行更新。
– 例子:`CHANNEL_UPDATE_FREQUENCY=1440`
9. `CHANNEL_TEST_FREQUENCY`:设置之后将定期检查渠道,单位为分钟,未设置则不进行检查。
– 例子:`CHANNEL_TEST_FREQUENCY=1440`
10. `POLLING_INTERVAL`:批量更新渠道余额以及测试可用性时的请求间隔,单位为秒,默认无间隔。
– 例子:`POLLING_INTERVAL=5`
11. `BATCH_UPDATE_ENABLED`:启用数据库批量更新聚合,会导致用户额度的更新存在一定的延迟可选值为 `true` 和 `false`,未设置则默认为 `false`。
– 例子:`BATCH_UPDATE_ENABLED=true`
– 如果你遇到了数据库连接数过多的问题,可以尝试启用该选项。
12. `BATCH_UPDATE_INTERVAL=5`:批量更新聚合的时间间隔,单位为秒,默认为 `5`。
– 例子:`BATCH_UPDATE_INTERVAL=5`
13. 请求频率限制:
– `GLOBAL_API_RATE_LIMIT`:全局 API 速率限制(除中继请求外),单 ip 三分钟内的最大请求数,默认为 `180`。
– `GLOBAL_WEB_RATE_LIMIT`:全局 Web 速率限制,单 ip 三分钟内的最大请求数,默认为 `60`。
14. 编码器缓存设置:
– `TIKTOKEN_CACHE_DIR`:默认程序启动时会联网下载一些通用的词元的编码,如:`gpt-3.5-turbo`,在一些网络环境不稳定,或者离线情况,可能会导致启动有问题,可以配置此目录缓存数据,可迁移到离线环境。
– `DATA_GYM_CACHE_DIR`:目前该配置作用与 `TIKTOKEN_CACHE_DIR` 一致,但是优先级没有它高。
15. `RELAY_TIMEOUT`:中继超时设置,单位为秒,默认不设置超时时间。
16. `SQLITE_BUSY_TIMEOUT`:SQLite 锁等待超时设置,单位为毫秒,默认 `3000`。

注意:官网虽然给出了很多,但是你用两三个就可以了。

修改.env文件,添加下面的三个

REDIS_CONN_STRING="redis://default:pw@localhost:6379"
#配置mysql数据将会写到mysql中
SQL_DSN="root:pwd@tcp(localhost:3306)/oneapi"

SYNC_FREQUENCY=60

到此整个系统就可以启动起来啦。

线上部署

有一点需要注意的是,你本地打包的编译文件,chat-api,放到线上是不一定能用的,特别是用mac 编译的,原因是因为,系统不一样,执行编译的就会不一样。

解决办法,你需要将整个文件提交到线上,这样在线上编译,就可以使用啦。

线上常驻进程启动的方法

使用 pm2 启动

在项目目录生成启动文件 pm2 init simple,之后会生成 ecosystem.config.[js](https://www.viphper.com/tag/js “js”) 配置文件,修改为以下内容

module.exports = {
apps : [{
name : "chatapi",
script : "./chat-api --port 3000 --log-dir ./logs",
watch: true
}]
}

启动:pm2 start ecosystem.config.js

停止:pm2 stop ecosystem.config.js

nginx 代理配置

nginx
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host 127.0.0.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

至此整个项目即可启动起来。

资源下载
PHP学习网
公众号回复“PHPER7275”获取下载!
请打开微信扫描右边的二维码回复关键字“PHPER7275”也可以微信直接搜索“PHP学习网”关注微信公众号获取。


关注微信公众号『PHP学习网

第一时间了解最新网络动态
关注博主不迷路~

PHP学习网:站内收集的部分资源来源于网络,若侵犯了您的合法权益,请联系我们删除!
分享到:
赞(0)

文章评论

您需要之后才可以评论
0点赞 0评论 收藏 QQ分享 微博分享

PHP学习网

PHP学习网