GithubHelp home page GithubHelp logo

deanxv / coze-discord-proxy Goto Github PK

View Code? Open in Web Editor NEW
3.2K 19.0 962.0 1.3 MB

代理Discord对话Coze-Bot,实现以API形式请求GPT4模型,提供对话、文生图、图生文、知识库检索等功能。

License: GNU General Public License v3.0

Dockerfile 0.84% Go 99.16%

coze-discord-proxy's Introduction

中文 | 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接口的请求格式 [ 支持urlbase64 ])(支持指定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

示例:

如何使用

  1. 打开 discord官网 ,登陆后点击设置-高级设置-开发者模式-打开。
  2. 创建discord服务器,右键点击此服务器选择复制服务器ID(GUILD_ID)并记录,在此服务器中创建默认频道,右键点击此频道选择复制频道ID(CHANNEL_ID)并记录。
  3. 打开 discord开发者平台 登陆。
  4. 创建新应用-Bot即COZE-BOT,并记录该bot专属的tokenid(COZE_BOT_ID),此bot为即将被coze托管的bot。
  5. 创建新应用-Bot即CDP-BOT,并记录该bot专属的token(BOT_TOKEN),此bot为监听discord消息的bot。
  6. 两个bot开通对应权限(Administrator)并邀请进创建好的discord服务器 (过程不在此赘述)。
  7. 打开 discord官网进入服务器,按F12打开开发者工具,在任一频道内发送一次消息,在开发者工具-Network中找到请求 https://discord.com/api/v9/channels/1206*******703/messages从该接口header中获取Authorization(USER_AUTHORIZATION)并记录。
  8. 打开 coze官网 创建bot并进行个性化配置(注意Auto-SuggestionDefault/on(默认不用改))。
  9. 配置好后选择发布到discord,填写COZE-BOTtoken,发布完成后在discord服务器中可看到COZE-BOT在线并可以@使用。
  10. 使用上述记录的参数开始配置环境变量部署本项目。
  11. 访问接口文档地址,即可开始调试或集成其他项目。

如何集成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:
      - 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 的服务器在国外,自动解决了网络的问题,同时免费的额度也足够个人使用

点击一键部署:

Deploy on 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用法一致)

保存。

  1. 选择 Redeploy。
部署到 Render

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

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

配置

环境变量

  1. USER_AUTHORIZATION=MTA5OTg5N************uIfytxUgJfmaXUBHVI 主动发送消息的discord用户的授权密钥(多个请以,分隔)
  2. BOT_TOKEN=MTE5OTk2************rUWNbG63w 监听消息的Bot-Token
  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-KEY用法一致),推荐使用此环境变量
  10. DEFAULT_CHANNEL_ENABLE=0 [可选]是否启用默认频道[0:否;1:是] (默认为0) 启用后每次对话都会在默认频道中,会话隔离会失效,推荐不使用此环境变量
  11. ALL_DIALOG_RECORD_ENABLE=1 [可选]是否启用全量上下文[0:否;1:是] (默认为1) 关闭后每次对话只会发送messages中最后一个roleusercontent,推荐不使用此环境变量
  12. CHANNEL_AUTO_DEL_TIME=5 [可选]频道自动删除时间(秒) 此参数为每次对话完成后自动删除频道的时间(默认为5s),为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次/min
  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,使用自己的可能有效防止被ban,不设置时默认使用作者的 推荐使用此环境变量
  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格式如下
[
  {
    "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"
  }
]
  1. 重启服务

当有此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)实现叠加请求次数及请求负载均衡。

Q&A

Q: 并发量高时应如何配置?

A: 首先为服务配置多机器人用来作响应bot的负载,其次准备多个discord账号用来作请求负载并邀请进同一个服务器,获取每个账号的Authorization英文逗号分隔配置在环境变量USER_AUTHORIZATION中,此时每次请求都会从多个discord账号中取出一个发起对话,有效实现负载均衡。

⭐ Star History

Star History Chart

其他版本

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

Java: https://github.com/oddfar/coze-discord (目前不可用)

其他引用

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

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

coze-discord-proxy's People

Contributors

deanxv avatar k8scat avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

coze-discord-proxy's Issues

处理长请求

