Cómo construir un asistente de inteligencia artificial DIY con Raspberry Pi

Cómo construir un asistente de inteligencia artificial DIY con Raspberry Pi

¿Quieres un pequeño asistente de voz que te siga, funcione con tu propio hardware y no pida doce piñas por error porque te haya escuchado mal? Un asistente de IA casero con Raspberry Pi es sorprendentemente fácil de conseguir, divertido y flexible. Conectarás una palabra de activación, reconocimiento de voz (ASR = reconocimiento automático de voz), un cerebro para lenguaje natural (reglas o LLM) y texto a voz (TTS). Añade algunos scripts, uno o dos servicios y algunos ajustes de audio, y tendrás un altavoz inteligente de bolsillo que obedece tus reglas.

Te ayudamos a empezar desde cero y a hablar con tu Pi sin los típicos tirones de pelo. Cubriremos las piezas, la configuración, el código, las comparaciones, los problemas... todo. 🌯

Artículos que quizás te interese leer después de éste:

🔗 Cómo estudiar la IA de forma eficaz
Crea una hoja de ruta de estudio, practica proyectos y realiza un seguimiento del progreso.

🔗 Cómo iniciar una empresa de IA
Validar el problema, crear MVP, formar equipo y conseguir clientes iniciales.

🔗 Cómo utilizar la IA para ser más productivo
Automatice tareas rutinarias, optimice flujos de trabajo y aumente la producción creativa.

🔗 Cómo incorporar IA a tu negocio
Identificar procesos de alto impacto, implementar pilotos, medir el ROI y escalar.


Qué hace que un asistente de inteligencia artificial casero sea bueno con Raspberry Pi ✅

  • Privado por defecto : mantén el audio local siempre que sea posible. Tú decides qué sale del dispositivo.

  • Modular : intercambia componentes como Lego: motor de palabras de activación, ASR, LLM, TTS.

  • Asequible : principalmente micrófonos, parlantes y un Pi de código abierto y de consumo básico.

  • Hackeable : ¿Quieres domótica, paneles, rutinas y habilidades personalizadas? Fácil.

  • Confiable : administrado por servicio, se inicia y comienza a escuchar automáticamente.

  • Diversión : aprenderás mucho sobre audio, procesos y diseño basado en eventos.

Un pequeño consejo: Si usas una Raspberry Pi 5 y planeas usar modelos locales más pesados, un disipador de calor con clip es útil en condiciones de carga sostenida. (En caso de duda, elige el disipador activo oficial diseñado para Pi 5). [1]


Piezas y herramientas que necesitarás 🧰

  • Raspberry Pi : se recomienda Pi 4 o Pi 5 para mayor espacio libre.

  • Tarjeta microSD : se recomienda 32 GB+.

  • Micrófono USB : un micrófono de conferencia USB simple es genial.

  • Altavoz : altavoz USB o de 3,5 mm, o un amplificador I2S HAT.

  • Red : Ethernet o Wi-Fi.

  • Accesorios opcionales: carcasa, disipador activo para Pi 5, botón pulsador para hablar, anillo LED. [1]

Configuración del sistema operativo y de línea base

  1. Instala el sistema operativo Raspberry Pi con Raspberry Pi Imager. Es la forma más sencilla de obtener una microSD de arranque con los ajustes preestablecidos que quieras. [1]

  2. Arranque, conéctese a la red y luego actualice los paquetes:

sudo apt update && sudo apt upgrade -y
  1. Conceptos básicos de audio : En Raspberry Pi OS, puedes configurar la salida, los niveles y los dispositivos predeterminados mediante la interfaz de usuario del escritorio o raspi-config . Todos los modelos admiten audio USB y HDMI; la salida Bluetooth está disponible en los modelos con Bluetooth. [1]

  2. Verificar dispositivos:

un registro -l una reproducción -l

Luego, prueba la captura y la reproducción. Si los niveles parecen extraños, revisa los mezcladores y los valores predeterminados antes de culpar al micrófono.

 

Raspberry Pi con IA

La arquitectura de un vistazo 🗺️

Un asistente de inteligencia artificial DIY sensato con flujo de Raspberry Pi se ve así:

Palabra de activación → captura de audio en vivo → transcripción ASR → manejo de intención o LLM → texto de respuesta → TTS → reproducción de audio → acciones opcionales a través de MQTT o HTTP.

  • Palabra de activación : Porcupine es pequeño, preciso y se ejecuta localmente con control de sensibilidad por palabra clave. [2]

  • ASR : Whisper es un modelo ASR multilingüe de propósito general, entrenado durante aproximadamente 680.000 horas; es robusto a acentos y ruido de fondo. Para su uso en dispositivos, whisper.cpp proporciona una ruta de inferencia C/C++ optimizada. [3][4]

  • Cerebro : Tú eliges: un LLM en la nube a través de API, un motor de reglas o inferencia local según la potencia.

  • TTS : Piper genera un habla natural localmente, con la suficiente rapidez para ofrecer respuestas ágiles en un hardware modesto. [5]


Tabla de comparación rápida 🔎

Herramienta Mejor para Precio-ish Por qué funciona
Palabra de despertar del puercoespín Disparador que siempre escucha Nivel gratuito + CPU baja, enlaces precisos y fáciles [2]
Susurro.cpp ASR local en Pi Código abierto Buena precisión, compatible con CPU [4]
Susurro más rápido ASR más rápido en CPU/GPU Código abierto Optimizaciones de CTranslate2
Piper TTS Salida de voz local Código abierto Voces rápidas, muchos idiomas [5]
API de Cloud LLM Razonamiento rico Basado en el uso Descarga el procesamiento pesado
Nodo-RED Orquestando acciones Código abierto Flujos visuales, compatibles con MQTT

Construcción paso a paso: Tu primer bucle de voz 🧩

Usaremos Porcupine para la palabra de activación, Whisper para la transcripción, una función cerebral ligera para la respuesta (reemplázala con la LLM que prefieras) y Piper para el habla. Mantenlo al mínimo y luego itera.

1) Instalar dependencias

sudo apt install -y python3-pip portaudio19-dev sox ffmpeg pip3 install dispositivo de sonido numpy
  • Porcupine: descarga el SDK/bindings para tu idioma y sigue las instrucciones de inicio rápido (tecla de acceso + lista de palabras clave + cuadros de audio → .process ). [2]

  • Susurro (compatible con CPU): compila whisper.cpp :

git clone https://github.com/ggml-org/whisper.cpp cd whisper.cpp && cmake -B build && cmake --build build -j ./models/download-ggml-model.sh base.en ./build/bin/whisper-cli -m ./models/ggml-base.en.bin -f your.wav -otxt

Lo anterior refleja el inicio rápido del proyecto. [4]

¿Prefieres Python? Faster-whisper (CTranslate2) suele ser más rápido que Python estándar en CPU modestas.

2) Configurar Piper TTS

git clone https://github.com/rhasspy/piper cd piper make # Descarga un modelo de voz que te guste, p. ej., en_US-amy echo "Hola." | ./piper --model voices/en/en_US-amy-medium.onnx --output_file hello.wav aplay hello.wav

Piper está diseñado para TTS en el dispositivo con múltiples opciones de voz/idioma. [5]

3) Un bucle asistente mínimo en Python

Compacto a propósito: espera una frase de activación (stub), graba, transcribe con whisper.cpp , genera una respuesta (marcador de posición) y luego habla mediante Piper. Intercambia el marcador de posición con tu LLM o lógica de reglas favorita.

importar sistema operativo, subproceso, onda importar dispositivo de sonido como sd WAKE_WORD = "hey computadora" # intercambio para Porcupine en producción [2] SEGUNDOS DE GRABACIÓN = 6 FRECUENCIA DE MUESTREO = 16000 CANALES = 1 WORKDIR = "/home/pi/assistant" ASR_BIN = "/home/pi/whisper.cpp/build/bin/whisper-cli" # [4] ASR_MODEL = "/home/pi/whisper.cpp/models/ggml-base.en.bin" PIPER_BIN = "/home/pi/piper/build/piper" # [5] PIPER_VOICE = "/home/pi/piper/voices/en/en_US-amy-medium.onnx" os.makedirs(WORKDIR, exist_ok=True) def record_wav(path, segundos=SEGUNDOS_DE_GRABACIÓN): audio = sd.rec(int(segundos * FRECUENCIA_DE_MUESTREO), frecuencia_de_muestreo=FRECUENCIA_DE_MUESTREO, canales=CANALES, dtype='int16') sd.wait() con wave.open(ruta, 'wb') como w: w.setnchannels(CANALES); w.setsampwidth(2); w.setframerate(SAMPLE_RATE) w.writeframes(audio.tobytes()) def transcribe(path): cmd = [ASR_BIN, "-m", ASR_MODEL, "-f", path, "-otxt"] subprocess.run(cmd, check=True, cwd=WORKDIR) with open(path.replace(".wav", ".txt"), "r", encoding="utf-8") as f: return f.read().strip() def generate_reply(prompt): if "weather" in prompt.lower(): return "No puedo ver las nubes, pero podría estar bien. Traiga una chaqueta por si acaso." devuelve "Dijiste: " + prompt def speak(texto): proc = subprocess.Popen([PIPER_BIN, "--model", PIPER_VOICE, "--output_file", f"{WORKDIR}/reply.wav"], stdin=subprocess.PIPE) proc.stdin.write(texto.encode("utf-8")); proc.stdin.close(); proc.wait() subprocess.run(["aplay", f"{WORKDIR}/reply.wav"], check=True) print("Asistente listo. Escriba la frase de activación para probar.") while True: typed = input("> ").strip().lower() if typed == WAKE_WORD: wav_path = f"{WORKDIR}/input.wav" record_wav(wav_path) text = transcribe(wav_path) reply = generate_reply(text) print("Usuario:", text); print("Asistente:", reply) speak(reply) else: print("Escriba la frase de activación para probar el bucle.")

Para una detección real de palabras de activación, integre el detector de streaming de Porcupine (bajo consumo de CPU, sensibilidad por palabra clave). [2]


Ajuste de audio que realmente importa 🎚️

Unas pequeñas correcciones hacen que tu asistente se sienta 10 veces más inteligente:

  • Distancia del micrófono : 30 a 60 cm es un punto ideal para muchos micrófonos USB.

  • Niveles : evita el recorte de entrada y mantén la reproducción correcta; corrige el enrutamiento antes de buscar código fantasma. En Raspberry Pi OS, puedes administrar el dispositivo de salida y los niveles mediante las herramientas del sistema o raspi-config . [1]

  • Acústica de la sala : las paredes duras provocan ecos; una alfombra suave debajo del micrófono ayuda.

  • Umbral de activación de la palabra clave : demasiado sensible → activadores fantasma; demasiado estricto → gritarás al plástico. Porcupine permite ajustar la sensibilidad por palabra clave. [2]

  • Temperaturas : las transcripciones largas en Pi 5 se benefician del enfriador activo oficial para un rendimiento sostenido. [1]


De juguete a electrodoméstico: Servicios, inicio automático, comprobaciones de estado 🧯

Los humanos olvidan ejecutar scripts. Las computadoras olvidan ser amables. Convierte tu bucle en un servicio gestionado:

  1. Crear una unidad systemd:

[Unidad] Descripción=DIY Voice Assistant Después=network.target sound.target [Servicio] Usuario=pi WorkingDirectory=/home/pi/assistant ExecStart=/usr/bin/python3 /home/pi/assistant/assistant.py Reiniciar=always RestartSec=3 [Instalar] WantedBy=multi-user.target
  1. Habilitarlo:

sudo cp asistente.servicio /etc/systemd/system/ sudo systemctl daemon-reload sudo systemctl enable --now asistente.servicio
  1. Colas de registro:

journalctl -u asistente -f

Ahora arranca al arrancar, se reinicia al fallar y, en general, se comporta como un electrodoméstico. Un poco aburrido, mucho mejor.


Sistema de habilidades: Hazlo realmente útil en casa 🏠✨

Una vez que la voz entrante y la voz saliente estén establecidas, agregue acciones:

  • Enrutador de intenciones : rutas de palabras clave simples para tareas comunes.

  • Hogar inteligente : publique eventos en MQTT o llame a los puntos finales HTTP de Home Assistant.

  • Complementos : funciones rápidas de Python como set_timer , what_is_the_time , play_radio , run_scene .

Incluso con un LLM en la nube en el circuito, enrute primero los comandos locales obvios para lograr velocidad y confiabilidad.


Solo local vs. Asistencia en la nube: Ventajas y desventajas que notarás 🌓

Solo local.
Ventajas: privado, sin conexión, costos predecibles.
Desventajas: los modelos más pesados ​​pueden ser lentos en placas pequeñas. El entrenamiento multilingüe de Whisper mejora la robustez si se mantiene en el dispositivo o en un servidor cercano. [3]

de la asistencia en la nube
: razonamiento potente, ventanas de contexto más amplias.
Desventajas: pérdida de datos del dispositivo, dependencia de la red, costos variables.

Un híbrido suele ganar: palabra de activación + ASR local → llamar a una API para razonar → TTS local. [2][3][5]


Solución de problemas: Gremlins extraños y soluciones rápidas 👾

  • Falsos disparadores de palabras de activación : reduzca la sensibilidad o pruebe un micrófono diferente. [2]

  • Retraso de ASR : utilice un modelo Whisper más pequeño o cree whisper.cpp con indicadores de versión ( -j --config Release ). [4]

  • TTS entrecortado : genere previamente frases comunes; confirme su dispositivo de audio y frecuencias de muestreo.

  • No se detectó micrófono : verifique arecord -l y mezcladores.

  • Limitación térmica : utilice el enfriador activo oficial en Pi 5 para un rendimiento sostenido. [1]


Notas de seguridad y privacidad que deberías leer 🔒

  • Mantenga su Pi actualizado con APT.

  • Si utiliza alguna API en la nube, registre lo que envía y considere redactar primero la información personal de forma local.

  • Ejecute los servicios con el mínimo privilegio; evite sudo en ExecStart a menos que sea necesario.

  • Proporcionar un modo solo local para invitados o para horas de silencio.


Variantes de construcción: mezcla y combina como un sándwich 🥪

  • Ultralocal : Puercoespín + whisper.cpp + Piper + reglas sencillas. Privado y robusto. [2][4][5]

  • Asistencia rápida en la nube : Porcupine + (Whisper local más pequeño o ASR en la nube) + TTS local + LLM en la nube.

  • Central de domótica : agregue flujos de Node-RED o Home Assistant para rutinas, escenas y sensores.


Ejemplo de habilidad: Luces encendidas mediante MQTT 💡

import paho.mqtt.client como mqtt MQTT_HOST = "192.168.1.10" TEMA = "casa/sala/luz/set" def set_light(estado: str): cliente = mqtt.Client() cliente.connect(MQTT_HOST, 1883, 60) carga útil = "ON" si estado.lower().startswith("on") de lo contrario "OFF" cliente.publish(TEMA, carga útil, qos=1, retain=False) cliente.disconnect() # si "enciende las luces" en el texto: set_light("on")

Añade una línea de voz como: “enciende la lámpara de la sala” y te sentirás como un mago.


Por qué esta pila funciona en la práctica 🧪

  • Porcupine es eficiente y preciso en la detección de palabras de activación en placas pequeñas, lo que hace posible la escucha constante. [2]

  • La amplia formación multilingüe de Whisper lo hace resistente a diversos entornos y acentos. [3]

  • whisper.cpp mantiene esa energía utilizable en dispositivos que solo utilizan CPU, como el Pi. [4]

  • Piper mantiene las respuestas ágiles sin enviar el audio a un TTS en la nube. [5]


Demasiado largo, no lo leí

Crea un asistente de IA modular y privado con Raspberry Pi combinando Porcupine para la palabra de activación, Whisper (mediante whisper.cpp ) para ASR, el cerebro que elijas para las respuestas y Piper para el TTS local. Configúralo como un servicio systemd, ajusta el audio y conecta acciones MQTT o HTTP. Es más económico de lo que crees y, curiosamente, es una experiencia agradable. [1][2][3][4][5]


Referencias

  1. Software y refrigeración para Raspberry Pi : Raspberry Pi Imager (descarga y uso) y Pi 5 Active Cooler (información del producto)

  2. Porcupine Wake Word : SDK e inicio rápido (palabras clave, sensibilidad, inferencia local)

  3. Whisper (modelo ASR) : ASR robusto y multilingüe entrenado durante aproximadamente 680 000 horas

    • Radford et al., Reconocimiento de voz robusto mediante supervisión débil a gran escala (Whisper): leer más

  4. whisper.cpp : inferencia de Whisper compatible con CPU con CLI y pasos de compilación

  5. Piper TTS : TTS neuronal local y rápido con múltiples voces e idiomas

Encuentra la última IA en la tienda oficial de AI Assistant

Sobre nosotros


Volver al blog