Nota

Hola, bienvenido a la Comunidad de Entusiastas de Raspberry Pi, Arduino y ESP32 de SunFounder en Facebook. Profundice en Raspberry Pi, Arduino y ESP32 junto a otros entusiastas.

¿Por qué unirte?

  • Soporte de Expertos: Resuelve problemas post-venta y desafíos técnicos con la ayuda de nuestra comunidad y equipo.

  • Aprende y Comparte: Intercambia consejos y tutoriales para mejorar tus habilidades.

  • Vistas Previas Exclusivas: Obtén acceso anticipado a nuevos anuncios de productos y vistas previas.

  • Descuentos Especiales: Disfruta de descuentos exclusivos en nuestros productos más nuevos.

  • Promociones y Sorteos Festivos: Participa en sorteos y promociones de temporada.

👉 ¿Listo para explorar y crear con nosotros? Haz clic en [here] y únete hoy.

7. Asistente de Voz con IA

Esta lección convierte su Pironman 5 Pro MAX en un asistente de IA basado en voz. Con el código proporcionado, el robot: esperará una palabra de activación, transcribirá su voz con Vosk, la enviará a un LLM de OpenAI y responderá hablando usando Piper TTS.


Antes de Empezar

Asegúrese de tener:

  • 1. Probando Piper — La voz de Piper funciona (por ejemplo, puede reproducir “Hello”).

  • Probar Vosk — Vosk STT funciona para su idioma (por ejemplo, en-us).

  • 5. Conectando a LLMs en Línea — Su clave API de OpenAI guardada en secret.py como OPENAI_API_KEY.

  • Un micrófono y altavoz funcionando en Pironman 5 Pro MAX.

  • Una conexión de red estable (el LLM está en línea).


Ejecutar el Ejemplo

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

Configuración utilizada por el código:

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

  • TTS: Piper (en_US-ryan-low)

  • STT: Vosk (en-us)

  • Palabra de activación: "hey buddy"

  • Entrada por teclado: habilitada (entrada manual opcional)

  • Modo imagen: habilitado (WITH_IMAGE=True) — requiere un LLM multimodal si decide usar imágenes más adelante

Qué sucede:

  1. El asistente muestra un mensaje de bienvenida con la frase de activación.

  2. Escucha “hey buddy”.

  3. Después de la activación, su voz se transcribe (Vosk → texto).

  4. El texto se envía a OpenAI (gpt-4o-mini) para obtener una respuesta.

  5. La respuesta se reproduce con Piper (en_US-ryan-low).

Ejemplo de interacción

Usted: Hey Buddy
Robot: ¡Hola!

Usted: ¿Cuál es la capital de Italia?
Robot: La capital de Italia es Roma.

Código

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",
)

# Nombre del robot
NAME = "Buddy"

# Habilitar imagen, necesita configurar un modelo de lenguaje multimodal
WITH_IMAGE = True

# Configurar modelos e idiomas
LLM_MODEL = "gpt-4o-mini"
TTS_MODEL = "en_US-ryan-low"
STT_LANGUAGE = "en-us"

# Habilitar entrada por teclado
KEYBOARD_ENABLE = True

# Habilitar palabra de activación
WAKE_ENABLE = True
WAKE_WORD = [f"hey {NAME.lower()}"]
# Configurar respuesta a la activación, dejar vacío para deshabilitar
ANSWER_ON_WAKE = "Hi there"

# Mensaje de bienvenida
WELCOME = f"Hi, I'm {NAME}. Wake me up with: " + ", ".join(WAKE_WORD)

# Configurar instrucciones
INSTRUCTIONS = f"""
You are a helpful assistant, named {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()

Explicación del código:

  • OpenAI(..., model="gpt-4o-mini") — Usa OpenAI como único LLM en esta lección.

  • NAME / WAKE_WORD — Personaliza el asistente (“Buddy”, “hey buddy”).

  • WITH_IMAGE=True — Habilita el modo imagen en el asistente (sin lógica de entrada/salida de imágenes aquí).

  • TTS_MODEL="en_US-ryan-low" — Voz de Piper utilizada para las respuestas.

  • STT_LANGUAGE="en-us" — Idioma de Vosk para el reconocimiento.

  • KEYBOARD_ENABLE=True — Permite entrada manual de texto opcional durante la depuración.

  • WELCOME / INSTRUCTIONS — Mensaje de inicio y personalidad del asistente/indicaciones del sistema.

  • va.run() — Inicia el bucle: activación → escuchar → LLM → hablar.

Cambiar a Otros LLM o TTS

Puede cambiar fácilmente a otros LLM, TTS o idiomas de STT con solo unas pocas ediciones:

  • LLM compatibles:

    • OpenAI

    • Doubao

    • Deepseek

    • Gemini

    • Qwen

    • Grok

  • 1. Probando Piper — Consulte los idiomas compatibles con Piper TTS.

  • Probar Vosk — Consulte los idiomas compatibles con Vosk STT.

Para cambiar, simplemente modifique la parte de inicialización en el código:

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

# Configurar modelos e idiomas
TTS_MODEL = "en_US-ryan-low"
STT_LANGUAGE = "en-us"

Solución de Problemas

  • El robot no responde a la palabra de activación

    • Verifique que el micrófono funcione.

    • Asegúrese de que WAKE_ENABLE = True.

    • Ajuste la palabra de activación para que coincida con su pronunciación.

    • Reduzca el ruido de fondo y hable claramente.

  • No sale sonido del altavoz

    • Verifique el nombre del modelo TTS (por ejemplo, en_US-ryan-low).

    • Pruebe Piper o Espeak manualmente.

    • Verifique la conexión del altavoz y el volumen.

  • Error de clave API o tiempo de espera

    • Verifique su clave en secret.py.

    • Asegúrese de que su conexión de red sea estable.

    • Confirme que el modelo LLM sea compatible (por ejemplo, gpt-4o-mini).

  • La palabra de activación funciona pero no hay respuesta

    • Verifique que el idioma de STT coincida con su acento.

    • Asegúrese de que el modelo se haya descargado correctamente.

    • Intente imprimir registros de depuración para confirmar que STT está funcionando.

  • TTS funciona pero no hay respuesta del LLM

    • Verifique que la clave API sea válida.

    • Verifique el nombre del modelo y la configuración del LLM.

    • Asegure la conectividad a Internet.