例行检查

  • 我已确认目前没有类似 issue
  • 我已确认我已升级到最新版本
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

功能描述

有时回复时间过长,会导致vercel无法处理

Your function was stopped as it did not return an initial response within 25s

应用场景
兼容vercel应用

v1/chat/completion 自动化对话隔离策略建议

不知道下面的策略是否可行:
1.创建频道
2.把所有messages打包作为一条消息
3.向discord发送消息并获取回复
4.删除频道
如果这样可行的话,v1/chat/completion可能更接近对齐一些

多机器人部署会出现 authorization(proxy-secret)校验失败

例行检查

  • [ √] 我已确认目前没有类似 issue
  • [ √] 我已确认我已升级到最新版本
  • [ √] 我理解并愿意跟进此 issue,协助测试和提供反馈
  • [ √] 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

问题描述
进行多机器人部署时,在环境变量中写入的机器人一切正常,但是通过data/config/bot_config.json部署的多机器人会不断提示authorization(proxy-secret)校验失败
这个问题在pull到今天的新版本后出现,昨天使用一切正常

复现步骤
使用bot_config.json内配置的proxy-secret通过one-api请求api

预期结果
正常返回

期望支持图片识别

期望支持openai gpt-4v的图片识别功能,数据结构:{
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "这个pdf里写了什么,用中文回复"
},
{
"type": "image_url",
"image_url": {
"url": "https://bitcoin.org/bitcoin.pdf"
}
}
]
}
],
"stream": false,
"model": "gpt-4",
"temperature": 0.5,
"presence_penalty": 0,
"frequency_penalty": 0,
"top_p": 1
}

请求失败

问题描述
proxy-secret是正确的,也一直显示失败

相关截图
1706839602040

Feat Request: Channel Pool and Create Channel in Chat API automatically.

例行检查

  • 我已确认目前没有类似 issue
  • 我已确认我已升级到最新版本
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

功能描述

由后端维护一个 Discord Channel Pool, 主要特性如下

  • /v1/chat/completions 中某 payloadcreate_channel == True 时先创建 channel 再对话.
  • Channel Pool 数量达到上限后, 使用离最后一次调用时间最久的 channel 先执行 /clear 发起新对话.

Note

此特性较为复杂, 仅为推荐, 开发者酌情处理.

对话隔离功能咨询

想问一下,现在如果使用v1接口请求,会话隔离需要手动指定频道id实现么?能否根据v1接口请求参数,自动实现会话隔离。

/api/chat 无效 /api/chat/ 可以

例行检查

  • [x ] 我已确认目前没有类似 issue
  • [ x] 我已确认我已升级到最新版本
  • [ x] 我理解并愿意跟进此 issue,协助测试和提供反馈
  • [ x] 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

问题描述
/api/chat 无效
/api/chat/ 有效
复现步骤
http post http://127.0.0.1:7077/api/chat -j <data.json
http post http://127.0.0.1:7077/api/chat/ -j <data.json

预期结果
根据文档应该都行把,或者改改文档, 作为十分相信文档的人,怀疑了半天是那里错了
相关截图
image

如果没有的话,请删除此节。

部署了最新的 3.1.0 版本,文生图失败

例行检查

  • 我已确认目前没有类似 issue
  • 我已确认我已升级到最新版本
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

问题描述

curl -X 'POST' \
  'https://xxx.com/v1/chat/completions' \
  -H 'accept: application/json' \
  -H 'Authorization: sk-xxx' \
  -H 'Content-Type: application/json' \
  -d '{
  "messages": [
    {
      "content": "画一个发电机",
      "role": "user"
    }
  ],
  "stream": false
}'
{
  "id": "1204880081714159626",
  "object": "chat.completion",
  "created": 1707336214,
  "model": "gpt-4-turbo",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "好的,不过我没办法直接画图。不过我可以描述一个发电机的结构给你。发电机通常由以下几个部分组成:定子、转子、励磁系统、端盖和轴承等。定子是静止不动的部分,通常包括定子铁芯和绕组。转子则是可以旋转的部分,它在定子内旋转时会切割磁力线,产生电流。励磁系统用来提供磁场,端盖用来保护内部结构,轴承则支撑转子使其能够顺利旋转。希望这个描述对你有帮助!"
      },
      "logprobs": null,
      "finish_reason": "stop",
      "delta": {
        "content": ""
      }
    }
  ],
  "usage": {
    "prompt_tokens": 25,
    "completion_tokens": 199,
    "total_tokens": 224
  },
  "system_fingerprint": null
}
curl -X 'POST' \
  'https://xxx.com/v1/images/generations' \
  -H 'accept: application/json' \
  -H 'Authorization: sk-xxx' \
  -H 'Content-Type: application/json' \
  -d '{
  "channelId": "1204870256825339937",
  "model": "dall-e-3",
  "prompt": "画一个发电机"
}'
{
  "error": {
    "message": "discord未返回URL,检查prompt中是否有敏感内容",
    "type": "invalid_request_error",
    "param": "",
    "code": "discord_request_err"
  }
}

