关于mqtt:当-MQTT-遇上-ChatGPT探索可自然交互的物联网智能应用

51次阅读

共计 6478 个字符,预计需要花费 17 分钟才能阅读完成。

前言

随着物联网技术的迅猛发展,人与设施、设施与设施之间的互动已变得不再艰难,而如何更加天然、高效、智能地实现交互则成为物联网畛域新的挑战。

近期,由 OpenAI 公布的 ChatGPT、GPT-3.5 和 GPT-4 等先进大语言模型(LLM)及其利用在寰球范畴内迅速遍及,为通用人工智能(AGI,Artificial General Intelligence)与物联网畛域的联合带来了更多可能性。

作为一款先进的自然语言解决利用,ChatGPT 凭借其卓越的自然语言解决能力可轻松实现人与机器的天然对话。而物联网畛域的支流协定 MQTT(Message Queuing Telemetry Transport)通过轻量级、低带宽占用的通信形式以及公布 / 订阅模型,保障了数据的实时传输与高效解决。

咱们由此能够大胆构想,将 MQTT 协定与 ChatGPT 联合应用,能够更加轻松地实现物联网畛域的人机智能交互:

  • 在智能家居畛域,用户能够通过与 ChatGPT 天然对话来管制家中的智能设施,进步生活品质。
  • 在工业自动化畛域,ChatGPT 能够帮忙工程师更疾速地剖析设施数据,进步生产效率。

基于此,本文将探讨如何将 MQTT 协定与 ChatGPT 这样的自然语言解决利用相结合,同时将通过一个简略的搭建示例来展现联合后的利用场景,为读者摸索物联网智能利用提供一些思路。

根底概念

在开始前,咱们须要先简略理解对于 MQTT 与 ChatGPT 的一些基本概念。

MQTT 协定

如上文所提,MQTT 协定是一种基于公布 / 订阅模式的轻量级音讯传输协定,目前曾经广泛应用于物联网、挪动互联网、智能硬件、车联网、智慧城市、近程医疗、电力、石油与能源等畛域。

应用 MQTT 协定连贯海量物联网设施须要 MQTT 服务器这一要害组件。下文的方案设计中咱们将采纳大规模分布式物联网 MQTT 音讯服务器 EMQX,实现海量物联网设施的高效牢靠连贯以及音讯与事件流数据的实时处理散发。

之后,咱们就能够应用 MQTT 客户端来连贯 MQTT 服务器,实现与物联网设施的通信。本文中采纳的是开源的跨平台 MQTT 客户端 MQTTX,它蕴含桌面、命令行和 Web 端的利用,能够轻松实现与 MQTT 服务器的连贯测试,帮忙开发者疾速开发和调试 MQTT 服务及利用。

ChatGPT

ChatGPT 是一款自然语言解决利用,它基于 OpenAI 的 GPT-3.5 和 GPT-4 等先进大语言模型构建。GPT(Generative Pre-trained Transformer)是一种深度学习模型,以其弱小的文本生成和理解能力而闻名。ChatGPT 可能了解和生成自然语言,与用户进行晦涩、天然的对话。而要实现 ChatGPT 的自然语言解决能力,咱们就须要应用 OpenAI 提供的 API 来与 GPT 模型进行交互。

方案设计与筹备工作

基于 MQTT 协定和 ChatGPT 的能力,咱们将设计一个计划来实现两者的联合和互相操作。

为实现相似 ChatGPT 的自然语言解决性能,咱们将再编写一个客户端脚本,在脚本中应用 OpenAI 提供的 API 来与 GPT 模型进行交互。当这个脚本中的 MQTT 客户端接管到音讯并转发至 API 时,就会生成相应的自然语言响应,之后,这个响应音讯将被公布至特定的 MQTT 主题,以实现 ChatGPT 与 MQTT 客户端之间的交互循环。

通过这个设计方案,咱们将演示 ChatGPT 与 MQTT 协定之间进行音讯接管、解决和转发等环节的互操作流程。

首先,请依照以下步骤筹备所需的工具和资源。

  • 装置 EMQX:

    能够应用 Docker 疾速装置和启动 EMQX 5.0:

    docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:latest

    除 Docker 装置外,EMQX 还反对应用 RPM 或 DEB 包装置,具体装置办法请参考 EMQX 5.0 装置指南。

  • 装置 MQTTX 桌面端利用:

    进入到 MQTTX 官网,抉择对应的操作系统和 CPU 架构的版本,点击下载后装置。

  • 注册 OpenAI 账户并获取 API 密钥:

    进入到 OpenAI 后,创立或登录到您的账户。实现后,点击右上角,抉择 View API Keys,在 API keys 栏目下,点击 Create new secret key 以生成一个新的 API 密钥。请妥善保存此密钥,因为它将在后续的程序中用于 API 认证。

实现上述步骤后,咱们曾经领有了将 MQTT 协定与 ChatGPT 利用相结合所需的工具和资源。对于如何利用 OpenAI 的 API 与 GPT 语言模型互动,您能够查阅 OpenAI 文档以取得具体的领导和学习材料。

