Wie man eine benutzerdefinierte GPT-Aktion erstellt, um mit Ihrer Hardware zu kommunizieren

Ari Mahpour
|  Erstellt: March 25, 2024  |  Aktualisiert am: April 1, 2024
Wie man eine benutzerdefinierte GPT-Aktion erstellt, um mit Ihrer Hardware zu kommunizieren

In den Anfangstagen von ChatGPT (was eigentlich gar nicht so lange her ist), entwickelte sich OpenAI mit verschiedenen Wegen, um über die Nutzung ihres LLM das externe Internet zu erreichen. Mit dem Code Interpreter konnte man eine Website mit Curl aufrufen und deren Inhalte abrufen. Benutzerdefinierte Add-ons ermöglichten es ebenfalls, externe Websites anzusteuern, erforderten jedoch spezielle Berechtigungen von OpenAI. OpenAI fügte auch Browsing-Fähigkeiten mit Microsoft Bing hinzu, die ebenfalls das Internet erreichen konnten. All diese Optionen erwiesen sich jedoch nicht als sehr nachhaltig für das Wachstum und die Nachfrage, die Benutzer und Entwickler an die Systeme von OpenAI stellten. OpenAI hat daher kürzlich eine neue Plattform namens GPT Actions eingeführt. GPT Actions ermöglichen es Ihnen, benutzerdefinierte „GPTs“ zu erstellen, die sich mit verschiedenen Servern verbinden können, um auf einem bestehenden Webdienst AI-gesteuerte Engines bereitzustellen.

Was bedeutet all das für einen Hardware-Ingenieur, der vorgibt zu verstehen, was AI ist? Wie klingt für Sie AI-gesteuerte Hardware? Klingt unheilvoll, potenziell gefährlich und gleichzeitig unglaublich aufregend! In diesem Artikel werden wir uns damit beschäftigen, wie man einen Webserver einrichtet, der sich mit Ihrer GPT Action verbindet. Wir werden sogar betrachten, wie man ChatGPT ermöglicht, die IOs auf Ihrem Raspberry Pi zu steuern, was viele neue und aufregende AI-getriebene Projekte eröffnet, zu denen der durchschnittliche Ingenieur bisher keinen Zugang hatte…bis jetzt.

Wie es funktioniert

Bevor wir in den Code eintauchen, ist es wichtig zu beachten, dass dies ein sich schnell entwickelndes Feld ist und sich rasch verändert. Es ist auch eine Technologie, die von OpenAI abhängig ist und ein Abonnement der kostenpflichtigen Version von ChatGPT erfordert. Es ist fast sicher, dass Konkurrenten ihre Versionen von „GPT Actions“ herausbringen werden, aber zum Zeitpunkt des Schreibens dieses Artikels waren GPT Actions (meiner Meinung nach) der einfachste Weg, ein voll funktionsfähiges Large Language Model (LLM) mit Ihrem Webdienst zu verbinden.

Das Konzept hinter einem GPT Action Service ist ziemlich einfach. Wir weisen unser benutzerdefiniertes GPT an, sich mit einem Webservice zu verbinden, teilen ihm mit, was die Eingaben und Ausgaben sind, und lassen es laufen. Die Implementierung erwies sich jedoch als viel komplizierter als ich mir vorgestellt hatte (was der Anstoß für das Schreiben dieses Artikels war). Hier ist ein Diagramm, wie der Dienst funktioniert:

Abbildung 1: Server-Interaktionen

Abbildung 1: Server-Interaktionen

Wie Sie sehen können, stellen wir OpenAI einen Webservice und ein Schnittstellendokument (OpenAPI) zur Verfügung, das uns sagt, wie wir mit unserer Hardware interagieren sollen. Wir beginnen mit einem sehr trivialen Beispiel, das keine Hardware involviert, und steigen dann auf ein einfaches Beispiel für das Umschalten einer LED um.

Sichere Serverkonfiguration