复现步骤

预期结果

代理不完全

可以请求,机器人也将我的消息发给coze机器人了,但是后续报错

2024/01/31 13:25:23 [DG0] wsapi.go:82:Open() error connecting to gateway wss://gateway.discord.gg/?v=9&encoding=json, dial tcp [2a03:2880:f11f:83:face:b00c:0:25de]:443: i/o timeout
[FATAL] 2024/01/31 - 13:25:23 | [error opening connection, dial tcp [2a03:2880:f11f:83:face:b00c:0:25de]:443: i/o timeout]

我怀疑是代理设置不完全,参考discordgo这个库的issue
bwmarrin/discordgo#852

使用v1/chat/completion接口,不能正常停止

我在postman中测试的:

  1. 当stream为true时,不会收到[DONE]这条消息,Discord中coze机器人发送完消息后,postman的请求就会阻塞停在那,一直不会停止;
  2. 当stream为false时,Discord中coze机器人发送完消息后,postman也一直处于请求状态,不会终止。

部署时出错

例行检查

  • 我已确认目前没有类似 issue
  • 我已确认我已升级到最新版本
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

问题描述

在Render上进行部署时出错

复现步骤

预期结果

相关截图

image

使用模型名来指定bot

例行检查

  • 我已确认目前没有类似 issue
  • 我已确认我已升级到最新版本
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

功能描述
请求密钥应该用来鉴权,而不是用于分配具体的bot,这个功能应该由模型名来实现
应用场景
coze可以为bot定义提示词,使用模型名来区分不同的bot更为合适

频道创建达到上限

[ERR] 2024/02/08 - 13:40:13 | unknown | 创建频道时异常 HTTP 400 Bad Request, {"message": "Maximum number of server channels reached (500)", "code": 30013}
[ERR] 2024/02/08 - 13:40:14 | 202402081340135422918704MMjHBYU | error sending message: HTTP 405 Method Not Allowed, {"message": "405: Method Not Allowed", "code": 0}

[功能增强] 强化频道新增/讨论串可行性

例行检查

  • 我已确认目前没有类似 issue
  • 我已确认我已升级到最新版本
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

功能描述

  • API中增加更详细的参数,可以让新增的频道在指定id的分类中
  • 考虑使用讨论串方案的可行性

应用场景
目前测试发现,在频道里使用讨论串功能,也是会话隔离的。
那么是否可以使用讨论串的方式来更好管理呢?

如果使用原有频道的方式,是否能指定分类id来创建呢,子频道继承分类的权限,避免直接暴露于大厅。

感谢!

请问能否支持SillyTavern

例行检查

  • 我已确认目前没有类似 issue
  • 我已确认我已升级到最新版本
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

功能描述
适配SillyTavern的openai反向代理,https://github.com/SillyTavern/SillyTavern
应用场景

能否增加配置多个coze机器人的功能

例行检查

  • 我已确认目前没有类似 issue
  • 我已确认我已升级到最新版本
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

功能描述

应用场景

第二天无法正常使用

例行检查

  • 我已确认目前没有类似 issue
  • 我已确认我已升级到最新版本
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

问题描述
部署完可以正常使用,第二天使用回报错,查看日志说他找不到频道和机器人
重启docker容器恢复正常

复现步骤

预期结果

相关截图
20240204_121714_937_copy

更多的link提取

