Raspberry Pi Pico W: KI-Chatbot mit der OpenAI-API (ChatGPT)

Die Besonderheit von ChatGPT ist die Kommunikation und Steuerung einer Software mit natürlicher Sprache. ChatGPT ist mit Hilfe eines KI-Sprachmodells in der Lage zu verstehen, was das menschliche Gegenüber will oder meint. Umgekehrt kann ChatGPT verständliche Text produzieren. Mit diesen Fähigkeiten ergeben sich vielfältige Möglichkeiten, rund um die Eingabe und Ausgabe von natürlicher Sprache.

Mithilfe der OpenAI-API kann man sich einen eigenen KI-Chatbot bauen und im Gegensatz zu ChatGPI die Parameter des KI-Sprachmodells so anpassen, dass die Textausgabe für die eigene Anwendung besser geeignet ist.

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.

Programmcode für MicroPython

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 wird.

Danach kann ein erneuter Prompt eingegeben werden. Im Gegensatz zu ChatGPT besteht zwischen den einzelnen Prompts keinen Zusammenhang.

# 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')

# Endlosschleife
while True:
    # 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())

# Endlosschleife
while True:
    # Eingabe
    print()
    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:
            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())

Prompt Engineering und Prompt Design

Damit man die OpenAI-API sinnvoll nutzen kann, ist es hilfreich etwas mehr über die Sprachmodell-Parameter und das Prompting zu wissen.

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