Für Hardware-Ingenieure, die bestenfalls mit eingebetteter Software vertraut sind, mag dieser Abschnitt nicht so trivial sein, wie es für jemanden wäre, der in IT oder Cloud-Infrastruktur arbeitet. Als sowohl Elektro- als auch Softwareingenieur war das Einrichten eines vollständig SSL-verschlüsselten Servers für mich ein wenig knifflig - hauptsächlich, weil es so viele Möglichkeiten gibt, dies zu tun. Leider ist dies eine Voraussetzung von OpenAI, also müssen wir uns da durchkämpfen. Wenn Sie bereits eine sichere Methode haben, einen Webserver zu hosten (z.B. TLS-Terminierung an Ihrem Load Balancer), können Sie diesen Abschnitt überspringen. Wie ich möchten die meisten Leute, die diesen Artikel lesen, mit ihrem Heimserver experimentieren. Beachten Sie, dass Sie immer noch die Ports 80 und 443 für die Außenwelt über Ihre Routereinstellungen öffnen müssen. Anleitungen, wie Sie die Firewall Ihres Routers und das Port-Forwarding konfigurieren, sind nicht Gegenstand dieses Artikels, aber es gibt viele Ressourcen online, die Ihnen dabei helfen können. Um zu beginnen, müssen wir ein SSL-Zertifikat anfordern. Dies kann über kostenpflichtige Dienste (z.B. Cloudfare), kostenlose Drittanbieterdienste (z.B. ZeroSSL) oder einen direkten Mechanismus mit Let’s Encrypt erfolgen. In diesem Tutorial werden wir Let’s Encrypt über certbot verwenden. Sie benötigen auch einen Domainnamen, der auf die IP-Adresse Ihres Servers verweist. Sie können entweder einen kaufen oder einen dynamischen DNS-Namen über Cloudfare (kostenpflichtig) oder No-IP (kostenlos) erhalten. Beachten Sie, dass die Weiterleitung Ihres dynamischen DNS-Namens zu Ihrer IP einen „A“-Record-Typ erfordert und keine URL-Umleitung. Um ein 90-Tage-SSL-Zertifikat von Let’s Encrypt anzufordern, müssen wir Certbot nutzen. Sie haben ausführbare Dateien, die auf jedem Betriebssystem ausgeführt werden können. Wir werden den einfachsten Befehl ausführen, um die Zertifikate zu erwerben. Hier ist der Befehl, um das Zertifikat zu erhalten:

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

Wenn Sie Windows verwenden, verwenden Sie nicht den sudo-Teil. Stellen Sie sicher, dass Sie your_domain.com durch den gekauften Domainnamen oder den Namen ersetzen, den Sie vom dynamischen DNS-Dienst erhalten haben (z.B. No-IP). Ein Ordner mit einer Reihe von Zertifikatsdateien wird generiert. An diesem Punkt ist es Zeit, die Repository-Vorlage zu klonen: https://gitlab.com/ai-examples/gpt-actions-webserver/. Verschieben Sie den von certbot generierten Ordner in das Repository, nachdem Sie es geklont haben. Um SSL-Weiterleitungen ordnungsgemäß zu bekommen (d.h. sicherzustellen, dass der gesamte Verkehr verschlüsselt ist), möchten wir Nginx einrichten. Erstellen Sie innerhalb Ihres Repositories einen Ordner namens nginx und eine neue Datei namens default.conf. Verwenden Sie diese Vorlage, ersetzen Sie your_domain.com mit dem Domainnamen, der verwendet wurde, als Sie Ihr SSL-Zertifikat mit certbot angefordert haben:


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;
    }
}

Anwendung ausführen

Zu diesem Zeitpunkt sollten Sie die SSL-Verschlüsselung korrekt eingerichtet und einsatzbereit haben. Jetzt konzentrieren wir uns auf die grundlegende Webanwendung, die mit unserem benutzerdefinierten GPT kommunizieren kann. Den gesamten Code finden Sie im Repository, daher werden wir nur hervorheben, wie man ihn ausführt, anstatt auf die Details einzugehen, die in die Anwendung fließen.

