通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画

一、Coze介绍


Coze是字节跳动在海外推出的AI聊天机器人和应用程序编辑开发平台。专为开发下一代AI聊天机器人而设计,该平台允许用户无论是否有编程经验,都能快速创建各种类型的聊天机器人,并轻松部署在不同的社交平台和消息传递应用程序上。

更多功能介绍可以查看Coze的官方文档:https://www.coze.com/docs/zh_cn/welcome.html

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

二、前提要求


  1. 确保您的本地PC能够科学上网,以便访问Coze和Discord
  2. 在部署Coze代理服务器时,确保服务器具备互联网访问权限,以便能够访问Discord的API接口。如果在国内服务器上部署,您可以参考以下文章实现科学上网
  1. 在服务器上安装Docker和Docker Compose服务,管理和运行coze proxy应用

三、创建Coze Bot


访问Coze官网,然后注册一个Coze账号,目前支持Google账号和手机号注册。说明:中国大陆地区的手机号也可以直接注册使用!

  1. 注册之后进入到Coze页面,然后点击Create Bot创建一个Bot
通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画
  1. 这里填写Bot的资料信息
通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画
通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画

四、发布到Discord


现在我们需要把Czoe Bot发布到我们的Discord服务器中,首先我们需要拥有一个自己的Discord服务器。

先登入Discord,你可以使用Discord客户端,也可以通过Discord网页端登入你的discord账号来继续下面的操作

通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画

这里我需要创建两个Discord应用,应用程序的类型为Bot,一个是与coze bot进行绑定的应用,一个是用来向coze bot发起消息的应用,两个应用创建的步骤流程一致,都按照下面的步骤进行操作即可!确保创建完成之后记住对应应用的token和ID,后续配置coze-discord-proxy时候需要使用到

  • 前往 Discord Developer Portal 并创建应用
  • 在应用页面顶部,点击新建应用。填写应用名称后,即可创建一个新的 Discord 应用。
通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画

说明:ID如果忘记了,后面在频道里也可以获取到,但是Token只会展示一次,所以我们要复制保留下来,如果忘记了那就需要重新生成新的Token了

通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画
通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画

接下来,我们点击OAuth2 —-> URL Generator —-> bot —-> 按照下图勾选相应的权限

请注意,SCOPES 选择应用程序运行所需的范围,选择之后会出现 PERMISSIONS 权限选择,我们按图上进行勾选,页面底部会给你的应用程序生成邀请链接。您需要复制该链接,并在浏览器中访问它以便将应用添加到我们的服务器。

通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画

注意:这个权限我们只需要把与coze bot进行关联的应用的权限开启即可,另外一个主动向coze bot发消息的应用无需开启!!

通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画
通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画

可以看到我们的应用已经添加到了频道中了,上面创建的这个应用我们是用来与coze bot进行关联的,然后你在按照上面的步骤创建另外一个应用(注意:创建另外一个应用时开启Discord权限这部分内容请跳过),用来向托管coze bot的Discord应用发送消息。

通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画

五、搭建Coze代理


现在,我们借用github大佬开源的代理项目,实现通过接口调用被coze托管的discord-bot。目前此项目对于个人使用没问题。大佬的交流群:TG Group

原文链接:https://www.dqzboy.com

项目开源地址:https://github.com/deanxv/coze-discord-proxy

注意:我这里使用的是Discord客户端,非网页端,网页端操作也一样!先确认开启了开发者模式,如果没有开启按照下面进行手动开启。

通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画
通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画

服务器ID获取 和 频道ID获取,具体操作如下图:

通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画
通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画

# 创建存储目录

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

通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画
  1. BOT_TOKEN:此处Toekn为我们主动向Coze Bot 发送消息的Discord应用Token
  2. GUILD_ID:我们创建的2个Discord Bot机器人所在的服务器ID
  3. COZE_BOT_ID:这个是我们创建的两个Discord Bot其中一个与Coze关联的Bot ID
  4. CHANNEL_AUTO_DEL_TIME:60 [可选]频道自动删除时间(秒) 内的历史消息,此参数为每次对话完成后自动删除频道的历史消息(默认为5s),为空或0时则不删除,推荐不设置(但是如果频道消息满了,需要自行到频道里手动删除)
  5. PROXY_SECRET:[可选]请求头校验的值(前后端统一),配置此参数后,每次发起请求时请求头加上proxy-secret 参数,即header中添加 proxy-secret:key
  6. CHANNEL_ID: [可选]默认频道-在使用与openai对齐的接口时(/v1/chat/completions) 为[必填]消息会默认发送到此频道
  7. REQUEST_OUT_TIME:60  [可选]对话接口非流响应下的请求超时时间
  8. STREAM_REQUEST_OUT_TIME:60  [可选]对话接口流响应下的每次流返回超时时间
  9. PROXY_URL:http://xx.xx.xx.xx:7890 [可选]如果你服务器访问不了Discord,那么尝试配置代理。支持http\https\socks

多个机器人呢,我们只需要创建与Coze Bot进行关联的机器人就可以,主动向Coze Bot发消息的机器人我们上面已经创建了,只需要一个就可以

说明:创建流程跟文章第四节的操作流程其实是一样的,然后创建完成配置权限并把机器人拉到服务器里

  1. 多个机器人创建步骤,参考下图重复创建多个机器人即可。
通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画
通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画


  1. 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"

}

]

  1. 配置文件创建好之后,注意修改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

  1. 重启coze-discord-proxy容器使其配置加载生效

docker-compose restart

# 查看容器运行日志

docker logs -f coze-discord-proxy

通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画

六、接入第三方平台


现在我们可以使用此代理接口来接入第三方web平台,实现openai的接口访问。这里演示的前端项目为chatgpt-web

支持openai标准的APi对话接口、绘图等。注意绘图功能需要在coze bot安装DALLE 3插件,插件安装完成之后最好重新发布一下coze bot。

coze proxy接口地址:http(s)://host:port

通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画

现在,我们发送个消息进行测试一下,是否可以正常返回会话数据。

通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画
通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画

接入多个机器人的话,我们需要配置API,这里的API Key就填写PROXY_SECRET,参考下图

通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画
通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画
通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画

七、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

版权声明:limingdao 发表于 2024-04-08 21:18:30。
转载请注明:通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画 | 楚门的1984