例行检查

  • 我已确认目前没有类似 issue
  • 我已确认我已升级到最新版本
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

功能描述

大佬 有些回复的超链接的url能不能也单独提取出来
例如capcut的链接 现在是在content中用文本显示,希望能将链接的url提取出来放到embedUrls:

不用discord直接逆coze可以吗,discord有单条长度限制

例行检查

  • 我已确认目前没有类似 issue
  • 我已确认我已升级到最新版本
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

功能描述
不用discord直接逆coze可以吗,discord有单条长度限制
应用场景
discord有单条长度限制

feat:add prxoy support for server

rt:
[SYS] 2024/01/31 - 12:40:37 | COZE-DISCORD-PROXY v1.0.3 started
[FATAL] 2024/01/31 - 12:40:57 | [error opening connection, Get "https://discord.com/api/v9/gateway": context deadline exceeded (Client.Timeout exceeded while awaiting headers)]

curl返回的 embedUrls 中的Unicode编码

例行检查

  • 我已确认目前没有类似 issue
  • 我已确认我已升级到最新版本
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

问题描述
大佬
curl 画图 返回的 embedUrls 中的 & 被显示为\u0026 导致图片打不开
手动换回去就好了

您好,请问这个无法加入绘图的功能吗

您好,我在bot中设置了DALLE 3 的插件 ,在discord可以出图,但是在使用api后就无法出图了,请问一下有没有什么解决办法
还有一个是STREAM_REQUEST_OUT_TIME 设置 ,太短无法完全生成,太长会出现{
"error": true,
"message": "network error"
}
请问有没有办法让输入完之后直接结束而不是持续出现正在输入,这是我在 Chat gpt next web 上测试的
感谢您在百忙之中抽出空来阅读该信息

本项目的Java版本

地址:https://github.com/oddfar/coze-discord
使用SpringBoot3,也集成了Docker,功能目前如下

  • 支持 api 方式调用
  • 对话支持流式返回
  • 支持对话指定 Discord 频道、子频道,实现对话隔离支
  • 支持创建 Discord 频道、子频道、线程

安装求助

两个bot开通对应权限(Send Messages,Read Message History等)并邀请进服务器,记录服务器ID(GUILD_ID) (过程不在此赘述)。

请问如何开通权限进服务器?查了一圈还是不太清楚

关于并行对话的疑问

并非报告问题,想了解一个问题,可以的话希望能够帮忙解惑,感谢~

按我理解,这个项目是依赖 2 个 Bot 通过对话的形式进行交互,而这个交互是在 Discord 来中转的。这个过程中:

  1. 我通过 ChatGPT 客户端,发送请求。
  2. coze-discord-proxy 将数据,通过 Discord BotB,发送到 Discord Channel,并且,@了 Discord BotA 来发送消息。
  3. Discord BotA 对接了 Coze ,Coze 回复数据,最终,经有 Discord Channel,回复到 BotB,进而,数据通过 coze-discord-proxy 流转到 ChatGPT 客户端。

想了解的问题有 2 个:

1、关于对话轮数携带问题

ChatGPT 客户端如果我设置了对话数据为 5 轮,按我理解,客户端工具确实是会携带 5 轮会话的。然而我在 Discord Channel 中看到 Robot 在对话时,是没有携带多轮回话信息堆栈的。

并且,我如果将客户端的对话轮数设置为 2(也就是携带历史 2 条对话信息),我让它回答我们的对话第一个问题是什么,结果它可以回答到更早之前的第 11 条对话问题。这说明,ChatGPT 的客户端对话设置轮数,和实际的对话轮数,是不一样的。

想问的是:这个对话轮数,到底哪里会起到决定性作用?是 Coze 那边吗?如果是 Coze 那边,那 coze-discord-proxy 往 Coze 机器人发消息时,携带的数据轮数是多少呢?

2、关于对话并行发生时,是否可能会有干扰的问题

如果 ChatGPT 客户端是多人在使用,实际上,会在 DIscord Channel 中形成多人的对话,而且可能是并行回答的对话。