Angesichts der Natur eines SSL-verschlüsselten Webservices habe ich die Webanwendung von der eigentlichen SSL-Verschlüsselung abstrahiert. Dazu benötigen wir Nginx, das den Verkehr umleitet und die Zertifikate bereitstellt, die wir von Let’s Encrypt über Certbot erhalten haben. Um alles in ein ordentliches kleines Paket zu schnüren, habe ich es in ein Docker Compose eingewickelt. Das bedeutet, Sie benötigen Docker, um dieses Beispiel auszuführen. Es ist anfangs etwas umständlich und mühsam einzurichten, aber so entwickelt sich die Software heutzutage, daher ist ein Projekt wie dieses ein großartiger Ort, um sich mit Docker vertraut zu machen. Als Nebenbemerkung wurden alle Beschreibungen und Anweisungen in der README.md-Datei innerhalb des Repositorys platziert. Solange Sie die vorherigen Schritte oben befolgt haben, sollten Sie in der Lage sein, docker compose up auszuführen und alle Komponenten (d. h. Nginx und die Webanwendung) sollten gebaut werden und zu laufen beginnen. Denken Sie daran, dass diese Anwendung nur ein einfaches "Hello World"-Beispiel ist und von überall aus ausgeführt werden kann.

Nachdem Sie den Befehl docker compose up ausgeführt haben, sollten Sie eine Ausgabe wie diese sehen:

Abbildung 2: Terminalausgabe

Abbildung 2: Terminalausgabe

Sie sollten Ihre Anwendung testen, indem Sie zu http://localhost:8000 navigieren. Sie werden eine Testausgabe sehen, die {"status":"OK"} sagt. Sie sollten das gleiche Ergebnis auch sehen, indem Sie zu http://your_domain.com navigieren, wobei „your_domain.com“ der Domainname ist, den Sie im vorherigen Schritt eingerichtet haben. Um wirklich zu validieren, dass Ihre Router- und Domäneneinstellungen korrekt sind, sollten Sie dies außerhalb Ihres Netzwerks testen (z. B. auf Ihrem Handy mit ausgeschaltetem WLAN).

Konfigurieren der GPT-Aktion

Nun, da wir validiert haben, dass unser einfacher Webserver funktioniert, müssen wir ihn mit unserer benutzerdefinierten GPT-Aktion verbinden. OpenAI benötigt ein Dokument namens OpenAPI, das ihren Servern mitteilt, wie sie mit Ihrem interagieren sollen. Es gibt bereits eine openapi.json, die Sie direkt in die Einstellungen der GPT-Aktionen kopieren und einfügen können. Um zu Ihren Einstellungen zu gelangen, klicken Sie in der unteren linken Ecke auf Ihren Namen und dann auf „Meine GPTs“:

Abbildung 3: ChatGPT-Einstellungen

Abbildung 3: ChatGPT-Einstellungen

Klicken Sie auf GPT erstellen, dann unten auf Neue Aktion erstellen:

Abbildung 4: GPT-Aktion Konfigurationseinstellungen

Abbildung 4: GPT-Aktion Konfigurationseinstellungen

Danach können Sie den Inhalt von openapi.json in das Schema-Feld kopieren und einfügen:

Abbildung 5: GPT-Aktion Schema-Einstellungen

Abbildung 5: GPT-Aktion Schema-Einstellungen

Sie müssen „https://your_doman.com“ durch die Adresse Ihres tatsächlichen Domains ersetzen. An diesem Punkt werden einige Testbuttons erscheinen. Vorausgesetzt, Ihr Webserver läuft, können Sie auf einen Testbutton klicken und sehen, ob OpenAI mit Ihrem Webserver kommunizieren kann. Wenn das alles funktioniert, dann können Sie die GPT (oben rechts) speichern/veröffentlichen und damit beginnen, damit zu spielen. Stellen Sie sicher, dass Sie dies nur für sich selbst veröffentlichen, da dies eine Verbindung zu einem privaten Netzwerk herstellt (vermutlich zu Hause).

GPT ausführen

Wenn Sie es geschafft haben, alle oben genannten Abschnitte zu durchlaufen und Ihre GPT-Aktion erfolgreich getestet haben, dann herzlichen Glückwunsch! Jetzt ist es an der Zeit, das Ganze wirklich zu testen. Ich habe eine neue ChatGPT-Unterhaltung gestartet, aber diesmal mit meinem benutzerdefinierten GPT, den ich „Instrumentensteuerung“ nenne. Um es einfach zu machen, habe ich nach dem Status meines Servers gefragt:

Abbildung 6: Serverstatus mit GPT-Aktionen

Abbildung 6: Serverstatus mit GPT-Aktionen

Und meine Nginx-Logs (von der Kommandozeile, auf der ich Docker Compose ausgeführt habe) bestätigen den Traffic ebenfalls:


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

Wir haben auch einen Zufallszahlengenerator:

Abbildung 7: Zufallszahlen vom Server erhalten mit GPT-Aktionen

Abbildung 7: Zufallszahlen vom Server erhalten mit GPT-Aktionen

Und der Verkehr von Nginx bestätigt auch, dass wir 5 Anfragen von unserem Server erhalten haben.

Raspberry Pi LED Umschaltung

Zu diesem Zeitpunkt haben wir demonstriert, wie man Softwareaktionen mit GPT durchführen kann, aber was ist mit der Steuerung von Hardware? In diesem Artikel haben wir bereits viel behandelt, daher werden wir uns nur ein einfaches Beispiel mit einer blinkenden LED ansehen.

Um zu beginnen, führen Sie denselben Prozess wie oben auf einem Raspberry Pi durch. Beachten Sie, dass Sie dasselbe SSL-Zertifikat und denselben Repository-Code verwenden können, den Sie auf Ihrem Heimcomputer verwendet haben (vorausgesetzt, alle Geräte befinden sich im selben Netzwerk). Sobald alles bereit ist, führen Sie den folgenden Befehl aus:

BUILD_TYPE=rpi docker compose up --build

Dieses Beispiel enthält nun die Möglichkeit, eine onboard LED an Pin 26 (GPIO7) umzuschalten. Sie können die Pinnummer in app/RPiDemoApp.py ändern. Sie müssen auch das OpenAPI-Schema des benutzerdefinierten GPT mit dem opeanapi-rpi.json Schema aus dem Repository aktualisieren (da wir eine neue Funktion hinzugefügt haben).

Zu diesem Zeitpunkt sollten Sie in der Lage sein, die LED mit der Chat-Schnittstelle mit ChatGPT umzuschalten:

Abbildung 8: Eine LED am Raspberry Pi mit GPT-Aktionen umschalten

Abbildung 8: Eine LED am Raspberry Pi mit GPT-Aktionen umschalten

Herzlichen Glückwunsch, dass Sie es so weit geschafft haben! Dies war ein komplexes Tutorial und Sie werden zweifellos Fragen und/oder Herausforderungen haben. ChatGPT nimmt täglich Änderungen an dieser Funktion vor und findet einfachere Wege, Anfänger durch den Prozess zu führen. Achten Sie auf aktualisierte Dokumentationen und sogar auf KI-Assistenten-Bots, die Ihnen durch den Prozess helfen können.

Schlussfolgerung

In diesem Artikel haben wir uns die benutzerdefinierten GPT-Aktionen angesehen, wie man sie erstellt und das gesamte Gerüst darum herum aufbaut, um einen SSL-verschlüsselten Webdienst von unserem Heimcomputer aus zu betreiben. Zusätzlich zum Aufbau eines grundlegenden Webdienstes konnten wir diesen Code erweitern, um eine LED vom Raspberry Pi zu steuern. Dies eröffnet die Möglichkeit, mit viel komplexerer Hardware zu kommunizieren und sie zu steuern, während „KI im Loop“ genutzt wird (Anspielung auf „Hardware im Loop“). In zukünftigen Artikeln werden wir solche Themen und Konzepte erforschen und dieses Beispiel als Grundlage nutzen.

 

 

Über den Autor / über die Autorin

Über den Autor / über die Autorin

Ari ist ein PCB-Designer mit umfassender Erfahrung in der Entwicklung, Herstellung, Prüfung und Integration verschiedener Softwaresysteme. Dabei bringt er leidenschaftlich gern Entwickler aus den Bereichen Design, Prüfung und Abnahme zusammen, um gemeinsam an Projekten zu arbeiten und diese voranzutreiben.

Ähnliche Resourcen

Verwandte technische Dokumentation

Zur Startseite
Thank you, you are now subscribed to updates.