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