一、Coze介绍
Coze是字节跳动在海外推出的AI聊天机器人和应用程序编辑开发平台。专为开发下一代AI聊天机器人而设计,该平台允许用户无论是否有编程经验,都能快速创建各种类型的聊天机器人,并轻松部署在不同的社交平台和消息传递应用程序上。
更多功能介绍可以查看Coze的官方文档:https://www.coze.com/docs/zh_cn/welcome.html
Coze官网:https://www.coze.com/
二、前提要求
- 确保您的本地PC能够科学上网,以便访问Coze和Discord
- 在部署Coze代理服务器时,确保服务器具备互联网访问权限,以便能够访问Discord的API接口。如果在国内服务器上部署,您可以参考以下文章实现科学上网
- 在服务器上安装Docker和Docker Compose服务,管理和运行coze proxy应用
三、创建Coze Bot
访问Coze官网,然后注册一个Coze账号,目前支持Google账号和手机号注册。说明:中国大陆地区的手机号也可以直接注册使用!
- 注册之后进入到Coze页面,然后点击
Create Bot
创建一个Bot
- 这里填写Bot的资料信息
四、发布到Discord
现在我们需要把Czoe Bot发布到我们的Discord服务器中,首先我们需要拥有一个自己的Discord服务器。
先登入Discord,你可以使用Discord客户端,也可以通过Discord网页端登入你的discord账号来继续下面的操作
这里我们需要创建两个Discord应用,应用程序的类型为Bot,一个是与coze bot进行绑定的应用,一个是用来向coze bot发起消息的应用,两个应用创建的步骤流程一致,都按照下面的步骤进行操作即可!确保创建完成之后记住对应应用的token和ID,后续配置coze-discord-proxy时候需要使用到
- 前往 Discord Developer Portal 并创建应用
- 在应用页面顶部,点击
新建应用
。填写应用名称后,即可创建一个新的 Discord 应用。
说明:ID如果忘记了,后面在频道里也可以获取到,但是Token只会展示一次,所以我们要复制保留下来,如果忘记了那就需要重新生成新的Token了
接下来,我们点击OAuth2 —-> URL Generator —-> bot —-> 按照下图勾选相应的权限
请注意,SCOPES 选择应用程序运行所需的范围,选择之后会出现 PERMISSIONS 权限选择,我们按图上进行勾选,页面底部会给你的应用程序生成邀请链接。您需要复制该链接,并在浏览器中访问它以便将应用添加到我们的服务器。
注意:这个权限我们只需要把与coze bot进行关联的应用的权限开启即可,另外一个主动向coze bot发消息的应用无需开启!!
可以看到我们的应用已经添加到了频道中了,上面创建的这个应用我们是用来与coze bot进行关联的,然后你在按照上面的步骤创建另外一个应用(注意:创建另外一个应用时开启Discord权限这部分内容请跳过),用来向托管coze bot的Discord应用发送消息。
五、搭建Coze代理
现在,我们借用github大佬开源的代理项目,实现通过接口调用被coze
托管的discord-bot
。目前此项目对于个人使用没问题。大佬的交流群:TG Group
原文链接:https://www.dqzboy.com
注意:我这里使用的是Discord客户端,非网页端,网页端操作也一样!先确认开启了开发者模式,如果没有开启按照下面进行手动开启。
服务器ID获取 和 频道ID获取,具体操作如下图:
# 创建存储目录
mkdir -p /data/coze-discord-proxy && cd $_
vim docker-compose.yml
version: '3.4'
services:
coze-discord-proxy:
image: deanxv/coze-discord-proxy:latest
# 如果你的网络环境访问docker hub不稳定的话,可以把上面的镜像地址改为下面的地址进行下载镜像
#image: dockerproxy.com/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 # 此处Toekn为我们主动发送消息的Discord机器人的Token
- GUILD_ID=119xxxxxxxx796 # 此处为两个Discord机器人所在的同一个服务器ID
- COZE_BOT_ID=119xxxxxxxx7 # 此处为与Coze Bot进行绑定的Discord机器人的ID
- CHANNEL_ID=119xxxxxx24 # [必填]默认频道(就是创建服务器之后默认会有个常规的频道)-在使用与openai对齐的接口时(/v1/chat/completions) 消息会默认发送到此频道
- CHANNEL_AUTO_DEL_TIME=0 # [可选]频道自动删除时间(秒) 内的历史消息,此参数为每次对话完成后自动删除频道的历史消息(默认为5s),为空或0时则不删除,推荐不设置(但是如果频道消息满了,需要自行到频道里手动删除)
- PROXY_SECRET=sk-123456 # [可选]接口密钥-修改此行为请求头校验的值(多个请以,分隔;前后端统一)你可以理解为API KEY
#- PROXY_URL=http://xx.xx.xx.xx:7890 # [可选]如果你服务器访问不了Discord API,那么尝试配置代理
- TZ=Asia/Shanghai
# 部署服务
docker-compose up -d
# 检查容器服务运行状况
docker ps
docker logs -f coze-discord-proxy
BOT_TOKEN
:此处Toekn为我们主动向Coze Bot 发送消息的Discord应用TokenGUILD_ID
:我们创建的2个Discord Bot机器人所在的服务器IDCOZE_BOT_ID
:这个是我们创建的两个Discord Bot其中一个与Coze关联的Bot IDCHANNEL_AUTO_DEL_TIME:60
[可选]频道自动删除时间(秒) 内的历史消息,此参数为每次对话完成后自动删除频道的历史消息(默认为5s),为空或0时则不删除,推荐不设置(但是如果频道消息满了,需要自行到频道里手动删除)PROXY_SECRET
:[可选]请求头校验的值(前后端统一),配置此参数后,每次发起请求时请求头加上proxy-secret
参数,即header
中添加proxy-secret:key
CHANNEL_ID
: [可选]默认频道-在使用与openai对齐的接口时(/v1/chat/completions) 为[必填]消息会默认发送到此频道REQUEST_OUT_TIME:60
[可选]对话接口非流响应下的请求超时时间STREAM_REQUEST_OUT_TIME:60
[可选]对话接口流响应下的每次流返回超时时间PROXY_URL:http://xx.xx.xx.xx:7890
[可选]如果你服务器访问不了Discord,那么尝试配置代理。支持http\https\socks
多个机器人呢,我们只需要创建与Coze Bot进行关联的机器人就可以,主动向Coze Bot发消息的机器人我们上面已经创建了,只需要一个就可以
说明:创建流程跟文章第四节的操作流程其实是一样的,然后创建完成配置权限并把机器人拉到服务器里
- 多个机器人创建步骤,参考下图重复创建多个机器人即可。
- 在
docker-compose.yml
文件同级目录下创建data/config/bot_config.json
文件
目前 coze-discord-proxy v3.0.0版本已经实现对话隔离,下面配置文件中的channelId(频道ID)只是为了实现Bot可以保持活跃
# 例如我这里docker-compose.yml 文件存放在 /data/coze-discord-proxy/
]# cd /data/coze-discord-proxy/
]# mkdir -p data/config/
# 创建 bot_config.json 文件并进行配置
]# vim data/config/bot_config.json
[
{
"proxySecret": "sk-123", // 接口请求密钥(PROXY_SECRET,可以理解为API KEY)
"cozeBotId": "12***************31", // 此处为与Coze Bot进行绑定的Discord机器人的ID
"channelId": "12***************56" // discord频道ID(机器人必须在此频道所在的服务器)
},
{
"proxySecret": "sk-456",
"cozeBotId": "12***************64",
"channelId": "12***************78"
},
{
"proxySecret": "sk-789",
"cozeBotId": "12***************12",
"channelId": "12***************24"
}
]
- 配置文件创建好之后,注意修改
docker-compose.yml
文件中PROXY_SECRET
参数与配置文件中proxySecret
值一一对应(标红处)
vim docker-compose.yml
version: '3.4'
services:
coze-discord-proxy:
image: deanxv/coze-discord-proxy:latest
# 如果你的网络环境访问docker hub不稳定的话,可以把上面的镜像地址改为下面的地址进行下载镜像
#image: dockerproxy.com/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 # 此处Toekn为我们主动发送消息的Discord机器人的Token
- GUILD_ID=119xxxxxxxx796 # 此处为两个Discord机器人所在的同一个服务器ID
- COZE_BOT_ID=119xxxxxxxx7 # 此处为与Coze Bot进行绑定的Discord机器人的ID
- CHANNEL_ID=119xxxxxx24 # [必填]默认频道(就是创建服务器之后默认会有个常规的频道)-在使用与openai对齐的接口时(/v1/chat/completions) 消息会默认发送到此频道
- CHANNEL_AUTO_DEL_TIME=0 # [可选]频道自动删除时间(秒) 内的历史消息,此参数为每次对话完成后自动删除频道的历史消息(默认为5s),为空或0时则不删除,推荐不设置(但是如果频道消息满了,需要自行到频道里手动删除)
- PROXY_SECRET=sk-123,sk-456,sk-789 # [可选]接口密钥-修改此行为请求头校验的值(多个请以,分隔;前后端统一)你可以理解为API KEY
#- PROXY_URL=http://xx.xx.xx.xx:7890 # [可选]如果你服务器访问不了Discord API,那么尝试配置代理
- TZ=Asia/Shanghai
- 重启coze-discord-proxy容器使其配置加载生效
docker-compose restart
# 查看容器运行日志
docker logs -f coze-discord-proxy
六、接入第三方平台
现在我们可以使用此代理接口来接入第三方web平台,实现openai的接口访问。这里演示的前端项目为chatgpt-web。
支持openai标准的APi对话接口、绘图等。注意绘图功能需要在coze bot安装DALLE 3插件,插件安装完成之后最好重新发布一下coze bot。
coze proxy接口地址:http(s)://host:port
现在,我们发送个消息进行测试一下,是否可以正常返回会话数据。
接入多个机器人的话,我们需要配置API,这里的API Key就填写PROXY_SECRET
,参考下图
七、Coze Proxy服务维护
后期coze proxy服务会进行更新、重启等操作,可以使用下面的一个简单脚本实现,方便我们进行维护管理。
~]# vi manage_coze_discord.sh
#!/usr/bin/env bash
# WORKING_DIR:指定docker-compose.yml文件所在的目录
WORKING_DIR="/data/coze-discord-proxy"
cd "${WORKING_DIR}"
CONTAINER_NAME="coze-discord-proxy"
IMAGE_NAME="deanxv/coze-discord-proxy"
stop_and_remove_container() {
# 检查容器是否存在并停止并移除
if docker ps -a --format '{{.Names}}' | grep -Eq "^${CONTAINER_NAME}$"; then
docker-compose down
fi
}
pull_image() {
docker pull "${IMAGE_NAME}"
}
remove_none_tags() {
# 删除特定镜像的所有未标记版本
docker images | grep "${IMAGE_NAME}" | awk '/<none>/{print $3}' | xargs -r docker rmi
}
echo "请选择操作:"
echo "1) 重启"
echo "2) 更新"
echo "3) 新装"
echo "4) 卸载"
read -e -p "输入对应数字并按 Enter 键: " user_choice
case $user_choice in
1)
echo "重启中..."
docker-compose restart
;;
2)
echo "更新中..."
stop_and_remove_container
pull_image
docker-compose up -d
remove_none_tags
;;
3)
echo "新装中..."
stop_and_remove_container
pull_image
docker-compose up -d
;;
4)
echo "卸载中..."
stop_and_remove_container
docker rmi "${IMAGE_NAME}"
remove_none_tags
;;
*)
echo "输入了无效的选择。请重新运行脚本并选择1-4的选项。"
;;
esac
# 添加执行权限
~]# chmod +x manage_coze_discord.sh
# 执行脚本
~]# ./manage_coze_discord.sh