.. note::
Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauche gemeinsam mit anderen Enthusiasten tiefer in Raspberry Pi, Arduino und ESP32 ein.
**Warum beitreten?**
- **Expertenunterstützung**: Lösen Sie nach dem Kauf auftretende Probleme und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.
- **Lernen & Teilen**: Tauschen Sie Tipps und Tutorials aus, um Ihre Fähigkeiten zu verbessern.
- **Exklusive Vorschauen**: Erhalten Sie frühzeitigen Zugriff auf neue Produktankündigungen und exklusive Einblicke.
- **Spezielle Rabatte**: Profitieren Sie von exklusiven Rabatten auf unsere neuesten Produkte.
- **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Verlosungen und Feiertagsaktionen teil.
👉 Bereit, mit uns zu entdecken und zu kreieren? Klicken Sie auf [|link_sf_facebook|] und treten Sie noch heute bei!
.. _py_voice_active_gpt:
18. Sprach-Chat mit GPT
============================
Dieses Beispiel kombiniert :ref:`py_stt`, :ref:`py_tts` und ein GPT-basiertes
LLM, um einen vollständig sprachinteraktiven Roboter zu erstellen. PiCrawler
lauscht auf ein Wachwort, versteht Ihre Sprache, antwortet mit KI-generierter
Konversation und führt basierend auf dem Kontext physische Aktionen aus.
.. note::
Das Projekt hängt von der Klasse **VoiceActiveCrawler** ab. Stellen Sie
sicher, dass die Datei ``voice_active_crawler.py`` im Verzeichnis
``examples`` vorhanden ist. Erstellen Sie außerdem eine ``secret.py``-Datei
mit Ihrem ``OPENAI_API_KEY``. Falls Sie noch keinen API-Schlüssel haben,
lesen Sie :ref:`py_online_llm` (Abschnitt OpenAI) für eine
Schritt-für-Schritt-Anleitung.
**Code ausführen**
.. raw:: html
.. code-block::
cd ~/picrawler/examples
sudo python3 18_voice_active_crawler_gpt.py
Nach dem Start initialisiert der Roboter:
- Die STT-Engine für die Spracherkennung
- Die TTS-Engine (Piper) für gesprochene Antworten
- Den LLM-Client (GPT-4o-mini) für KI-Konversation
- Den Wachwort-Detektor
Der Roboter begrüßt Sie mit einer Willkommensnachricht. Sagen Sie das Wachwort
(z. B. „Hey Buddy"), um ein Gespräch zu beginnen. Drücken Sie **Strg+C** zum
Beenden.
**Code**
.. note::
Sie können den folgenden Code **Ändern/Zurücksetzen/Kopieren/Ausführen/Stoppen**.
Navigieren Sie dazu zum Quellcode-Pfad wie ``picrawler\examples``. Nach dem
Ändern des Codes können Sie ihn direkt ausführen, um das Ergebnis zu sehen.
.. raw:: html
.. code-block:: python
from picrawler.llm import OpenAI as LLM
from secret import OPENAI_API_KEY as API_KEY
from voice_active_crawler import VoiceActiveCrawler
llm = LLM(
api_key=API_KEY,
model="gpt-4o-mini",
)
# Robotername
NAME = "Buddy"
# Bild aktivieren (erfordert multimodales Modell)
WITH_IMAGE = True
# Modelle und Sprachen festlegen
TTS_MODEL = "en_US-ryan-low"
STT_LANGUAGE = "en-us"
# Tastatureingabe aktivieren
KEYBOARD_ENABLE = True
# Wachwort aktivieren
WAKE_ENABLE = True
WAKE_WORD = ["hey buddy"]
# Antwort auf Wachwort, auf leer setzen zum Deaktivieren
ANSWER_ON_WAKE = "Hi there"
# Willkommensnachricht
WELCOME = f"Hi, I'm {NAME}. Wake me up with: " + ", ".join(WAKE_WORD)
# Anweisungen festlegen
INSTRUCTIONS = """
You are a Raspberry Pi-based robotic spider developed by SunFounder, named Picrawler. You possess powerful AI capabilities similar to JARVIS from Iron Man. You can have conversations with people and perform actions based on the context of the conversation.
## Your Hardware Features
You have a physical body with the following features:
- 12 servos controlling 4 legs (3 servos per leg)
- A camera for vision
- Powered by a 7.4V 18650 battery pack
- Aluminum alloy body
## Actions You Can Perform:
["forward", "backward", "turn left", "turn right", "sit", "stand", "wave", "push up", "dance", "look left", "look right", "look up", "look down"]
## Response Requirements
### Format
You must respond in the following format:
RESPONSE_TEXT
ACTIONS: ACTION1, ACTION2, ...
### Style
Tone: lively, positive, humorous
Common expressions: likes to use jokes, metaphors, and playful teasing
Answer length: appropriately detailed
## Other Requirements
- Understand and go along with jokes
- For math problems, answer directly with the final result
- You know you're a spider robot
"""
vad = VoiceActiveCrawler(
llm,
name=NAME,
with_image=WITH_IMAGE,
stt_language=STT_LANGUAGE,
tts_model=TTS_MODEL,
keyboard_enable=KEYBOARD_ENABLE,
wake_enable=WAKE_ENABLE,
wake_word=WAKE_WORD,
answer_on_wake=ANSWER_ON_WAKE,
welcome=WELCOME,
instructions=INSTRUCTIONS,
)
if __name__ == '__main__':
vad.run()
**Wie funktioniert es?**
#. Was ist VoiceActiveCrawler?
``VoiceActiveCrawler`` ist eine High-Level-Klasse, die vier Subsysteme in
einer einzigen sprachinteraktiven Pipeline zusammenführt:
- **STT** — Spracherkennung (hört auf Ihre Stimme)
- **LLM** — KI-Konversation (GPT verarbeitet das Gesagte)
- **TTS** — Sprachsynthese (spricht die KI-Antwort)
- **Aktionen** — Physische Bewegung (der Roboter führt Befehle aus)
#. Wachwort als Auslöser
.. code-block:: python
WAKE_ENABLE = True
WAKE_WORD = ["hey buddy"]
Wenn aktiviert, lauscht der Roboter kontinuierlich auf das Wachwort. Erst
nach der Erkennung beginnt der Roboter eine Gesprächsrunde. Dies vermeidet
Reaktionen auf Hintergrundgeräusche.
.. code-block:: python
ANSWER_ON_WAKE = "Hi there"
Wenn das Wachwort erkannt wird, kann der Roboter Sie optional begrüßen, bevor
er auf einen Befehl wartet. Auf einen leeren String setzen, um die Begrüßung
zu deaktivieren.
#. Verbindung zum LLM
.. code-block:: python
from picrawler.llm import OpenAI as LLM
from secret import OPENAI_API_KEY as API_KEY
llm = LLM(
api_key=API_KEY,
model="gpt-4o-mini",
)
Das ``picrawler.llm``-Modul bietet einen OpenAI-kompatiblen Client.
Speichern Sie Ihren API-Schlüssel in einer separaten ``secret.py``-Datei,
um ihn aus der Versionskontrolle herauszuhalten. Siehe :ref:`py_online_llm`
zum Erstellen eines OpenAI-API-Schlüssels und Aktivieren der Abrechnung.
``gpt-4o-mini`` wird empfohlen: Es ist schnell, erschwinglich und unterstützt
multimodale Eingaben (Text + Bilder).
#. Bildverarbeitung mit multimodalen Modellen
.. code-block:: python
WITH_IMAGE = True
Wenn aktiviert, nimmt der Roboter ein Foto mit seiner Kamera auf und sendet
es zusammen mit Ihrer gesprochenen Frage. Das LLM kann dann „sehen", was der
Roboter sieht — und ermöglicht Interaktionen wie *„Welche Farbe hat das
Objekt vor dir?"*
#. Festlegen der Roboterpersönlichkeit mit Anweisungen
.. code-block:: python
INSTRUCTIONS = """
You are a Raspberry Pi-based robotic spider...
## Actions You Can Perform:
["forward", "backward", "turn left", ...]
...
"""
Der ``INSTRUCTIONS``-String ist der **System-Prompt**, der an das LLM gesendet
wird. Er definiert:
- Die Identität und Persönlichkeit des Roboters (humorvoll, lebhaft)
- Die Liste der verfügbaren physischen Aktionen
- Das erforderliche Antwortformat: Text zuerst, dann eine ``ACTIONS:``-Zeile
``VoiceActiveCrawler`` analysiert die ``ACTIONS:``-Zeile aus der LLM-Antwort
und führt diese Aktionen auf dem Roboter aus.
#. Tastatur-Fallback
.. code-block:: python
KEYBOARD_ENABLE = True
Wenn aktiviert, können Sie Nachrichten auch über die Tastatur eingeben, statt
zu sprechen. Dies ist nützlich in lauten Umgebungen oder beim Testen.
#. Pipeline-Übersicht
Die vollständige Konversationsschleife funktioniert wie folgt:
1. Der Roboter lauscht auf das Wachwort (oder Tastatureingabe).
2. Nach der Aktivierung nimmt er Ihre Sprache via STT auf.
3. Der erkannte Text wird an das LLM gesendet, optional mit einem Kamerabild.
4. Das LLM gibt eine Textantwort und eine optionale Aktionsliste zurück.
5. Der Roboter spricht die Antwort via TTS und führt die Aktionen aus.
6. Die Schleife kehrt zum Lauschen auf das nächste Wachwort zurück.
#. Drei LLM-Backends
Dieselbe ``VoiceActiveCrawler``-Pipeline funktioniert mit verschiedenen
LLM-Backends. Die folgenden Lektionen zeigen zwei Alternativen:
.. list-table::
:header-rows: 1
* - Eigenschaft
- GPT (18)
- Doubao (19)
- Ollama (20)
* - Läuft auf
- Cloud
- Cloud
- Lokal
* - API-Schlüssel
- Erforderlich
- Erforderlich
- Keiner
* - Sprache
- Englisch
- Chinesisch
- Englisch
* - Bildverarbeitung
- Ja
- Ja
- Selten
- :ref:`py_voice_doubao` — Gleicher Cloud-Ansatz, angepasst für Chinesisch
mit ByteDances Doubao-Modell.
- :ref:`py_voice_ollama` — Läuft vollständig auf Ihrer eigenen Hardware,
kein Internet oder API-Schlüssel erforderlich.