想问的是:这种多人对话是不是可能相互干扰上下文(比如有人在问编码,有人在问天气),最终形成相互干扰的多轮对话?甚至,并行对话发生时,有没有可能问题并行 @coze Bot,最终 coze-discord-proxy 再转发对话回复时,会串台(A 问的问题收到 B 的问题的回复,B 问的问题收到了 A 的问题的回复)?

第二天运行还是出错

例行检查

  • 我已确认目前没有类似 issue
  • 我已确认我已升级到最新版本
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

问题描述
{'error': {'message': '配置异常', 'type': 'invalid_request_error', 'param': '', 'code': 'discord_request_err'}}
复现步骤

预期结果

相关截图
如果没有的话,请删除此节。

提供一个Zeabur部署的多频道方案

机器人部署(实现会话隔离)

手动部署:

  1. 首先 fork 一份代码,修改Dockerfile文件(或者将原文件备份,再新增Dockerfile文件)
FROM deanxv/coze-discord-proxy:latest

RUN mkdir -p /app/coze-discord-proxy/data/config && chmod 777 /app/coze-discord-proxy/data/config
RUN printf '%s' "$BOT_CONFIG" | sed 's/\\/"/g' > /app/coze-discord-proxy/data/config/bot_config.json

WORKDIR /app/coze-discord-proxy/data
EXPOSE 7077

ENTRYPOINT ["/coze-discord-proxy"]
  1. 进入 Zeabur,使用github登录,进入控制台。

  2. 在 Service -> Add Service,选择 Git(第一次使用需要先授权),选择你 fork 的仓库。

  3. Deploy 会自动开始,先取消。

  4. 添加环境变量

    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:123,456,789

    BOT_CONFIG:

     [
        {
             "proxySecret": "123",
             "cozeBotId": "12***************31",
             "model": ["gpt-3.5","gpt-3.5-16k"], 
             "channelId": "12***************56"
        },
        {
             "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"
        }
     ]
    

image

  1. Redeploy。
  2. 在Networking中public生成一个域名,然后可以与漂亮国沟通了。

image

  1. 部署好,可以先自测,下面接口测试命令:

    curl -X 'POST' \
    'https://your.zeabur.app/api/chat' \
    -H 'accept: application/json' \
    -H 'proxy-secret: your key' \
    -H 'Content-Type: application/json' \
    -d '{
    "channelId": "your channelId",
    "model": "dall-e-3",
    "content": "画一只猪",
    "stream": true
    }'
    curl -X 'POST' \
     'https://your.zeabur.app/v1/chat/completions' \
     -H 'accept: application/json' \
     -H 'Authorization: your key' \
     -H 'Content-Type: application/json' \
     -d '{
     "channelId": "your channelId",
     "model": "gpt-4",
     "messages": [
       {
         "content": "鲁迅和周树人是两个人?",
         "role": "user"
       }
     ],
    "stream": true
    }'

image

关于/v1/chat/completions接口

最新的docker镜像是删除了之前的/api/chat接口?现在/v1/chat/completions的接口是请求哪里呢,发送请求没看见有在频道提问。

文生图没有返回图片url

例行检查

  • 我已确认目前没有类似 issue
  • 我已确认我已升级到最新版本
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

问题描述
discord里coze机器人生成完图片后接口里返回url是空的。
复现步骤

预期结果

相关截图
image

请求问题

问题描述
指定了频道ID,并没有在指定频道提问,而是在默认频道提问,没有使用openai接口

相关截图
image

问题咨询 环境变量BOT_TOKEN是?

例行检查

  • 我已确认目前没有类似 issue
  • 我已确认我已升级到最新版本
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

功能描述
环境变量BOT_TOKEN是 https://discord.com 的发送消息的Authorization 请求头吗还是
image
https://discord.com/developers 里面Bot的token,两个都试了,运行ip+端口提示404,运行日志看了显示:环境变量 COZE_BOT_ID 不可为当前服务 BOT_TOKEN 关联的 BOT_ID。请问是改哪里配置呢
应用场景

请问一下是不是非得使用discord ,可不可以不配置,使用slack

例行检查

  • 我已确认目前没有类似 issue
  • 我已确认我已升级到最新版本
  • 我理解并愿意跟进此 issue,协助测试和提供反馈
  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

功能描述
请问一下是不是非得使用discord ,可不可以不配置,使用slack
应用场景

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.