deanxv / coze-discord-proxy Goto Github PK
View Code? Open in Web Editor NEW代理Discord对话Coze-Bot,实现以API形式请求GPT4模型,提供对话、文生图、图生文、知识库检索等功能。
License: GNU General Public License v3.0
代理Discord对话Coze-Bot,实现以API形式请求GPT4模型,提供对话、文生图、图生文、知识库检索等功能。
License: GNU General Public License v3.0
请问作者是否有对接oneapi的计划打算呢
例行检查
功能描述
环境变量BOT_TOKEN是 https://discord.com 的发送消息的Authorization 请求头吗还是
https://discord.com/developers 里面Bot的token,两个都试了,运行ip+端口提示404,运行日志看了显示:环境变量 COZE_BOT_ID 不可为当前服务 BOT_TOKEN 关联的 BOT_ID。请问是改哪里配置呢
应用场景
😭
可能的原因:
1、你discord提问的机器人提问上限了
解决方案:
更换提问的机器人
发消息没反应,上discord才发现bot离线了
例行检查
功能描述
请问一下是不是非得使用discord ,可不可以不配置,使用slack
应用场景
例行检查
功能描述
有时回复时间过长,会导致vercel无法处理
Your function was stopped as it did not return an initial response within 25s
应用场景
兼容vercel应用
期望支持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
}
我在postman中测试的:
例行检查
功能描述
不用discord直接逆coze可以吗,discord有单条长度限制
应用场景
discord有单条长度限制
地址:https://github.com/oddfar/coze-discord
使用SpringBoot3,也集成了Docker,功能目前如下
例行检查
问题描述
进行多机器人部署时,在环境变量中写入的机器人一切正常,但是通过data/config/bot_config.json部署的多机器人会不断提示authorization(proxy-secret)校验失败
这个问题在pull到今天的新版本后出现,昨天使用一切正常
复现步骤
使用bot_config.json内配置的proxy-secret通过one-api请求api
预期结果
正常返回
两个bot开通对应权限(Send Messages,Read Message History等)并邀请进服务器,记录服务器ID(GUILD_ID) (过程不在此赘述)。
请问如何开通权限进服务器?查了一圈还是不太清楚
例行检查
功能描述
请求密钥应该用来鉴权,而不是用于分配具体的bot,这个功能应该由模型名来实现
应用场景
coze可以为bot定义提示词,使用模型名来区分不同的bot更为合适
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)]
例行检查
功能描述
由后端维护一个 Discord Channel Pool, 主要特性如下
/v1/chat/completions
中某 payload
如 create_channel == True
时先创建 channel 再对话./clear
发起新对话.Note
此特性较为复杂, 仅为推荐, 开发者酌情处理.
例行检查
功能描述
大佬 有些回复的超链接的url能不能也单独提取出来
例如capcut的链接 现在是在content中用文本显示,希望能将链接的url提取出来放到embedUrls:
例行检查
问题描述
/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
预期结果
根据文档应该都行把,或者改改文档, 作为十分相信文档的人,怀疑了半天是那里错了
相关截图
如果没有的话,请删除此节。
最新的docker镜像是删除了之前的/api/chat接口?现在/v1/chat/completions的接口是请求哪里呢,发送请求没看见有在频道提问。
[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}
例行检查
功能描述
应用场景
主机不支持docker虚拟化,希望能直接以二进制运行从配置文件中读取变量
不知道下面的策略是否可行:
1.创建频道
2.把所有messages打包作为一条消息
3.向discord发送消息并获取回复
4.删除频道
如果这样可行的话,v1/chat/completion可能更接近对齐一些
例行检查
功能描述
适配SillyTavern的openai反向代理,https://github.com/SillyTavern/SillyTavern
应用场景
手动部署:
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"]
进入 Zeabur,使用github登录,进入控制台。
在 Service -> Add Service,选择 Git(第一次使用需要先授权),选择你 fork 的仓库。
Deploy 会自动开始,先取消。
添加环境变量
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"
}
]
部署好,可以先自测,下面接口测试命令:
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
}'
对接oneapi时
每一次开启新对话都在一个新的子频道中
保留对话历史,又能够避免对话上下文混淆
并非报告问题,想了解一个问题,可以的话希望能够帮忙解惑,感谢~
按我理解,这个项目是依赖 2 个 Bot 通过对话的形式进行交互,而这个交互是在 Discord 来中转的。这个过程中:
coze-discord-proxy
将数据,通过 Discord BotB,发送到 Discord Channel,并且,@了 Discord BotA 来发送消息。想了解的问题有 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 的问题的回复)?
想问一下,现在如果使用v1接口请求,会话隔离需要手动指定频道id实现么?能否根据v1接口请求参数,自动实现会话隔离。
例行检查
问题描述
{'error': {'message': '配置异常', 'type': 'invalid_request_error', 'param': '', 'code': 'discord_request_err'}}
复现步骤
预期结果
相关截图
如果没有的话,请删除此节。
例行检查
功能描述
应用场景
如题,这个怎么解决?也有成功的时候,但是经常报这个错误。
API Error: Status Code 401, {"error":{"message":"authorization(proxy-secret)校验失败","type":"invalid_request_error","param":"","code":"invalid_authorization"}}
我没有配置PROXY_SECRET值,在NextChat中直接可用,但是在ChatBox出现了这个报错
例行检查
功能描述
应用场景
目前测试发现,在频道里使用讨论串功能,也是会话隔离的。
那么是否可以使用讨论串的方式来更好管理呢?
如果使用原有频道的方式,是否能指定分类id来创建呢,子频道继承分类的权限,避免直接暴露于大厅。
感谢!
可以请求,机器人也将我的消息发给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
例行检查
问题描述
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"
}
}
复现步骤
预期结果
例行检查
问题描述
大佬
curl 画图 返回的 embedUrls 中的 & 被显示为\u0026 导致图片打不开
手动换回去就好了
您好,我在bot中设置了DALLE 3 的插件 ,在discord可以出图,但是在使用api后就无法出图了,请问一下有没有什么解决办法
还有一个是STREAM_REQUEST_OUT_TIME 设置 ,太短无法完全生成,太长会出现{
"error": true,
"message": "network error"
}
请问有没有办法让输入完之后直接结束而不是持续出现正在输入,这是我在 Chat gpt next web 上测试的
感谢您在百忙之中抽出空来阅读该信息
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.