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