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:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

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

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

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.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren