.. note::
Ciao, benvenuto nella Community SunFounder Raspberry Pi & Arduino & ESP32 su Facebook! Esplora a fondo Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
**Perché unirti a noi?**
- **Supporto esperto**: Risolvi problemi post-vendita e sfide tecniche con l'aiuto della nostra community e del nostro team.
- **Impara e condividi**: Scambia suggerimenti e tutorial per migliorare le tue competenze.
- **Anteprime esclusive**: Accedi in anteprima agli annunci di nuovi prodotti.
- **Sconti speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
- **Promozioni festive e giveaway**: Partecipa a concorsi e promozioni speciali.
👉 Sei pronto a esplorare e creare con noi? Clicca [|link_sf_facebook|] e unisciti subito!
.. _py_voice_active_gpt:
18. Chat vocale con GPT
============================
Questo esempio combina :ref:`py_stt`, :ref:`py_tts` e un LLM basato su GPT
per creare un robot completamente interattivo a voce. PiCrawler ascolta una
parola di attivazione, comprende il tuo parlato, risponde con una
conversazione generata dall'IA ed esegue azioni fisiche in base al contesto.
.. note::
Il progetto dipende dalla classe **VoiceActiveCrawler**. Assicurati che il
file ``voice_active_crawler.py`` sia presente nella directory ``examples``.
Crea anche un file ``secret.py`` con il tuo ``OPENAI_API_KEY``. Se non hai
ancora ottenuto una chiave API, consulta :ref:`py_online_llm` (sezione
OpenAI) per istruzioni passo passo.
**Esegui il codice**
.. raw:: html
.. code-block::
cd ~/picrawler/examples
sudo python3 18_voice_active_crawler_gpt.py
Dopo l'esecuzione, il robot inizializza:
- Il motore STT per il riconoscimento vocale
- Il motore TTS (Piper) per le risposte parlate
- Il client LLM (GPT-4o-mini) per la conversazione IA
- Il rilevatore di parole di attivazione
Il robot ti saluta con un messaggio di benvenuto. Pronuncia la parola di
attivazione (es. "Hey Buddy") per iniziare una conversazione. Premi **Ctrl+C**
per uscire.
**Codice**
.. note::
Puoi **Modificare/Reimpostare/Copiare/Eseguire/Fermare** il codice qui
sotto. Ma prima, devi andare nel percorso del codice sorgente come
``picrawler\examples``. Dopo aver modificato il codice, puoi eseguirlo
direttamente per vedere l'effetto.
.. 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",
)
# Nome del robot
NAME = "Buddy"
# Attiva immagine (richiede modello multimodale)
WITH_IMAGE = True
# Imposta modelli e lingue
TTS_MODEL = "en_US-ryan-low"
STT_LANGUAGE = "en-us"
# Attiva input da tastiera
KEYBOARD_ENABLE = True
# Attiva parola di attivazione
WAKE_ENABLE = True
WAKE_WORD = ["hey buddy"]
# Risposta alla parola di attivazione, imposta vuoto per disattivare
ANSWER_ON_WAKE = "Hi there"
# Messaggio di benvenuto
WELCOME = f"Hi, I'm {NAME}. Wake me up with: " + ", ".join(WAKE_WORD)
# Imposta istruzioni
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()
**Come funziona?**
#. Cos'è VoiceActiveCrawler?
``VoiceActiveCrawler`` è una classe di alto livello che collega quattro
sottosistemi in un unico pipeline interattivo vocale:
- **STT** — riconoscimento vocale (ascolta la tua voce)
- **LLM** — conversazione IA (GPT elabora ciò che hai detto)
- **TTS** — sintesi vocale (pronuncia la risposta dell'IA)
- **Azioni** — movimento fisico (il robot esegue i comandi)
#. Usare la parola di attivazione come trigger
.. code-block:: python
WAKE_ENABLE = True
WAKE_WORD = ["hey buddy"]
Quando attivato, il robot ascolta continuamente la parola di attivazione.
Solo dopo averla rilevata, il robot inizia un turno di conversazione.
Questo evita di rispondere al rumore di fondo.
.. code-block:: python
ANSWER_ON_WAKE = "Hi there"
Quando la parola di attivazione viene riconosciuta, il robot può
opzionalmente salutarti prima di ascoltare un comando. Imposta una stringa
vuota per disattivare il saluto.
#. Connessione al 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",
)
Il modulo ``picrawler.llm`` fornisce un client compatibile con OpenAI.
Conserva la tua chiave API in un file ``secret.py`` separato per tenerla
fuori dal controllo versione. Vedi :ref:`py_online_llm` per sapere come
creare una chiave API OpenAI e attivare la fatturazione.
``gpt-4o-mini`` è consigliato: è veloce, economico e supporta input
multimodali (testo + immagini).
#. Visione con modelli multimodali
.. code-block:: python
WITH_IMAGE = True
Quando attivato, il robot cattura una foto dalla sua fotocamera e la invia
insieme alla tua domanda parlata. Il LLM può quindi "vedere" ciò che il
robot vede — consentendo interazioni come *"Di che colore è l'oggetto
davanti a te?"*
#. Definire la personalità del robot con le istruzioni
.. code-block:: python
INSTRUCTIONS = """
You are a Raspberry Pi-based robotic spider...
## Actions You Can Perform:
["forward", "backward", "turn left", ...]
...
"""
La stringa ``INSTRUCTIONS`` è il **prompt di sistema** inviato al LLM.
Definisce:
- L'identità e la personalità del robot (umoristico, vivace)
- L'elenco delle azioni fisiche disponibili
- Il formato di risposta richiesto: prima il testo, poi una riga
``ACTIONS:``
``VoiceActiveCrawler`` analizza la riga ``ACTIONS:`` dalla risposta del
LLM ed esegue quelle azioni sul robot.
#. Alternativa da tastiera
.. code-block:: python
KEYBOARD_ENABLE = True
Quando attivato, puoi anche digitare messaggi da tastiera invece di
parlare. È utile in ambienti rumorosi o durante i test.
#. Panoramica del pipeline
Il ciclo completo di conversazione funziona così:
1. Il robot ascolta la parola di attivazione (o input da tastiera).
2. Una volta attivato, registra la tua voce tramite STT.
3. Il testo riconosciuto viene inviato al LLM, opzionalmente con
un'immagine della fotocamera.
4. Il LLM restituisce una risposta testuale e un elenco opzionale di azioni.
5. Il robot pronuncia la risposta tramite TTS ed esegue le azioni.
6. Il ciclo torna all'ascolto della prossima parola di attivazione.
#. Tre backend LLM
Lo stesso pipeline ``VoiceActiveCrawler`` funziona con diversi backend LLM.
Le lezioni seguenti mostrano due alternative:
.. list-table::
:header-rows: 1
* - Caratteristica
- GPT (18)
- Doubao (19)
- Ollama (20)
* - Eseguito su
- Cloud
- Cloud
- Locale
* - Chiave API
- Richiesta
- Richiesta
- Nessuna
* - Lingua
- Inglese
- Cinese
- Inglese
* - Visione
- Sì
- Sì
- Raramente
- :ref:`py_voice_doubao` — Stesso approccio cloud, adattato al cinese con
il modello Doubao di ByteDance.
- :ref:`py_voice_ollama` — Eseguito interamente sul tuo hardware, senza
internet o chiave API necessari.