Raspberry Pi Pico W: ChatGPT und OpenAI-API
Ende 2022 und Anfang 2023 wurde der KI-Chatbot „ChatGPT“ des Unternehmens OpenAI einer breiten Öffentlichkeit bekannt. Die Besonderheit von ChatGPT ist die Kommunikation und Steuerung einer Software mit natürlicher Sprache. Der Chatbot ChatGPT ist mit Hilfe eines KI-Sprachmodells in der Lage zu verstehen, was das menschliche Gegenüber will oder meint. Umgekehrt kann ChatGPT verständlichen Text produzieren. Diese Fähigkeiten bieten vielfältige Möglichkeiten, rund um die Eingabe und Ausgabe von natürlicher Sprache.
Das Unternehmen OpenAI bietet nicht nur den Chatbot an, sondern auch eine API. Eine API ist eine Schnittstelle für Software, um Daten auszutauschen. Mit MicroPython oder CircuitPython ist es vergleichsweise einfach eine solche API abzufragen und auf der Konsole oder in einer anderen Form auszugeben.
Eigentlich sind Anwendungen mit der OpenAI-API auf einem Raspberry Pi Pico nur begrenzt sinnvoll. Der Grund ist, das Sprachmodell hinter der OpenAI-API erwartet eine Texteingabe und erzeugt eine Textausgabe. Beides ist auf dem Pico nur begrenzt möglich. Deshalb beschränkt sich die Texteingabe und Textausgabe hier auf die Konsole der Thonny Python IDE.
Grundlagen zum Thema KI-Sprachmodelle und ChatGPT
Wenn Du Dich mit KI-Sprachmodellen wie ChatGPT noch nicht auskennst, dann ist es empfehlenswert Dich etwas einzulesen. Es geht vor allem darum zu verstehen, was Sprachmodelle können und wo ihre Grenzen liegen.
Anforderungen
Wenn ein Raspberry Pi Pico mit der OpenAI-API kommunizieren soll, müssen zuerst folgende Anforderungen erfüllt werden:
- Raspberry Pi Pico W (mit WLAN-Chip)
- privates WLAN mit Internet-Zugang
- OpenAI-Account anlegen (kostenlose Registrierung)
- OpenAI-API-Key anfordern (kostenpflichtig)
Um die OpenAI-API nutzen zu können, muss dort ein API-Key angelegt werden. Die Nutzung ist dann in der Regel kostenpflichtig. Das heißt, es müssen Zahlungsdaten hinterlegt und der Account aufgeladen werden.
Programmcode für MicroPython
Der folgende Programmcode ist nicht vollständig. Er zeigt im wesentlichen nur, wie die OpenAI-API einmalig abgefragt werden kann. Dieser Programmcode kann dann für den eigenen Anwendungsfall modifiziert werden.
Im folgenden Programmcode müssen die Zugangsdaten für das WLAN und der API-Key von OpenAI eingetragen werden. Die URL für die API ist schon korrekt gewählt.
Nach dem WLAN-Verbindungsaufbau kann auf der Kommandozeile der Prompt eingegeben werden. Der Prompt ist eine Anweisung, Frage oder eine Kombination daraus. Der Prompt wird mit zusätzlichen Parametern des KI-Sprachmodells per HTTP-POST-Request gesendet. Die Daten liegen dann als JSON-Datensatz vor, aus dem das Ergebnis ausgelesen und auf der Kommandozeile ausgegeben wird. Der Programmcode wird danach automatisch beendet.
# Bibliotheken laden import machine import network import requests import time # WLAN-Zugangsdaten wlanSSID = 'WLAN-Name' wlanPW = 'WLAN-Passwort' network.country('DE') # OpenAI-API OPENAI_API_KEY = 'Dein API-Key' OPENAI_API_URL = 'https://api.openai.com/v1/chat/completions' # Status-LED led_onboard = machine.Pin('LED', machine.Pin.OUT, value=0) # WLAN-Verbindung herstellen wlan = network.WLAN(network.STA_IF) if not wlan.isconnected(): print('WLAN-Verbindung herstellen:', wlanSSID) wlan.active(True) wlan.connect(wlanSSID, wlanPW) for i in range(10): if wlan.status() < 0 or wlan.status() >= 3: break led_onboard.toggle() print('.') time.sleep(1) # WLAN-Verbindung prüfen if wlan.isconnected(): print('WLAN-Verbindung hergestellt / WLAN-Status:', wlan.status()) led_onboard.on() ipconfig = wlan.ifconfig() print('IPv4-Adresse:', ipconfig[0]) else: led_onboard.off() print('WLAN-Status:', wlan.status()) raise RuntimeError('Keine WLAN-Verbindung') # Eingabe print() prompt = input('Prompt : ') if prompt != '': # OpenAI-API header = { 'Authorization': 'Bearer ' + OPENAI_API_KEY, 'Content-Type' : 'application/json' } messages = { 'role': 'user', 'content': prompt } data = { 'model': 'gpt-3.5-turbo', 'temperature': 0.5, 'max_tokens': 150, 'messages': [ messages ] } # OpenAI-API-Request response = requests.post(OPENAI_API_URL, headers=header, json=data) # OpenAI-API-Response if response.status_code == 200: json_data = response.json() output = json_data['choices'][0]['message']['content'] # Ausgabe print() print('ChatGPT:', output) else: print() print('Fehler :', response.status_code) print() print('JSON :', response.json()) response.close()
Programmcode für CircuitPython
Umgebungsvariablen in der Datei settings.toml:
# Wifi credentials CIRCUITPY_WIFI_SSID="WLAN-Name" CIRCUITPY_WIFI_PASSWORD="WLAN-Passwort" # OpenAI API OPENAI_API_KEY="Dein API-Key"
Programmcode zum Herstellen der WLAN-Verbindung, der Eingabe des Prompts auf der Kommandozeile, die Kommunikation mit der OpenAI-API und der Ausgabe des Ergebnisses der OpenAI-API.
# Bibliotheken laden import os import wifi import socketpool import ssl import adafruit_requests # WLAN-Zugangsdaten WLAN_NAME = os.getenv('CIRCUITPY_WIFI_SSID') WLAN_PW = os.getenv('CIRCUITPY_WIFI_PASSWORD') # OpenAI-API OPENAI_API_KEY = os.getenv('OPENAI_API_KEY') OPENAI_API_URL = 'https://api.openai.com/v1/chat/completions' # WLAN-Verbindung herstellen if wifi.radio.ipv4_address is None: print('Mit WLAN verbinden:', WLAN_NAME) wifi.radio.connect(WLAN_NAME, WLAN_PW) print('WLAN-Verbindung hergestellt / IP-Adresse:', wifi.radio.ipv4_address) pool = socketpool.SocketPool(wifi.radio) requests = adafruit_requests.Session(pool, ssl.create_default_context()) # Eingabe prompt = input('Prompt : ') # OpenAI-API if prompt != '': # OpenAI-API-Parameter header = { 'Authorization': 'Bearer ' + OPENAI_API_KEY, 'Content-Type' : 'application/json' } messages = { 'role': 'user', 'content': prompt } data = { 'model': 'gpt-3.5-turbo', 'temperature': 0.5, 'max_tokens': 150, 'messages': [ messages ], } # OpenAI-API-Request response = requests.post(OPENAI_API_URL, headers=header, json=data) # OpenAI-API-Response if response.status_code == 200: #print(response.json()) json_data = response.json() output = json_data['choices'][0]['message']['content'] # Ausgabe print('ChatGPT:', output) else: print('Fehler :', response.status_code) print() print('JSON :', response.json())
Erweiterung zum Chatbot
Eine sinnvolle Erweiterung dieses Beispiels ist, den API-Request in eine Endlosschleife zu packen und daraus einen eigenen Chatbot zu bauen. Im Gegensatz zu ChatGPT kann man dann mit den Parametern des KI-Sprachmodells experimentieren.
Erweiterung mit Sprachausgabe
Die OpenAI-API ist nicht darauf beschränkt, Text auszugeben, sondern kann aus einer Texteingabe eine Sprachausgabe (Text-to-Speech, TTS) in Form einer MP3-Datei erzeugen. Im Prinzip ist es dann möglich, dass ein Raspberry Pi Pico mit einem spricht, wenn man eine MP3-Datei auf dem Pico mit Hilfe eines Lautsprechers abspielen kann.
Weitere sinnvolle Anwendungen:
- Die OpenAI-API kann bei der Textgenerierung so stark begrenzt werden, damit der Text auch auf einem kleinen Display (z. B. 1602-LCD) angezeigt werden kann.
- Der Raspberry Pi Pico könnte mithilfe der OpenAI-API kreative Texte generiert und auf einem Display oder als gesprochene Sprache ausgeben.
- Der Raspberry Pi Pico könnte auf sprachgesteuerte Befehle reagieren und Aktionen auszuführen.
- Der Raspberry Pi Pico könnte mit Sensoren gekoppelt werden, um auf Umgebungseinflüsse zu reagieren und die OpenAI-API dazu Informationen ausgeben.
- Wenn der Raspberry Pi Pico mit Sensoren für Feuchtigkeit, Licht und Temperatur ausgestattet ist, dann könnte die OpenAI-API, personalisierte Ratschläge für die Pflege von Pflanzen, basierend auf den aktuellen Bedingungen und dem Pflanzentyp, geben.
Weitere verwandte Themen:
- Raspberry Pi Pico W als WLAN-Client
- Raspberry Pi Pico W: Online-Wetterstation mit Vorhersage (DWD-API)
- Raspberry Pi Pico W: Gasspeicher-Füllstand in Deutschland auslesen und anzeigen (GIE-AGSI-API)
- Raspberry Pi Pico: Smart Home (Ideen und Projekte)
Frag Elektronik-Kompendium.de
Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython
Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.
- LED: Einschalten, ausschalten, blinken und Helligkeit steuern
- Taster: Entprellen und Zustände anzeigen
- LED mit Taster einschalten und ausschalten
- Ampel- und Lauflicht-Steuerung
- Elektronischer Würfel
- Eigene Steuerungen programmieren
Online-Workshop: Programmieren mit dem Raspberry Pi Pico
Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.
Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.