/coze-discord-proxy

代理Discord-Bot对话Coze-Bot,实现API形式请求GPT4对话模型/微调模型

Primary LanguageGoMIT LicenseMIT

coze-discord-proxy

代理Discord-Bot对话Coze-Bot,实现API形式请求GPT4对话模型/微调模型

觉得有点意思的话 别忘了点个🌟

🐞COZE-DISCORD-PROXY交流群(群内有详细教程)

功能

  • 完美适配NextChat,one-api,LobeChat
  • 对话支持流式返回
  • 自有对话接口支持文生图(需coze配置dall-e-3插件)
  • 自有对话接口支持图生文(需coze配置GPT4V插件)(发送的文本消息中携带图片url)
  • 支持创建 discord分类/频道/线程
  • 支持对话指定 discord频道/线程-实现对话隔离
  • 支持和openai对齐的对话接口(v1/chat/completions)(支持dall-e-3文生图)(支持GPT4V 图生文接口的请求格式 [ urlbase64 ])
  • 支持和openai对齐的dall-e-3文生图接口(v1/images/generations)
  • 支持每日24点定时任务自动活跃机器人
  • 支持配置多个[机器人-频道] (通过PROXY_SECRET指定) 详细请看进阶配置

接口文档:

http://<ip>:<port>/swagger/index.html

示例:

如何使用

  1. 打开 discord开发者平台
  2. 创建bot-A,并记录bot专属的tokenid(COZE_BOT_ID),此bot为被coze托管的bot。
  3. 创建bot-B,并记录bot专属的token(BOT_TOKEN),此bot为我们与discord交互的bot。
  4. 两个bot开通对应权限(Send Messages,Read Message History等)并邀请进服务器,记录服务器ID(GUILD_ID) ( 过程不在此赘述)。
  5. 打开 coze官网 创建自己bot。
  6. 创建好后推送,配置discord-bot的token,即bot-A的token,点击完成后在discord的服务器中可看到bot-A在线并可以@使用。
  7. 配置环境变量,并启动本项目。
  8. 访问接口地址即可开始调试。

如何集成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'

services:
  coze-discord-proxy:
    image: deanxv/coze-discord-proxy:latest
    container_name: coze-discord-proxy
    restart: always
    ports:
      - "7077:7077"
    volumes:
      - ./data:/app/coze-discord-proxy/data
    environment:
      - BOT_TOKEN=MTE5OTk2xxxxxxxxxxxxxxrwUrUWNbG63w  # 必须修改为我们主动发送消息的Bot-Token
      - GUILD_ID=119xxxxxxxx796  # 必须修改为两个机器人所在的服务器ID
      - COZE_BOT_ID=119xxxxxxxx7  # 必须修改为由coze托管的机器人ID
      - CHANNEL_ID=119xxxxxx24  # 默认频道-在使用与openai对齐的接口时(/v1/chat/completions) 消息会默认发送到此频道
      - 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 BOT_TOKEN="MTE5OTk2xxxxxxxxxxxxxxrwUrUWNbG63w" \
-e GUILD_ID="119xxxxxxxx796" \
-e COZE_BOT_ID="119xxxxxxxx7" \
-e PROXY_SECRET="123456" \
-e CHANNEL_ID="119xxxxxx24" \
-e TZ=Asia/Shanghai \
deanxv/coze-discord-proxy

其中,BOT_TOKEN,GUILD_ID,COZE_BOT_ID,PROXY_SECRET,CHANNEL_ID修改为自己的。

部署到第三方平台

部署到 Zeabur

Zeabur 的服务器在国外,自动解决了网络的问题,同时免费的额度也足够个人使用

点击一键部署:

Deploy on Zeabur

一键部署后 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. 添加环境变量

    BOT_TOKEN:MTE5OTk2xxxxxxxxxxxxxxrwUrUWNbG63w 主动发送消息的Bot-Token

    GUILD_ID:119xxxxxxxx796 两个机器人所在的服务器ID

    COZE_BOT_ID:119xxxxxxxx7 由coze托管的机器人ID

    CHANNEL_ID:119xxxxxx24 # 默认频道-在使用与openai对齐的接口时(/v1/chat/completions) 消息会默认发送到此频道

    PROXY_SECRET:123456 [可选]接口密钥-修改此行为请求头校验的值(多个请以,分隔) ,配置此参数后,每次发起请求时请求头加上proxy-secret参数,即header中添加 proxy-secret:123456

保存。

  1. 选择 Redeploy。
部署到 Render

Render 提供免费额度,绑卡后可以进一步提升额度

Render 可以直接部署 docker 镜像,不需要 fork 仓库:Render

配置

环境变量

  1. BOT_TOKEN:MTE5OTk2xxxxxxxxxxxxxxrwUrUWNbG63w 主动发送消息的Bot-Token
  2. GUILD_ID:119xxxxxxxx796 两个机器人所在的服务器ID
  3. COZE_BOT_ID:119xxxxxxxx7 由coze托管的机器人ID
  4. CHANNEL_ID:119xxxxxx24 默认频道-在使用与openai对齐的接口时(/v1/chat/completions) 消息会默认发送到此频道
  5. PORT [可选]端口
  6. PROXY_SECRET:123456 [可选]接口密钥-修改此行为请求头校验的值(多个请以,分隔) ,配置此参数后,每次发起请求时请求头加上proxy-secret参数,即header中添加 proxy-secret:123456
  7. REQUEST_OUT_TIME:60 [可选]对话接口非流响应下的请求超时时间
  8. STREAM_REQUEST_OUT_TIME:60 [可选]对话接口流响应下的每次流返回超时时间
  9. PROXY_URL:http://127.0.0.1:10801 [可选]代理

进阶配置

配置多[机器人-频道]

  1. 部署前在docker/docker-compose部署同级目录下创建data/config/bot_config.json文件
  2. 编写该json文件,bot_config.json格式如下
[
  {
    "proxySecret": "123", // 接口请求密钥(PROXY_SECRET)
    "cozeBotId": "12***************31", // coze托管的机器人ID
    "channelId": "12***************56"  // discord频道ID(机器人必须在此频道所在的服务器)
  },
  {
    "proxySecret": "456",
    "cozeBotId": "12***************64",
    "channelId": "12***************78"
  },
  {
    "proxySecret": "789",
    "cozeBotId": "12***************12",
    "channelId": "12***************24"
  }
]
  1. 重启服务

当有此配置时,会通过请求头携带的请求密钥匹配此配置中的cozeBotId,channelId,若匹配到多个则随机匹配一个,所以当存在多用户使用时可对每个用户分发独立的请求密钥。

第三方平台(如: zeabur)部署的服务需要配置多[机器人-频道]请参考issue#30

Q&A

Q: 我们如何使用该服务托管多个Bot去请求多个由coze托管的Bot?
A: 首先用不同的端口部署多个coze-discord-proxy服务,对每个服务都配置多[机器人-频道],并对每个服务设置不同的BOT_TOKEN,再部署one-api添加多个渠道,利用one-api的轮询去请求我们的coze-discord-proxy服务。

⭐ Star History

Star History Chart

其他版本

开源不易,若你参考此项目或基于此项目二开可否麻烦在你的项目文档中标识此项目呢?谢谢你!♥♥♥

Java: https://github.com/oddfar/coze-discord

其他引用

Coze 官网 : https://www.coze.com

Discord 开发地址 : https://discord.com/developers/applications