17

huqi · 2月24日 · 广东

【聆思大模型AI开发套件】集成Coze调用GPT-4

上一篇《大模型赋能开发板被这家公司玩明白了》 我们已经详细介绍了聆思大模型 AI 开发套件以及聆思大模型平台,并实操了基于LLM_control二次开发拓展了天气查询、中英互译的能力。今天我们再来看看聆思大模型 AI 开发套件如何通过Coze Bot 使用 GPT-4 。

整体思路

聆思大模型AI开发套件集成Coze整体思路

首先,介绍几个关键点:

  1. Coze 国际版支持 GPT-4 能力,可以将 Bot 部署到 Discord;
  2. 借助 coze-discord-proxy 代理 Discord 对话Coze-Bot,实现API形式请求GPT4对话模型/微调模型;
  3. 利用 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 文档:[](https://www.coze.com/docs/wel...)

接下来我们测试一下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的流式返回
http-request debug

聆思大模型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 等模块实现。
推荐阅读
关注数
5175
内容数
100
聆思科技官方专栏,专注AIOT芯片,持续分享有趣的解决方案。商务合作微信:listenai-csk 技术交流QQ群:825206462
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息