Warning
本项目为个人学习使用,不保证稳定性,且不提供任何技术支持,使用者必须在遵循 OpenAI 的使用条款以及法律法规的情况下使用,不得用于非法用途。 根据《生成式人工智能服务管理暂行办法》的要求,请勿对**地区公众提供一切未经备案的生成式人工智能服务。
- 全新的UI界面,C端与管理端 (/admin)
- 支持在线支付按钮的启用关闭
- 支持模型按次数收费,可在 系统设置-运营设置 中设置
- 支持普通用户自行选择令牌按倍率、按次计费(倍率和按次全启用)
- 支持令牌分组,模型限制
- 支持WxPusher消息推送,在线充值通知
- 支持通知更换邮箱
- 支持渠道自启时间设置
- 支持渠道显示调用次数
- 支持显示新用户注册时间
- 支持自定义渠道测试模型
- 管理员支持开启日志详情
- 支持自定义网站描述(TG网站预览)
- 支持数据面板统计
- 支持新用户设置默认分组
- 支持充值用户设置默认分组(充值后自动切换)
- 支持邀请用户充值返利(后台设置返利百分比。最低提现额度)
- 支持设置普号渠道每分钟限制使用3次(每个模型三次 自动切换渠道)
- 支持渠道显示可用模型,可自定义排序
- 支持gpt-4v通用格式(添加模型gpt-4-vision,对话中放入图像链接即可)
- 支持按日期设置充值不同倍率
- 支持分销查询页chat-api-key-tool(消费、MJ、设置发卡站)
- 支持渠道添加自定义请求头
- 支持令牌添加自定义后缀内容
- 支持midjourney-proxy-plus(支持/mj-turbo/mj、/mj-relax/mj,对应模型midjourney-turbo、midjourney-relax)
- 支持设置充值数量对应折扣
- 支持令牌使用IP限制
- 支持渠道设置是否可以使用FC插件,使用插件的请求自动寻找支持的渠道
- 支持渠道复制、批量编辑
- 支持Claude原始请求方式
- 支持开启上游空返回重试
- 支持日志显示RPM、TPM
# 使用 SQLite 的部署命令:
docker run --name chat-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai ai365/chat-api:latest
# 使用 MySQL 的部署命令,在上面的基础上添加 `-e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi"`,请自行修改数据库连接参数。
# 例如:
docker run --name chat-api -d --restart always -p 3000:3000 -e SQL_DSN="root:123456@tcp(localhost:3306)/oneapi" -e TZ=Asia/Shanghai ai365/chat-api:latest
仅启动方式不同,参数设置不变,请参考基于 Docker 部署部分修改docker-compose.yml文件内容
# 执行
docker-compose up -d
# 查看部署状态
docker-compose ps
-
从 GitHub Releases 下载可执行文件或者从源码编译:
git clone https://github.com/ai365vip/chat-api.git # 构建前端(管理端) 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
-
运行:
chmod u+x chat-api .env //设置环境变量 放在同一目录下 ./chat-api --port 3000 --log-dir ./logs
-
访问 http://localhost:3000/ 并登录。初始账号用户名为
root
,密码为123456
。 -
管理端访问 http://localhost:3000/admin 并登录。初始账号用户名为
root
,密码为123456
。
REDIS_CONN_STRING
:设置之后将使用 Redis 作为缓存使用。- 例子:
REDIS_CONN_STRING=redis://default:redispw@localhost:49153
- 如果数据库访问延迟很低,没有必要启用 Redis,启用后反而会出现数据滞后的问题。
- 例子:
SESSION_SECRET
:设置之后将使用固定的会话密钥,这样系统重新启动后已登录用户的 cookie 将依旧有效。- 例子:
SESSION_SECRET=random_string
- 例子:
SQL_DSN
:设置之后将使用指定数据库而非 SQLite,请使用 MySQL 或 PostgreSQL。- 例子:
- MySQL:
SQL_DSN=root:123456@tcp(localhost:3306)/oneapi
- PostgreSQL:
SQL_DSN=postgres://postgres:123456@localhost:5432/oneapi
(适配中,欢迎反馈)
- MySQL:
- 注意需要提前建立数据库
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
,单位分钟。
- 例子:
FRONTEND_BASE_URL
:设置之后将重定向页面请求到指定的地址,仅限从服务器设置。- 例子:
FRONTEND_BASE_URL=https://openai.justsong.cn
- 例子:
MEMORY_CACHE_ENABLED
:启用内存缓存,会导致用户额度的更新存在一定的延迟,可选值为true
和false
,未设置则默认为false
。- 例子:
MEMORY_CACHE_ENABLED=true
- 例子:
SYNC_FREQUENCY
:在启用缓存的情况下与数据库同步配置的频率,单位为秒,默认为600
秒。- 例子:
SYNC_FREQUENCY=60
- 例子:
NODE_TYPE
:设置之后将指定节点类型,可选值为master
和slave
,未设置则默认为master
。- 例子:
NODE_TYPE=slave
- 例子:
CHANNEL_UPDATE_FREQUENCY
:设置之后将定期更新渠道余额,单位为分钟,未设置则不进行更新。- 例子:
CHANNEL_UPDATE_FREQUENCY=1440
- 例子:
CHANNEL_TEST_FREQUENCY
:设置之后将定期检查渠道,单位为分钟,未设置则不进行检查。- 例子:
CHANNEL_TEST_FREQUENCY=1440
- 例子:
POLLING_INTERVAL
:批量更新渠道余额以及测试可用性时的请求间隔,单位为秒,默认无间隔。- 例子:
POLLING_INTERVAL=5
- 例子:
BATCH_UPDATE_ENABLED
:启用数据库批量更新聚合,会导致用户额度的更新存在一定的延迟可选值为true
和false
,未设置则默认为false
。- 例子:
BATCH_UPDATE_ENABLED=true
- 如果你遇到了数据库连接数过多的问题,可以尝试启用该选项。
- 例子:
BATCH_UPDATE_INTERVAL=5
:批量更新聚合的时间间隔,单位为秒,默认为5
。- 例子:
BATCH_UPDATE_INTERVAL=5
- 例子:
- 请求频率限制:
GLOBAL_API_RATE_LIMIT
:全局 API 速率限制(除中继请求外),单 ip 三分钟内的最大请求数,默认为180
。GLOBAL_WEB_RATE_LIMIT
:全局 Web 速率限制,单 ip 三分钟内的最大请求数,默认为60
。
- 编码器缓存设置:
TIKTOKEN_CACHE_DIR
:默认程序启动时会联网下载一些通用的词元的编码,如:gpt-3.5-turbo
,在一些网络环境不稳定,或者离线情况,可能会导致启动有问题,可以配置此目录缓存数据,可迁移到离线环境。DATA_GYM_CACHE_DIR
:目前该配置作用与TIKTOKEN_CACHE_DIR
一致,但是优先级没有它高。
RELAY_TIMEOUT
:中继超时设置,单位为秒,默认不设置超时时间。SQLITE_BUSY_TIMEOUT
:SQLite 锁等待超时设置,单位为毫秒,默认3000
。
如果觉得这个软件对你有所帮助,欢迎请作者喝可乐、喝咖啡~