中文 | English
coze-discord-proxy
代理Discord对话Coze-Bot,实现以API形式请求GPT4模型,提供对话、文生图、图生文、知识库检索等功能
如果觉得有意思,别忘了点个🌟
📄CDP项目文档站(必看教程)
🐞CDP项目-交流群(交流)
📢CDP项目-通知频道(通知)
功能
- 完美适配NextChat、one-api、LobeChat等对话面板。
- 完美支持对话隔离。
- 对话接口支持流式返回。
- 支持创建discord分类/频道/线程。
- 支持和openai对齐的对话接口(v1/chat/completions)(也支持dall-e-3文生图)(支持指定discord-channel)。
- 支持和openai对齐的图生文/图改图/文件生文接口(v1/chat/completions)(按照GPT4V接口的请求格式 [ 支持url或base64 ])(支持指定discord-channel)。
- 支持和openai对齐的dall-e-3文生图接口(v1/images/generations)。
- 支持每日9点定时任务自动活跃机器人。
- 支持配置多discord用户Authorization(环境变量USER_AUTHORIZATION)作请求负载均衡(目前每个discord用户调用coze-bot在24h内有次数限制,可配置多用户来实现叠加请求次数及请求负载均衡)。
- 支持配置多coze机器人作响应负载均衡(通过PROXY_SECRET/model指定)详细请看进阶配置。
接口文档:
http://<ip>:<port>/swagger/index.html
示例:
如何使用
- 打开discord官网,登录后点击设置-高级设置-开发者模式-打开。
- 创建discord服务器,右键点击此服务器选择"复制服务器ID(GUILD_ID)"并记录,在此服务器中创建默认频道,右键点击此频道选择"复制频道ID(CHANNEL_ID)"并记录。
- 打开discord开发者平台登录。
- 创建新应用-Bot即COZE-BOT,并记录该bot专属的token和id(COZE_BOT_ID),此bot为即将被coze托管的bot。
- 创建新应用-Bot即CDP-BOT,并记录该bot专属的token(BOT_TOKEN),此bot为监听discord消息的bot。
- 两个bot开通对应权限(Administrator)并邀请进创建好的discord服务器(过程不在此赘述)。
- 打开discord官网进入服务器,按F12打开开发者工具,在任一频道内发送一次消息,在开发者工具-Network中找到请求 https://discord.com/api/v9/channels/1206*******703/messages 从该接口header中获取Authorization(USER_AUTHORIZATION)并记录。
- 打开coze官网创建bot并进行个性化配置(注意Auto-Suggestion为Default/on(默认不用改))。
- 配置好后选择发布到discord,填写COZE-BOT的token,发布完成后在discord服务器中可看到COZE-BOT在线并可以@使用。
- 使用上述记录的参数开始配置环境变量并部署本项目。
- 访问接口文档地址,即可开始调试或集成其他项目。
如何集成NextChat
填写接口地址(ip:端口/域名)及API-Key(PROXY_SECRET),其它的随便填随便选。
如果自己没有搭建NextChat面板,这里有个已经搭建好的可以使用 NextChat
如何集成one-api
填写BaseURL(ip:端口/域名)及密钥(PROXY_SECRET),其它的随便填随便选。
部署
基于Docker-Compose(All In One)进行部署
docker-compose pull && docker-compose up -d
docker-compose.yml
version: '3.4'
服务:
coze-discord-代理:
镜像:deanxv/coze-discord-proxy:latest
容器名称:coze-discord-proxy
重启:始终
端口:
- "7077:7077"
卷:
- ./data:/app/coze-discord-proxy/data
环境变量:
- USER_AUTHORIZATION=MTA5OTg5N************aXUBHVI # 必须修改为我们discord用户的授权密钥(多个请以逗号分隔)
- BOT_TOKEN=MTE5OT************UrUWNbG63w # 必须修改为监听消息的Bot-Token
- GUILD_ID=11************96 # 必须修改为两个机器人所在的服务器ID
- COZE_BOT_ID=11************97 # 必须修改为由coze托管的机器人ID
- CHANNEL_ID=11************94 # [可选]默认频道-(目前版本下该参数仅用来活跃机器人)
- PROXY_SECRET=123456 # [可选]接口密钥-修改此行为请求头校验的值(多个请以逗号分隔)
- TZ=Asia/Shanghai
### 基于 Docker 进行部署
docker run --name coze-discord-proxy -d --restart always \
-p 7077:7077 \
-v $(pwd)/data:/app/coze-discord-proxy/data \
-e USER_AUTHORIZATION="MTA5OTg5N************uIfytxUgJfmaXUBHVI" \
-e BOT_TOKEN="MTE5OTk2************rUWNbG63w" \
-e GUILD_ID="11************96" \
-e COZE_BOT_ID="11************97" \
-e PROXY_SECRET="123456" \
-e CHANNEL_ID="11************24" \
-e TZ=Asia/Shanghai \
deanxv/coze-discord-proxy
其中USER_AUTHORIZATION、BOT_TOKEN、GUILD_ID、COZE_BOT_ID、PROXY_SECRET、CHANNEL_ID需修改为自己的。
如果上述镜像无法拉取,可尝试使用GitHub的Docker镜像,将上面的deanxv/coze-discord-proxy替换为ghcr.io/deanxv/coze-discord-proxy即可。
### 部署到第三方平台
部署到Zeabur
Zeabur的服务器在国外,自动解决了网络问题,同时免费额度也足够个人使用
点击一键部署:
一键部署后USER_AUTHORIZATION、BOT_TOKEN、GUILD_ID、COZE_BOT_ID、PROXY_SECRET、CHANNEL_ID变量也需要替换!
或手动部署:
1. 首先fork一份代码。
2. 进入Zeabur,使用github登录,进入控制台。
3. 在Service -> Add Service,选择Git(第一次使用需要先授权),选择你fork的仓库。
4. Deploy会自动开始,先取消。
5. 添加环境变量
USER_AUTHORIZATION:MTA5OTg5N************uIfytxUgJfmaXUBHVI 主动发送消息的discord用户的授权密钥(多个请以逗号分隔)
BOT_TOKEN:MTE5OTk************WNbG63w 监听消息的Bot-Token
GUILD_ID:11************96 两个机器人所在的服务器ID
COZE_BOT_ID:11************97 由coze托管的机器人ID
CHANNEL_ID:11************24 # [可选]默认频道-(目前版本下该参数仅用来活跃机器人)
PROXY_SECRET:123456 [可选]接口密钥-修改此行为请求头校验的值(多个请以逗号分隔)(与openai-API-KEY用法一致)
保存。
6. 选择Redeploy。
部署到Render
Render提供免费额度,绑卡后可以进一步提升额度
Render可以直接部署docker镜像,不需要fork仓库:Render
## 配置
### 环境变量
1. `USER_AUTHORIZATION=MTA5OTg5N************uIfytxUgJfmaXUBHVI` 主动发送消息的Discord用户的授权密钥(多个请用逗号分隔)
2. `BOT_TOKEN=MTE5OTk2************rUWNbG63w` 监听消息的Bot令牌
3. `GUILD_ID=11************96` 所有Bot所在的服务器ID
4. `COZE_BOT_ID=11************97` 由Coze托管的Bot ID
5. `PORT=7077` [可选]端口,默认为7077
6. `SWAGGER_ENABLE=1` [可选]是否启用Swagger接口文档[0:否;1:是](默认为1)
7. `ONLY_OPENAI_API=0` [可选]是否只暴露与OpenAI对齐的接口[0:否;1:是](默认为0)
8. `CHANNEL_ID=11************24` [可选]默认频道-(当前版本下该参数仅用于保持Bot活跃)
9. `PROXY_SECRET=123456` [可选]接口密钥-修改此行为请求头校验的值(多个请用逗号分隔)(与OpenAI API密钥用法一致),**推荐使用此环境变量**
10. `DEFAULT_CHANNEL_ENABLE=0` [可选]是否启用默认频道[0:否;1:是](默认为0)启用后每次对话都会在默认频道中,**会话隔离将失效**,**建议不使用此环境变量**
11. `ALL_DIALOG_RECORD_ENABLE=1` [可选]是否启用全量上下文[0:否;1:是](默认为1)关闭后每次对话只会发送`messages`中最后一个`role`为`user`的`content`,**建议不使用此环境变量**
12. `CHANNEL_AUTO_DEL_TIME=5` [可选]频道自动删除时间(秒)此参数为每次对话完成后自动删除频道的时间(默认为5秒),为0时则不删除,**建议不使用此环境变量**
13. `COZE_BOT_STAY_ACTIVE_ENABLE=1` [可选]是否开启每日`9`点活跃Coze-bot的定时任务[0:否;1:是](默认为1),**建议不使用此环境变量**
14. `REQUEST_OUT_TIME=60` [可选]对话接口非流响应下的请求超时时间,**建议不使用此环境变量**
15. `STREAM_REQUEST_OUT_TIME=60` [可选]对话接口流响应下的每次流返回超时时间,**建议不使用此环境变量**
16. `REQUEST_RATE_LIMIT=60` [可选]每分钟下的单IP请求速率限制,默认:60次/分钟
17. `USER_AGENT=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36` [可选]Discord用户端Agent,使用自己的可能有效防止被封禁,不设置时默认使用作者的 推荐使用此环境变量
18. `NOTIFY_TELEGRAM_BOT_TOKEN=6232***********Niz9c` [可选]作为通知TelegramBot的Token(通知事件:1.无可用`user_authorization`;2.`BOT_TOKEN`关联的BOT触发风控)
19. `NOTIFY_TELEGRAM_USER_ID=10******35` [可选]`NOTIFY_TELEGRAM_BOT_TOKEN`关联的`Telegram-Bot`推送至该变量关联的`Telegram-User`(**`NOTIFY_TELEGRAM_BOT_TOKEN`不为空时该变量也不可为空**)
20. `PROXY_URL=http://127.0.0.1:10801` [可选]代理(仅支持http)
## 进阶配置
### 配置多机器人
1. 部署前在`docker`/`docker-compose`部署同级目录下创建`data/config/bot_config.json`文件
2. 编写该`json`文件,`bot_config.json`格式如下
```shell
[
{
"proxySecret": "123", // 接口请求密钥(PROXY_SECRET)(注意:此密钥在环境变量PROXY_SECRET中存在时该Bot才可以被匹配到!)
"cozeBotId": "12***************31", // Coze托管的机器人ID
"model": ["gpt-3.5","gpt-3.5-16k"], // 模型名称(数组格式)(与请求参数中的model对应,如请求中的model在该json中未匹配到则会抛出异常)
"channelId": "12***************56" // [可选]Discord频道ID(机器人必须在此频道所在的服务器)(当前版本下该参数仅用于保持机器人活跃)
},
{
"proxySecret": "456",
"cozeBotId": "12***************64",
"model": ["gpt-4","gpt-4-16k"],
"channelId": "12***************78"
},
{
"proxySecret": "789",
"cozeBotId": "12***************12",
"model": ["dall-e-3"],
"channelId": "12***************24"
}
]
- 重启服务
当有此json配置时,会通过请求头携带的[请求密钥]和请求体中的[
model
]联合匹配此配置中的cozeBotId
若匹配到多个则随机选择一个。配置很灵活,可以根据自己的需求进行配置。
第三方平台(如:zeabur
)部署的服务需要[配置多机器人]请参考issue#30
限制
目前Coze对每个Discord用户做了标识,在Discord中每个用户对不同模型的调用有次数限制,具体如下:
GPT-4 Turbo (128k) - 50次/天
GPT-4 (8k) - 100次/天
GPT-3.5 (16k) - 500次/天
可配置多个Discord用户Authorization
(参考环境变量USER_AUTHORIZATION
)实现叠加请求次数及请求负载均衡。
常见问题
问:并发量高时应如何配置?
A: 首先为服务配置多个机器人,用于负载均衡bot的响应。其次,准备多个Discord账号用于请求负载,并将它们邀请到同一个服务器。获取每个账号的Authorization
,用英文逗号分隔,并配置在环境变量USER_AUTHORIZATION
中。这样,每次请求都会从多个Discord账号中选择一个发起对话,有效实现负载均衡。
⭐ 星标历史
相关项目
GPT-Content-Audit:整合了Openai、阿里云、百度智能云、七牛云等开放平台,提供与openai
请求格式一致的内容审核前置服务。
其他
开源不易,如果你参考了此项目或基于此项目进行二次开发,能否在你的项目文档中标注此项目?非常感谢!
Java版本: https://github.com/oddfar/coze-discord (目前不可用)
引用
Coze 官网:https://www.coze.com
Discord 开发者页面:https://discord.com/developers/applications