Nota

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 [qui] e unisciti subito!

18. Chat vocale con GPT

Questo esempio combina 15. STT (Speech-to-Text), 16. TTS (Text-to-Speech) 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.

Nota

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 17. Connessione agli LLM online (sezione OpenAI) per istruzioni passo passo.

Esegui il codice

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

Nota

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.

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?

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

  2. Usare la parola di attivazione come trigger

    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.

    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.

  3. Connessione al LLM

    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 17. Connessione agli LLM online per sapere come creare una chiave API OpenAI e attivare la fatturazione.

    gpt-4o-mini è consigliato: è veloce, economico e supporta input multimodali (testo + immagini).

  4. Visione con modelli multimodali

    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?»

  5. Definire la personalità del robot con le istruzioni

    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.

  6. Alternativa da tastiera

    KEYBOARD_ENABLE = True
    

    Quando attivato, puoi anche digitare messaggi da tastiera invece di parlare. È utile in ambienti rumorosi o durante i test.

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

  8. Tre backend LLM

    Lo stesso pipeline VoiceActiveCrawler funziona con diversi backend LLM. Le lezioni seguenti mostrano due alternative:

    Caratteristica

    GPT (18)

    Doubao (19)

    Ollama (20)

    Eseguito su

    Cloud

    Cloud

    Locale

    Chiave API

    Richiesta

    Richiesta

    Nessuna

    Lingua

    Inglese

    Cinese

    Inglese

    Visione

    Raramente