代码实现

资源和环境筹备实现后,咱们将应用 Node.js 环境构建一个 MQTT 客户端,此客户端将通过 MQTT 主题接管音讯,将数据发送至 OpenAI API,并通过 GPT 模型生成自然语言。生成的自然语言将随后公布到指定的 MQTT 主题以实现集成交互。当然,您也能够依据本人的需要和相熟水平抉择 Python、Golang 等其余编程语言。为了便于直观演示,咱们将间接应用 API,但您也能够抉择应用官网库,它为 Node.js 和 Python 提供了更加简洁的应用形式。

更多信息请参考:OpenAI Libraries。

  1. 筹备 Node.js 环境:确保曾经装置了 Node.js(倡议应用 v14.0 或更高版本)。创立一个新的我的项目文件夹,并应用 npm init 命令初始化我的项目。而后,应用以下命令装置必要的依赖包:

    npm init -y
    npm install axios mqtt dotenv

    axios 用于发送 HTTP 申请,mqtt 用于连贯 MQTT 服务器,dotenv 用于加载环境变量。

  2. 应用环境变量:创立一个名为 .env 的文件,并在其中增加您的 OpenAI API 密钥:

    OPENAI_API_KEY=your_openai_api_key
  3. 编写代码:新建一个 index.js 文件,并在文件中实现连贯 MQTT 服务器,订阅指定的 MQTT 主题,并监听音讯。当接管到音讯后,应用 axios 发送 HTTP 申请至 OpenAI API,生成自然语言回复,并将回复公布到指定的 MQTT 主题下,以下将列出每个步骤的 要害代码,供您参考:

    • 应用 mqtt 库连贯到 MQTT 服务器,连贯胜利后并默认订阅 chatgpt/request/+ 主题用于接管发送过去的 MQTT 音讯:

      const host = "127.0.0.1";
      const port = "1883";
      const clientId = `mqtt_${Math.random().toString(16).slice(3)}`;
      const OPTIONS = {
        clientId,
        clean: true,
        connectTimeout: 4000,
        username: "emqx",
        password: "public",
        reconnectPeriod: 1000,
      };
      const connectUrl = `mqtt://${host}:${port}`;
      const chatGPTReqTopic = "chatgpt/request/+";
      const client = mqtt.connect(connectUrl, OPTIONS);
    • 编写 genText 异步函数,接管 userId 参数,并应用 axios 创立了一个 HTTP 客户端实例,在 HTTP Headers 中应用 OpenAI API 密钥进行认证,而后向 OpenAI API 发送一个 POST 申请,用于生成自然语言回复。生成的回复内容再通过 MQTT 客户端公布到用户订阅的特定主题上,用来接管回复。而历史音讯则被存储在 Messages 数组中:

      // Add your OpenAI API key to your environment variables in .env
      const OPENAI_API_KEY = process.env.OPENAI_API_KEY;
      let messages = []; // Store conversation history
      const maxMessageCount = 10;
      const http = axios.create({
        baseURL: "https://api.openai.com/v1/chat",
        headers: {
          "Content-Type": "application/json",
          Authorization: `Bearer ${OPENAI_API_KEY}`,
        },
      });
      const genText = async (userId) => {
        try {const { data} = await http.post("/completions", {
            model: "gpt-3.5-turbo",
            messages: messages[userId],
            temperature: 0.7,
          });
          if (data.choices && data.choices.length > 0) {const { content} = data.choices[0].message;
            messages[userId].push({role: "assistant", content: content});
            if (messages[userId].length > maxMessageCount) {messages[userId].shift(); // Remove the oldest message}
            const replyTopic = `chatgpt/response/${userId}`;
            client.publish(replyTopic, content, { qos: 0, retain: false}, (error) => {if (error) {console.error(error);
              }
            });
          }
        } catch (e) {console.log(e);
        }
      };
    • 最初通过监听主题为 chatgpt/request/+ 的音讯,将接管到的音讯存储到 Messages 数组中,并调用 genText 函数生成自然语言回复并在函数内间接发送到用户订阅的特定主题上。历史音讯最大数量为 10 条:

      client.on("message", (topic, payload) => {
        // Check if the topic is not the one you're publishing to
        if (topic.startsWith(chatGPTReqTopicPrefix)) {const userId = topic.replace(chatGPTReqTopicPrefix, "");
          messages[userId] = messages[userId] || [];
          messages[userId].push({role: "user", content: payload.toString() });
          if (messages[userId].length > maxMessageCount) {messages[userId].shift(); // Remove the oldest message}
          genText(userId);
        }
      });
  4. 运行该脚本服务:

    node index.js

至此,咱们就实现该演示我的项目的根底性能局部,除根底性能外,该代码还实现了用户间的拜访隔离,只需增加不同的后缀在特定主题中。通过存储之前的音讯历史,GPT 模型还能够了解对话中上下文中的语境,并依据之前的对话生成更加连贯和合乎语境的回复。

残缺的代码可在 GitHub 的 openai-mqtt-nodejs 中查看到。

另一种计划

除上述示例外,咱们也能够间接应用 EMQX 提供的规定引擎和数据桥接性能中的 Webhook 来实现疾速开发。

EMQX 反对设置规定,当向特定主题公布音讯时触发 Webhook 回调。咱们只须要编写一个简略的 Web 服务,应用 OpenAI API 与 GPT 模型进行交互并通过 HTTP 响应将生成的回复,能够通过新建 MQTT 客户端公布到指定主题,也能够间接应用 EMQX 的 Publish API 来实现该操作,最终实现集成交互的目标。

对于已有 Web 服务的用户来说,这种形式能够最大限度地节俭开发成本,疾速实现 PoC 或 Demo。其长处是无需编写独立的 MQTT 客户端,能够利用 EMQX 规定引擎简化集成流程和灵活处理数据。然而,仍须要编写和保护 Web 服务,对于简单的利用场景,Webhook 可能不够不便易用。

因而,上述提到的计划各有劣势,咱们能够依据理论业务需要和开发者技术水平抉择更适合的计划。但无论哪种形式,EMQX 作为 MQTT 基础设施都为系统集成提供了重要反对,使开发者能够借此疾速构建我的项目原型与推动数字化转型。

Demo 展现

实现 MQTT 客户端与 GPT 模型的交互的实例开发后,咱们就能够应用 MQTTX 桌面客户端来测试此演示我的项目了。MQTTX 的用户界面相似于聊天软件,使页面操作更加简化,因而更适宜演示对于对话机器人的交互。

首先,咱们须要在 MQTTX 中创立一个新的连贯,连贯到上述代码的中的同一个 MQTT 服务器,例如:127.0.0.1,而后订阅 chatgpt/response/demo 主题,用于接管回复,并向 chatgpt/request/demo 主题发送音讯。这里的 demo 后缀能够替换为其余的字符串,以实现用户间的拜访隔离,咱们能够通过发送一个 Hello 音讯来测试一下:

接下来,咱们模仿一些更简单的演示环境,如果某个传感器的温度超过了预设的阈值,ChatGPT 机器人会发送一个告警音讯到另一个 MQTT 主题,该主题被连贯到一个监控设施,如智能手表或智能音箱。监控设施收到告警音讯后,能够应用自然语言技术将告警信息转换为语音,以便用户能够更不便地接管和了解。

例如咱们还能够再创立一个智能家居环境,其中包含多个 MQTT 主题,这些主题对应不同类型的设施(例如灯光、空调、音响等)。咱们将应用 ChatGPT 生成自然语言命令,以便通过 MQTT 客户端与这些设施进行实时交互等。

将来瞻望

联合 ChatGPT 和 MQTT 协定能够实现智能化的物联网零碎,在智能家居和工业自动化等畛域有着宽泛的利用后劲。通过自然语言交互,用户能够管制家居设施的开关、亮度、色彩等参数,实现更加智能、舒服的寓居环境;在工业自动化中,利用 ChatGPT 和 MQTT 实现智能化的设施保护和管制,能够带来更加高效、智能的制作过程。

在将来,咱们能够构想让 ChatGPT 或更加智能的 AGI 工具表演更多进步物联网畛域效率和生产力的角色,例如:

  • 音讯解析:对通过 MQTT 传输的音讯进行解析,提取出须要的数据,为后续的解决和剖析做好筹备。
  • 语义了解:对从 MQTT 中承受的音讯进行语义的了解和解决,从而提取出更加准确的信息。
  • 智能解决:通过 AI 技术,对承受到的 MQTT 音讯进行智能解决,帮忙用户更快地获取适合的解决方案。
  • 用户反馈:作为智能交互的代表,通过 MQTT 接管用户的反馈信息,并提供相应的响应。
  • 虚构助手:作为虚构助手的存在,通过语言辨认技术来管制智能家居设施,为用户提供更智能、高效的服务,晋升生存的便捷性和舒适度。

结语

在本篇博客中,咱们简略探讨了 MQTT 和 ChatGPT 的联合及其潜在利用。通过 EMQX 与 MQTTX,联合 Open AI 提供的 API,实现了一个相似 ChatGPT 的 AI 利用,并通过应用 MQTT 连贯后,对解决后的数据进行接管和转发,展现了 MQTT 与 ChatGPT 的集成。

尽管目前这些技术联合还未投入生产环境,但随着更多集成 AI 技术的产品上市(如 New Bing 将 GPT 模型集成到搜索引擎中,以及 GitHub 的 Copilot 等),咱们置信人工智能(AI)和物联网(IoT)技术的将来倒退方向也将包含自然语言交互优化,设施管制智能化水平晋升,以及更多具备创新性的利用场景。

总之,MQTT 和 ChatGPT 的联合为咱们揭示了一个值得关注和深刻摸索的畛域。咱们期待这些一直倒退的翻新技术为咱们带来一个更美妙的世界。

版权申明:本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.com/zh/blog/when-mqtt-meets-chatgpt

正文完
 0