Nota

Benvenuto nella community Facebook SunFounder Raspberry Pi, Arduino ed ESP32!

  • Ottieni supporto tecnico e aiuto nella risoluzione dei problemi.

  • Impara e condividi progetti, suggerimenti e tutorial.

  • Accedi in anteprima a nuovi prodotti e aggiornamenti.

  • Goditi sconti esclusivi e omaggi.

👉 Unisciti a noi qui: [here]

7. Assistente Vocale AI

Questa lezione trasforma il tuo Pironman 5 Pro MAX in un assistente AI incentrato sulla voce. Con il codice fornito, il robot: attende una parola di attivazione, trascrive il tuo parlato con Vosk, lo invia a un LLM di OpenAI, e risponde vocalmente utilizzando Piper TTS.


Prima di Iniziare

Assicurati di avere:

  • 1. Testare Piper — La voce di Piper funziona (ad esempio, puoi riprodurre “Hello”).

  • Testare Vosk — Vosk STT funziona per la tua lingua (es. en-us).

  • 5. Connessione a LLM Online — La tua chiave API OpenAI salvata in secret.py come OPENAI_API_KEY.

  • Un microfono e un altoparlante funzionanti su Pironman 5 Pro MAX.

  • Una connessione di rete stabile (LLM è online).


Eseguire l’Esempio

cd ~/sunfounder-voice-assistant/examples/
sudo python3 voice_assistant.py

Configurazione utilizzata dal codice:

  • LLM: OpenAI (gpt-4o-mini)

  • TTS: Piper (en_US-ryan-low)

  • STT: Vosk (en-us)

  • Parola di attivazione: "hey buddy"

  • Ingresso da tastiera: abilitato (inserimento manuale opzionale)

  • Modalità immagine: abilitata (WITH_IMAGE=True) — richiede un LLM multimodale se decidi di usare immagini in seguito

Cosa succede:

  1. L’assistente mostra un messaggio di benvenuto con la frase di attivazione.

  2. Ascolta “hey buddy”.

  3. Dopo l’attivazione, il tuo parlato viene trascritto (Vosk → testo).

  4. Il testo viene inviato a OpenAI (gpt-4o-mini) per una risposta.

  5. La risposta viene pronunciata con Piper (en_US-ryan-low).

Esempio di interazione

Tu: Hey Buddy
Robot: Ciao!

Tu: Qual è la capitale dell'Italia?
Robot: La capitale dell'Italia è Roma.

Codice

from sunfounder_voice_assistant.voice_assistant import VoiceAssistant
from sunfounder_voice_assistant.llm import OpenAI as LLM
from secret import OPENAI_API_KEY as API_KEY

llm = LLM(
    api_key=API_KEY,
    model="gpt-4o-mini",
)

# Nome del robot
NAME = "Buddy"

# Abilita immagine, necessita di un modello linguistico multimodale
WITH_IMAGE = True

# Imposta modelli e lingue
LLM_MODEL = "gpt-4o-mini"
TTS_MODEL = "en_US-ryan-low"
STT_LANGUAGE = "en-us"

# Abilita ingresso da tastiera
KEYBOARD_ENABLE = True

# Abilita parola di attivazione
WAKE_ENABLE = True
WAKE_WORD = [f"hey {NAME.lower()}"]
# Imposta risposta alla parola di attivazione, lasciare vuoto per disabilitare
ANSWER_ON_WAKE = "Ciao"

# Messaggio di benvenuto
WELCOME = f"Ciao, sono {NAME}. Svegliami con: " + ", ".join(WAKE_WORD)

# Imposta istruzioni
INSTRUCTIONS = f"""
Sei un assistente utile, di nome {NAME}.
"""

va = VoiceAssistant(
    llm,
    name=NAME,
    with_image=WITH_IMAGE,
    tts_model=TTS_MODEL,
    stt_language=STT_LANGUAGE,
    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__":
    va.run()

Spiegazione del codice:

  • OpenAI(..., model="gpt-4o-mini") — Utilizza OpenAI come unico LLM in questa lezione.

  • NAME / WAKE_WORD — Personalizza l’assistente (“Buddy”, “hey buddy”).

  • WITH_IMAGE=True — Abilita la modalità immagine nell’assistente (nessuna logica di I/O immagine inclusa qui).

  • TTS_MODEL="en_US-ryan-low" — Voce Piper utilizzata per le risposte.

  • STT_LANGUAGE="en-us" — Lingua Vosk per il riconoscimento.

  • KEYBOARD_ENABLE=True — Consente l’inserimento manuale opzionale di testo durante il debug.

  • WELCOME / INSTRUCTIONS — Messaggio di avvio e personalità dell’assistente / prompt di sistema.

  • va.run() — Avvia il ciclo: attivazione → ascolto → LLM → risposta vocale.

Passare ad Altri LLM o TTS

Puoi facilmente passare ad altri LLM, TTS o lingue STT con poche modifiche:

  • LLM supportati:

    • OpenAI

    • Doubao

    • Deepseek

    • Gemini

    • Qwen

    • Grok

  • 1. Testare Piper — Verifica le lingue supportate da Piper TTS.

  • Testare Vosk — Verifica le lingue supportate da Vosk STT.

Per passare ad un altro, modifica semplicemente la parte di inizializzazione nel codice:

from sunfounder_voice_assistant.llm import Gemini as LLM
llm = LLM(api_key="YOUR_KEY", model="gemini-pro")

# Imposta modelli e lingue
TTS_MODEL = "en_US-ryan-low"
STT_LANGUAGE = "en-us"

Risoluzione dei Problemi

  • Il robot non risponde alla parola di attivazione

    • Verifica che il microfono funzioni.

    • Assicurati che WAKE_ENABLE = True.

    • Regola la parola di attivazione in base alla tua pronuncia.

    • Riduci il rumore di fondo e parla chiaramente.

  • Nessun suono dall’altoparlante

    • Verifica il nome del modello TTS (es. en_US-ryan-low).

    • Testa manualmente Piper o Espeak.

    • Controlla la connessione dell’altoparlante e il volume.

  • Errore della chiave API o timeout

    • Controlla la tua chiave in secret.py.

    • Assicurati che la tua connessione di rete sia stabile.

    • Conferma che il modello LLM sia supportato (es. gpt-4o-mini).

  • La parola di attivazione funziona ma nessuna risposta

    • Verifica che la lingua STT corrisponda al tuo accento.

    • Assicurati che il modello sia stato scaricato correttamente.

    • Prova a stampare i log di debug per confermare che STT sia in esecuzione.

  • TTS funziona ma nessuna risposta dall’LLM

    • Verifica che la chiave API sia valida.

    • Controlla il nome del modello e le impostazioni LLM.

    • Assicurati di avere connettività Internet.