如何构建自定义GPT动作与您的硬件对话

Ari Mahpour
|  已创建:March 25, 2024  |  已更新:July 1, 2024
如何构建自定义GPT动作与您的硬件通信

在ChatGPT的早期(实际上并没有很久以前),OpenAI通过使用他们的LLM以不同的方式接触外部互联网。通过代码解释器,人们可以Curl一个网站并拉取其内容。自定义插件也允许你访问外部网站,但需要从OpenAI获得特殊权限。OpenAI还添加了与Microsoft Bing的浏览功能,也可以访问互联网。然而,所有这些选项对于用户和开发者对OpenAI系统的增长和需求来说,并不是非常可持续的。因此,OpenAI最近推出了一个名为GPT Actions的新平台。GPT Actions允许你创建自定义的“GPT”,可以连接到不同的服务器上,提供在现有网络服务之上的AI驱动引擎。

那么,这一切对于假装理解AI的硬件工程师意味着什么呢?AI控制的硬件听起来怎么样?听起来既不祥、潜在危险,又无比激动人心!在这篇文章中,我们将深入探讨如何设置一个将连接到你的GPT Action的网络服务器。我们甚至会看看如何启用ChatGPT来控制你的Raspberry Pi上的IO,为许多新的和激动人心的AI驱动项目打开大门,这是普通工程师直到现在都未能接触到的。

它是如何工作的

在深入代码之前,重要的是要注意,这是一个不断发展的领域,正在迅速变化。它也是一个依赖于OpenAI的技术,并且需要订阅ChatGPT的付费版本。几乎可以肯定的是,竞争对手将推出他们版本的“GPT Actions”,但在撰写本文时,GPT Actions(在我看来)是将一个功能齐全的大型语言模型(LLM)连接到你的网络服务的最简单方式。

GPT Action服务背后的概念非常直接。我们将我们的自定义GPT指向一个网络服务,告诉它输入和输出是什么,然后让它运行。然而,实现比我想象的要复杂得多(这是写这篇文章的动机)。这是服务工作方式的图表:

图1:服务器互动

图1:服务器互动

如你所见,我们向OpenAI提供了一个网络服务和一个接口文档(OpenAPI),告诉我们如何与我们的硬件互动。我们将从一个非常简单的例子开始,不涉及硬件,然后逐步过渡到一个简单的LED切换示例。

安全服务器配置

对于那些对嵌入式软件最多算是熟悉的硬件工程师来说,这一部分对他们来说可能不像对那些在IT或云基础设施工作的人那样简单。作为一名电气工程师和软件工程师,设置一个完全SSL加密的服务器对我来说有点难以理解 - 主要是因为有很多种方法可以做到这一点。不幸的是,这是OpenAI的一个先决条件,所以我们必须硬着头皮做。如果你已经有了一种安全的托管Web服务器的方式(例如,在你的负载均衡器上进行TLS终止),你可以跳过这一部分。像我一样,大多数阅读这篇文章的人会想要在他们的家用服务器上进行实验。请记住,你仍然需要通过路由器设置将80和443端口对外开放。如何配置路由器的防火墙和端口转发的说明超出了本文的范围,但你可以在线找到很多资源来帮助你完成它。 要开始,我们需要申请一个SSL证书。这可以通过付费服务(例如Cloudfare)、免费的第三方服务(例如ZeroSSL)或直接使用Let’s Encrypt的机制来完成。在这个教程中,我们将通过certbot使用Let’s Encrypt。你还需要一个指向你服务器IP地址的域名。你可以购买一个,或者使用Cloudfare(付费)或No-IP(免费)获得一个动态DNS名称。请记住,将你的动态DNS名称转发到你的IP需要一个“A”记录类型,而不是URL重定向。 要从Let’s Encrypt请求一个90天的SSL证书,我们需要使用Certbot。他们有可以在任何操作系统上运行的可执行文件。我们将运行最简单的命令来获取证书。这是获取证书的命令:

sudo certbot certonly --standalone --agree-tos -v --preferred-challenges http -d your_domain.com

如果你使用的是Windows,你不会使用sudo部分。确保将your_domain.com替换为购买的域名或你从动态DNS服务(例如No-IP)收到的域名。将生成一个包含一系列证书文件的文件夹。此时,是时候克隆仓库模板了:https://gitlab.com/ai-examples/gpt-actions-webserver/。一旦你克隆了它,就将certbot生成的文件夹移动到仓库中。 为了正确地获取SSL重定向工作(即确保所有流量都被加密),我们将要设置Nginx。在你的仓库中创建一个名为nginx的文件夹和一个新文件,命名为default.conf。使用这个模板,将your_domain.com替换为你使用certbot请求SSL证书时使用的域名:


server {
    listen 80;
    server_name your_domain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name your_domain.com;
 
    ssl_certificate /etc/ssl/certs/fullchain.pem;
    ssl_certificate_key /etc/ssl/private/privkey.pem;
 
    location / {
        proxy_pass http://web:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

运行应用程序

此时,您应该已经正确设置了SSL加密,准备就绪。现在我们将关注可以与我们自定义GPT通信的基本Web应用程序。您可以在仓库中找到所有代码,所以我们将只突出显示如何运行它,而不是应用程序中的细节。

鉴于SSL加密Web服务的性质,我已将Web应用程序与实际的SSL加密分开。为此,我们需要Nginx,它重定向流量并提供我们通过Certbot从Let's Encrypt收到的证书。为了将一切完整地封装成一个整洁的小包,我将其包装进了一个Docker Compose中。这意味着您需要Docker来运行此示例。最初设置可能有些繁琐和乏味,但这是软件这些天正在转向的方向,因此,像这样的项目是一个了解Docker的好地方。顺便说一句,所有的描述和说明都放在了仓库内的README.md文件中。只要您遵循了上述步骤,您应该能够运行docker compose up,所有组件(即Nginx和Web应用程序)应该会构建并开始运行。记住,这个应用程序只是一个简单的“Hello World”类型的示例,可以从任何地方运行。

运行docker compose up命令后,您应该看到如下输出:

图2:终端输出

图2:终端输出

您应该通过导航到http://localhost:8000来测试您的应用程序。您将看到一个测试输出,显示{"status":"OK"}。通过导航到http://your_domain.com,您也应该看到相同的结果,其中“your_domain.com”是您在上一步中设置的域名。为了真正验证您的路由器和域设置是否正确,您应该在网络外部测试这一点(例如,用WiFi关闭的手机上)。

配置GPT操作

现在我们已经验证了我们的基本网络服务器正在工作,我们需要将其连接到我们的自定义GPT操作。OpenAI需要一个称为OpenAPI的文档,该文档告诉他们的服务器如何与您的服务器交互。已经有一个openapi.json,您可以直接复制并粘贴到GPT操作设置中。要进入您的设置,请点击左下角的您的名字,然后点击“我的GPTs”:

图3:ChatGPT设置

图3:ChatGPT设置

点击创建一个GPT,然后在底部点击创建新操作:

图4:GPT操作配置设置

图4:GPT操作配置设置

之后,您可以将openapi.json的内容复制并粘贴到Schema框中:

图5:GPT操作架构设置

图5:GPT操作架构设置

您需要将“https://your_doman.com”替换为您实际域名的地址。在那之后,一些测试按钮会弹出。假设您的网络服务器正在运行,您可以点击测试按钮,看看OpenAI是否可以与您的网络服务器通信。如果一切都检查无误,那么您可以保存/发布GPT(在右上角),并开始使用它。请确保仅为自己发布这个,因为这是连接到私人网络(大概在家里)。

运行GPT

如果您成功完成了上述所有部分并成功测试了您的GPT操作,那么恭喜您!现在是时候真正测试一切了。我开始了一个新的ChatGPT对话,但这次使用我的自定义GPT,我称之为“仪器控制器”。为了简单起见,我询问了我的服务器的状态:

图6:使用GPT操作的服务器状态

图6:使用GPT操作的服务器状态

我的Nginx日志(从我运行Docker Compose的命令行)也确认了流量:

```plaintext


"GET / HTTP/1.1" 200 15 "-" "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko); compatible; ChatGPT-User/1.0; +https://openai.com/bot" "-"

我们还有一个随机数生成器:

图7:使用GPT操作从服务器获取随机数

图7:使用GPT操作从服务器获取随机数

而且,来自Nginx的流量也证实了我们从服务器收到了5个请求。

Raspberry Pi LED开关

到目前为止,我们已经演示了如何使用GPT执行软件操作,但是控制硬件呢?在本文中,我们已经讨论了很多内容,所以我们将仅查看一个基本的闪烁LED示例。

首先,在Raspberry Pi上运行上述相同的过程。注意,您可以使用在家用电脑上使用的相同SSL证书和仓库代码(假设所有设备都在同一网络中)。一切准备就绪后,运行以下命令:

BUILD_TYPE=rpi docker compose up --build

这个示例现在包含了在26号引脚(GPIO7)上切换一个板载LED的能力。您可以在app/RPiDemoApp.py中修改引脚号。您还需要使用提供在仓库中的opeanapi-rpi.json模式更新自定义GPT的OpenAPI模式(因为我们添加了一个新功能)。

此时,您应该能够使用ChatGPT的聊天界面切换LED:

图8:使用GPT操作在Raspberry Pi上切换LED

图8:使用GPT操作在Raspberry Pi上切换LED

恭喜你走到这一步!这是一个复杂的教程,你无疑会有问题和/或挑战。ChatGPT正在每天对这个功能进行更改,并找到更简单的方法来引导初学者通过这个过程。请留意更新的文档,甚至是可以帮助您完成过程的AI助手机器人。

结论

在本文中,我们探讨了自定义GPT操作,如何创建它们,并围绕它构建所有支架,以便从我们的家用电脑提供SSL加密的网络服务。除了构建基本的网络服务,我们还能够扩展这段代码来控制Raspberry Pi上的LED。这为控制和通信更复杂的硬件打开了可能性,同时利用“AI在循环中”(借用“硬件在循环中”的说法)。在未来的文章中,我们将探索这些主题和概念,以此示例为基础。

关于作者

关于作者

Ari 是一位在设计、制造、测试以及集成电气、机械和软件系统方面拥有丰富经验的工程师。他热衷于将设计、验证和测试工程师凝聚成一个高效团队,共同工作。

相关资源

相关的技术文档

返回主页
Thank you, you are now subscribed to updates.