聆思大模型AI开发套件集成Coze调用GPT-4
❝上一篇《大模型赋能开发板被这家公司玩明白了》 我们已经详细介绍了聆思大模型 AI 开发套件以及聆思大模型平台,并实操了基于LLM_control二次开发拓展了天气查询、中英互译的能力。今天我们再来看看聆思大模型 AI 开发套件如何通过Coze Bot 使用 GPT-4 。
整体思路
聆思大模型AI开发套件集成Coze整体思路首先,介绍几个关键点:
- Coze 国际版支持 GPT-4 能力,可以将 Bot 部署到 Discord;
- 借助 coze-discord-proxy 代理 Discord 对话Coze-Bot,实现API形式请求GPT4对话模型/微调模型;
- 利用 LSPlatform 应用编排中的 http-request 去调用 API 以及联接开发板。
以此整体思路如上图,开发板和聆思大模型平台通过 SDK 拉通;聆听大模型平台应用编排网络节点调用 API;API 由部署在 Zeabur 上的 coze-discord-proxy 服务提供;coze-discord-proxy 服务实现了代理用户在Discord频道中发送信息,并调度两个Discord Bot(一个关联 Coze Bot,一个用来监听Discord消息)。按照交互梳理的流程如下:
- ① “小聆小聆”唤醒,语音交互
- ② 聆思大模型平台 http-request 节点调用 coze-discord-proxy服务
- ③ coze-discord-proxy 内部调用 discord (user)
- ④ discord 调用 coze (coze bot)
- ⑤ coze bot 返回对话
- ⑥ discord 返回对话 (watch bot)
- ⑦ coze-discord-proxy 返回对话
- ⑧ 聆思大模型平台返回对话到开发板
环境变量(coze-discord-proxy相关)
❝本文默认您已经拥有聆思大模型平台相关账号及权限,如没有请访问 platform.listenai.com。
❝本文默认您能正常访问 Discord、Coze国际版、Zeabur, 我们尝试了 coze.com 需要全局代理才能正常访问。
部署 coze-discord-proxy 的方式有很多种,本文以部署到 Zeabur 为例,我们需要的环境变量如下:
BOT_TOKEN=[用来监听Discord消息的bot(watch bot)的token]
GUILD_ID=[Discord 两个bot所在的服务器ID]
COZE_BOT_ID=[Discord被coze托管bot的ID]
CHANNEL_ID=[默认频道-在使用与openai对齐的接口时(/v1/chat/completions) 消息会默认发送到此频道]
USER_AUTHORIZATION=[Discord 当前用户的 token]
PROXY_SECRET=[请求头校验的值(前后端统一),后续接口调用需要的Authorization]
TZ=Asia/Shanghai
保姆级部署 coze-discord-proxy 的教程并非我们编写此文的目的,因此我们会更聚集于部署过程中的重点以及如何在开发板上调用。
详细教程请参考:通过接口调用Coze托管的discord-bot,实现免费使用GPT4和绘画
我们需要在 Discord 平台创建两个 Bot,并获取它们的token,为了方便区分我们姑且称为watch bot 和 coze bot,watch bot 用于监听消息后续需要将它的token配置到环境变量中,coze bot 用于cozen.com 平台发布bot到discord。这两个bot都需要添加到Discord同一个服务器(可新创建)中,并且都要赋予Administrator(管理员)权限。**记录 watch bot 的token,即为 BOT_TOKEN **
coze bot和watch bot权限配置如下图:
权限配置添加到同一服务器中,需要复制服务器ID之类的信息时记得先开启Discord开发者模式,具体操作路径(以网页版为例):点击左下角用户设置图标--新页面点击高级设置--打开开发者模式开关。之后
开发者模式右键服务器即可显示复制服务器ID,点击即可复制,这就是GUILD_ID:
这就是GUILD_ID同理右键频道即可显示复制频道ID,点击即可复制,这就是CHANNEL_ID:
这就是CHANNEL_ID接着我们在coze.com平台开发bot,并发布到discord,这里需要把 discord 中 coze bot 的token填写到coze平台。
discord coze bo我们这里使用的是 GPT-4 (抱歉盗用了ListenAI,就当推广吧,哈哈,见谅!):
coze GPT-4❝Tips: 如需更高级的自定义Coze Bot,请查看 Coze 文档:
接下来我们测试一下coze bot 有么有发布成功,如有回复那就是正常,并复制coze bot 的id,这就是COZE_BOT_ID:
这就是COZE_BOT_ID当然,如果此刻您打开了浏览器的调试界面(F12),在 devtool network 还能看到 message 请求,请求头中包含 Authorization ,这就是USER_AUTHORIZATION。之后在 coze-discord-proxy 服务就会代理这个用户来发送消息:
这就是USER_AUTHORIZATION至此,我们需要的环境变量都准备好了,接下去 zeabur.com 发布 coze-discord-proxy 服务吧。
发布 coze-discord-proxy 服务
这步因为我们使用的是zeabur.com的免费资源,因此部署过程中可能会提示升级套餐之后才给部署。我们的操作是删除再重新创建。
zeabur suspended部署的前提是需要将 coze-discord-proxy fork 到自己的账号下,方面 zeabur 上使用 git 的方式部署。
zeabur git基本上都是比较简单的操作,需要注意的是要配置环境变量:
zeabur variable发布成功之后我们还可自定义访问域名。也能访问到 coze-discord-proxy 服务 swagger 文档:
swagger至此,我们以及部署了拥有 GPT-4 能力的 API 服务。接下来我们将在聆思大模型平台接入这 API 服务。
聆思大模型平台接入 Coze API
上一篇文章中我们了解到ListenAI大模型平台应用编辑基于Node-RED,有基本的网络相关节点,今天的主角就是http-request节点。话不多说,我们看看文档:
http-request其实和代码中使用 http 类似,参数也是 url、method、headers 之类的,如果是前端工程师的话,肯定很熟悉这一套操作了。
http-request
请求方式选择POST
URL:填写您的Coze API 接口地址,如https://coze.zeabur.app/v1/chat/completions
添加头
Authorization值是前文您环境变量中的 PROXY_SECRET,用于简单鉴权
Accept:application/json
Content-Type:application/json
细心的小伙伴可能会发现, http-request前面加了一个前处理的节点,这是因为我们要组装发给Coze API的数据格式,可简单定义为:
const content = msg?._input?.content || '';
msg._input.content = {
"channelId": "1210469212355829770",
"messages": [
{
"content": content,
"role": "user"
}
],
"model": "",
};
return msg;
http-request前置处理
❝Tips: 此处仅作简单演示,您可自行实现创意节点。
为了确保调用没问题,我们还可以简单的调试一下,确定是使用的 Coze API。(我们暂时没能编排实现接入coze-discord-proxy的流式返回)
聆思大模型AI开发套件接入 Coze API
如同上一篇文章中的拓展开发,我们只需要将闲聊逻辑从调用内置星火认知大模型改为调用 Coze API 即可,开发板端代码无需修改。需要注意的是,处理网页版对话和硬件语音对话略有不同,还需要将返回内容转成语音下发。
- 前处理:
/**
* 闲聊前置处理节点
*/
const asrResult = msg._input.optAsrResult || msg._input.origin_content;
// 格式化传给API接口的数据
const reqData = {
"channelId": "",
"messages": [
{
"content": asrResult,
"role": "user"
}
],
"model": "",
};
// msg._input.content = reqData
msg._input.content = asrResult;
msg.payload = reqData
return msg;
- 后处理
//大模型回复内容
let content = msg.payload.choices[0]?.message?.content || '';
msg._output = {
stream: true
}
msg.payload = {
"text": content
}
return msg
最后记得重新部署,在端侧就能体验到 GPT-4 了。
❝Tips:流式输出的接口是有的,但对接出了的问题,http-request 有一定的局限性,后续可以尝试使用 axios 等模块实现。