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

本文作者

Shifan Yu:EMQX 前端研发总监,负责 EMQX 的前端开发工作,同时也是 MQTTX 的开发者和维护者。

前言

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

近期,由 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 服务及应用。

df78af21bf9f7efe22af6d4ef3db5c50.png

   ChatGPT

ChatGPT(https://openai.com/blog/chatgpt)是一款自然语言处理应用,它基于 OpenAI 的 GPT-3.5 和 GPT-4 等先进大语言模型构建。GPT(Generative Pre-trained Transformer)是一种深度学习模型,以其强大的文本生成和理解能力而闻名。ChatGPT 能够理解和生成自然语言,与用户进行流畅、自然的对话。而要实现 ChatGPT 的自然语言处理能力,我们就需要使用 OpenAI 提供的 API(https://platform.openai.com/docs/api-reference)来与 GPT 模型进行交互。

64fcdb93d49a91640f6988b8f0944fe0.png

ChatGPT 界面

方案设计与准备工作

基于 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 安装指南(https://www.emqx.io/docs/zh/v5.0/deploy/install.html)。

  • 安装 MQTTX 桌面端应用:

进入到 MQTTX 官网(https://mqttx.app/zh),选择对应的操作系统和 CPU 架构的版本,点击下载后安装。

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

进入到 OpenAI(https://platform.openai.com/overview)后,创建或登录到您的账户。完成后,点击右上角,选择 View API Keys ,在 API keys 栏目下,点击 Create new secret key 以生成一个新的 API 密钥。请妥善保管此密钥,因为它将在后续的程序中用于 API 认证。

5a723e68357019a0ba80ee74d4016786.png

完成上述步骤后,我们已经拥有了将 MQTT 协议与 ChatGPT 应用相结合所需的工具和资源。关于如何利用 OpenAI 的 API 与 GPT 语言模型互动,您可以查阅 OpenAI 文档(https://platform.openai.com/docs/introduction)以获得详细的指导和学习材料。

代码实现

资源和环境准备完成后,我们将使用 Node.js 环境构建一个 MQTT 客户端,此客户端将通过 MQTT 主题接收消息,将数据发送至 OpenAI API,并通过 GPT 模型生成自然语言。生成的自然语言将随后发布到指定的 MQTT 主题以实现集成交互。当然,您也可以根据自己的需求和熟悉程度选择 Python、Golang 等其他编程语言。为了便于直观演示,我们将直接使用 API,但您也可以选择使用官方库,它为 Node.js 和 Python 提供了更加简洁的使用方式。

更多信息请参考:OpenAI Libraries(https://platform.openai.com/docs/libraries/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);  }
});

运行该脚本服务:

node index.js

至此,我们就完成该演示项目的基础功能部分,除基础功能外,该代码还实现了用户间的访问隔离,只需添加不同的后缀在特定主题中。通过存储之前的消息历史,GPT 模型还可以理解对话中上下文中的语境,并根据之前的对话生成更加连贯和符合语境的回复。

完整的代码可在 GitHub 的 openai-mqtt-nodejs(https://github.com/emqx/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 消息来测试一下:

c4f8f242d55296a00ec66f4a5078b57c.jpeg

接下来,我们模拟一些更复杂的演示环境,如果某个传感器的温度超过了预设的阈值,ChatGPT 机器人会发送一个告警消息到另一个 MQTT 主题,该主题被连接到一个监控设备,如智能手表或智能音箱。监控设备收到告警消息后,可以使用自然语言技术将告警信息转换为语音,以便用户可以更方便地接收和理解。

f9a87f8b7b3d92996b2694e72372393b.png

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

35f14e29c951f231d1bf450fd85d051b.png

未来展望

结合 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 的结合为我们揭示了一个值得关注和深入探索的领域。我们期待这些不断发展的创新技术为我们带来一个更美好的世界。

2ba529ea6a22e6f8e296e0cd7e1b300a.jpeg

点击“阅读原文”,了解 MQTTX

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/13368.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为何不能暂停AI研发?丨杨立昆吴恩达对话实录

北京时间4月8日凌晨0:30,Yann LeCun(杨立昆)和吴恩达针对近期甚嚣尘上的「AI暂停」一事进行了一场深入讨论,讨论主题为「为何为期6个月的AI暂停是完全错误的」。在这场风波中,二人都立场鲜明,明确表态反对暂停AI研发。汽车刚发明时没有安全带和交通信号灯,Yann LeCun认为…

智能并非万能,ChatGPT 虽火,但别忽视 AIGC 的黑与白!

ChatGPT、GPT-4 引领的 AIGC 浪潮已至,自动化、生成式的方式将为各行各业从底层研发工具、到中间层架构设计、再到上层应用带来一定的革新。 身处变革洪流之中的我们,盲目跟风势必不可取,那又该如何正确与理性看待这门技术,AIGC 将…

GPT-4的黑箱运作方式引科学家不满

原文作者:Katharine Sanderson 科研人员对这项AI技术充满期待,但对其底层技术的秘而不宣感到不满。 上周,人工智能公司OpenAI推出了GPT-4——驱动其热门对话机器人ChatGPT的大型语言模型的最新版本。这个语言模型能根据几乎任何提示创作有人类…

产品未出 百度朋友圈“开演”

ChatGPT这股AI龙卷风刮到国内时,人们齐刷刷望向百度,这家在国内对AI投入最高的公司最终出手了,大模型新项目文心一言(ERNIE Bot)将在3月正式亮相,对标微软投资的ChatGPT。 文心一言产品未出,百…

3·15特辑 | 少侠,可曾听说ChatGPT也有“食品安全问题”?

3月15日,有两件事情最吸引国内网民的眼球:一件是牵动所有消费者的315晚会,另一件则是ChatGPT母公司OpenAI于当日凌晨发布了再次爆火出圈的GPT-4。 据媒体报道,相比于ChatGPT之前所使用的GPT-3.5 架构,GPT-4实现了以下几…

最佳实践 | 用腾讯云智能语音打造智能对话机器人

在AI技术的推动下,智能对话机器人逐渐成为我们工作、生活中的重要效率工具,乃至是伙伴,特别是为企业带来最原始最直观的“降本增效”落地实现。 作为开发者,你是否有想过基于语音技术打造一款智能对话机器人呢? 本文将…

大语言模型(LLM)发展历程及模型相关信息汇总(2023-07-12更新)

大语言模型(large language model,LLM)发展历程及模型相关信息汇总(2023-07-12更新) LLM发展时间轴:以下用表格形式汇总了从 BERT(2018-10-11)到 Baichuan(203-06-15)共计 58种语言大…

一些常用的搜索技巧总结

最近ChatGPT的出现让全网哗然,其对自然语言和代码的处理能力,对文字的理解能力和固定模板下的创作能力都强得离谱。但比起这些,最令我惊讶的还是他及其庞大的知识库。数以千亿计的训练数据让他切实的做到了博古通今。在我看来,拥有…

chatgpt赋能Python-pycharm改名字

PyCharm更名为JetBrains PyCharm——专属Python开发者的最佳IDE JetBrains PyCharm是一款Python开发者最喜欢使用的IDE之一。然而,在2021年初,这款世界著名的Python IDE进行了一次重大更名——PyCharm更名为JetBrains PyCharm。在这篇文章中&#xff0c…

Claude 使用教程 AI助手,可平替Chatgpt,无需魔法

今天来分享下Claude AI工具2023-4月最新使用方法, Claude是Anthropic公司开发的一种基于大型语言模型的AI助手,类似于ChatGPT。 背景:Anthropic是一家由OpenAI的前联合创始人Dario Amodei和他的妹妹Daniela Amodei创立的AI研究公司 。他们的…

使用魔法改善魔法,用chatgpt生成剪贴板保存工具减轻工作量

最近开始使用chatgpt生成代码来编写小工具,大部分时候还算靠谱,就是每次从网页上粘贴内容到编辑器中比较麻烦,尤其是chatgpt洋洋洒洒,给了若干个程序代码,一个个的粘贴真是要了老命了。 试了试cursor,发现也…

Claude 免注册教程

前 OpenAI 副总裁创建的人工智能新项目 “Claude” 来了,有望与 ChatGPT 展开激烈竞争。 Claude 是什么? Claude 是由人工智能安全创业公司 Anthropic 开发的 AI 产品。Anthropic 由多位知名高校的人工智能专家联合创立,其宗旨是研究如何设计…

天津市人工智能计算中心揭牌 天下津梁融汇AI之力

“九河下稍天津卫,三道浮桥两道关”,这是天津人熟知的一句话,意思是九河下稍的尽头是天津卫,是说天津是九条河流的入海口。自明永乐二年天津设卫以来,这座城市就是江河汇聚、贯通南北的水陆码头。天津名字的由来之一&a…

昇腾AI深耕沽上:港口辐射力之后,天津再添基础创新辐射力

作者 | 曾响铃 文 | 响铃说 AI计算正在以新基建联动产业集群的方式,加速落地。 不久前,天津市人工智能计算中心正式揭牌,该中心整体规划300P算力,2022年底首批100P算力上线投入运营,并实现上线即满载。 这是昇腾AI…

AIGC:StableLM 简介

文章目录 [toc]简介应用实践小结其他 简介 众所周知,去年初创公司 Stability AI 发布的 AI 图像生成工具 Stable Diffusion,成为一种革命性的图像模型,也使 AI“文生图”实现了飞速的发展。满载着大家对其“不再局限于开发图像生成”和“开源…

Stable Diffusion公司开源大语言模型StableLM,网友:不是我想要的!

整理 | 朱珂欣 出品 | CSDN(ID:CSDNnews) 众所周知,去年初创公司 Stability AI 发布的 AI 图像生成工具 Stable Diffusion,成为一种革命性的图像模型,也使 AI“文生图”实现了飞速的发展。 满载着大家对其“…

copilot使用教程

Copilot简介 Copilot是⼀种基于⼈⼯智能的代码⾃动补全⼯具,由OpenAI和GitHub共同开发。它使⽤⼈⼯智能算 法来分析代码库,并根据上下⽂和编程语⾔的语法提⽰,⾃动⽣成⾼质量的代码。⽬前,Copilot只能 与GitHub上的代码库集成&…

zblog负载过高导致访问不流畅处理办法

当您的zblog负载过高时,可能会导致网站响应时间过长,甚至无响应。这会影响到您的访客体验,同时也会影响您的网站排名。以下是一些应对方法: 1. 增加服务器资源:如果您的服务器配置过低,可以考虑增加资源&am…

Stable Diffusion公司开源大语言模型StableLM,网友:能把人逼疯!

整理 | 朱珂欣 出品 | CSDN(ID:CSDNnews) 众所周知,去年初创公司 Stability AI 发布的 AI 图像生成工具 Stable Diffusion,成为一种革命性的图像模型,也使 AI“文生图”实现了飞速的发展。 满载着大家对其“…

GPT 学术优化 (ChatGPT Academic)搭建过程(含ChatGLM cuda INT4量化环境和newbing cookie)

文章目录 1、GPT Academic2、chatGPT3、chatGLM4、newbing 1、GPT Academic 项目地址:地址 安装部分 git clone https://github.com/binary-husky/chatgpt_academic.git cd chatgpt_academicconda create -n gptac_venv python3.11 conda activate gptac_venv pyt…