24 puntos por GN⁺ 2025-05-14 | 2 comentarios | Compartir por WhatsApp
  • Cómo crear tú mismo un asistente de voz personal que corre en el dispositivo sin depender de APIs de LLM ni de la nube
  • Este asistente entiende lenguaje natural, realiza llamadas a funciones personales y funciona únicamente en local, por lo que puede garantizar privacidad total
  • Para lograrlo, se ajusta finamente un modelo LLaMA 3.1 con LoRA, se usa Whisper para convertir voz a texto, y luego se interpreta como comando para ejecutarlo directamente en el dispositivo
  • El proyecto se compone de generación de dataset → fine-tuning → conexión de interfaz de voz → pruebas y despliegue, y se ofrece como una miniserie gratuita de 5 partes que cubre cada etapa
  • Advierte contra la idea equivocada de que “ejecutar on-device = simple”, y enfatiza que incluso en local son indispensables una mentalidad de MLOps y un control de calidad riguroso

¿Por qué construir ahora un asistente de voz local?

  • Hablar con ChatGPT es útil, pero ¿de verdad hay que enviar a la nube hasta los comandos más simples?
  • Si el modelo está instalado directamente en tu dispositivo, puedes obtener velocidad, privacidad y control al mismo tiempo
  • Es especialmente útil en entornos sensibles como salud, legal y herramientas internas de empresa

Resumen de la arquitectura completa

Componentes del proyecto

  1. Reconocimiento de voz (Whisper) → conversión a texto
  2. LLM (LLaMA 3.1) → interpretación de comandos
  3. Ejecutor de funciones → ejecución de funciones reales como lock_screen()

Parte 1: arquitectura y mentalidad MLOps

Por qué se necesita MLOps incluso en local

  • Existen problemas de model drift, cambios en prompts, confiabilidad del dataset y falta de logs para depuración
  • Pensar que “con solo correrlo en local es suficiente” es riesgoso; hace falta un enfoque sistemático

Desarrollo en línea vs ejecución offline

  • El desarrollo (fine-tuning, generación de datos) se realiza en la nube, mientras que la ejecución funciona en local
  • Separar claramente este proceso y gestionarlo de forma estructurada es la esencia de MLOps

Generación del dataset (Dataset Generation Flow)

  • No se trata solo de recopilar prompts, sino de diseñar patrones estructurados de llamadas a funciones y una arquitectura de solicitudes conversacionales
  • Se genera un dataset de alta calidad que cubre distintas formulaciones, intenciones y casos de falla

Puntos clave

  • lock_screen() → incluye distintas expresiones en lenguaje natural como “bloquéame la pantalla”
  • Un motor de validación automática verifica si la salida tiene la forma esperada

Fine-tuning (Instruction Tuning for Function Calling)

  • Ajuste fino de un modelo pequeño (método SFT) para lograr un mapeo preciso de comandos
  • Uso de herramientas prácticas como Unsloth, W&B y extracción en formato GGUF

Objetivo

  • Convertir LLaMA 3.1 8B en un modelo de 4 bits que pueda ejecutarse localmente
  • Buscar una versión liviana que incluso pueda apuntar a Raspberry Pi

Integración del modelo y ejecución real

  • Whisper convierte la entrada de voz en texto
  • El LLM ajustado interpreta el comando
  • Se conecta con un ejecutor local de funciones API (lock_screen(), get_battery_status(), etc.)

Resultado

  • Posibilidad de operar un asistente de voz en tiempo real
  • No requiere red, no hay filtración de datos personales y permite control total del usuario

Gestión de riesgos en la etapa offline

  • Hace falta probarlo en distintos dispositivos y sistemas operativos
  • Es indispensable construir un sistema de logging (con envío manual bajo modalidad opt-in)
  • Antes del despliegue formal, hay que detectar problemas temprano mediante stress tests y feedback de usuarios

Planes a futuro

  • En la próxima lección se hará una práctica de generación de datasets para llamadas a funciones
  • Se construirá de forma estructurada un dataset especializado para aprender el mapeo de comandos en lenguaje natural → llamadas API
  • Prohibido hacer scraping; se usarán únicamente simulaciones basadas en prompts y datos de validación automática

Conclusión

  • Los sistemas de IA locales son simples, pero su estabilidad y calidad exigen un nivel de gestión más alto
  • Como no dependen de logs en la nube ni de hotfixes, requieren mayor confiabilidad y sentido de responsabilidad
  • Para ello, hay que aplicar una mentalidad MLOps y un diseño estructurado desde el principio

> “Ha llegado la era de construir asistentes de IA reales centrados en la privacidad y con prioridad local”
> En la siguiente parte comenzará la práctica real de creación de datasets para mapear comandos y funciones.

2 comentarios

 
asheswook 2025-05-15

La 3.1 es difícil de usar para quienes no hablan inglés, y con la 3.3 o la 4 quizá también se podría usar coreano, pero si se va a ejecutar on-device, considerando que para idiomas distintos del inglés al menos habría que irse a 32b o más para que tenga sentido, parece que todavía está difícil...

 
GN⁺ 2025-05-14
Opiniones de Hacker News
  • Me gusta esta idea y me dan ganas de intentar hacerla yo mismo, pero mi experiencia usando localmente los modelos pequeños de Whisper fue peor de lo esperado; me pregunto si alguien ha logrado resultados lo bastante buenos para un caso de uso como este, aunque también puede que mi micrófono no fuera bueno
    • Definitivamente vale la pena revisar de nuevo el estado del micrófono; en nuestra empresa usamos Whisper para transcribir y traducir reuniones completas en tiempo real, y el desempeño es excelente
    • Me da curiosidad saber qué modelo usan; yo normalmente uso el modelo large en GPU, va rápido y realmente funciona muy bien, pero hay que tener en cuenta que solo puede reconocer un idioma a la vez; si no lo especificas, procede con detección automática; los modelos pequeños simplemente no rinden igual y muchas veces solo soportan inglés; para mí, large da el mejor rendimiento, pero para obtener una velocidad realmente utilizable sí hace falta hardware con GPU, incluso usándolo con faster-whisper o insanely-fast-whisper
  • Ojalá existiera como un producto o app que uno pudiera simplemente instalar y usar, me gustaría configurarlo y entrenarlo fácilmente desde una UI; aun así, gracias a esta guía siento que sí podría construir lo que quiero, así que de verdad lo agradezco
  • Muy buen material, quería dejar dicho mi agradecimiento; todavía no he seguido todos los pasos, pero me pregunto si este modelo realmente corre bien en iPhone; en mi casa, mi hijo de 9 años sí pudo correr el modelo Qwen 0.6B con ollama, pero los demás modelos eran tan lentos que la experiencia de uso no era realmente aceptable
    • Ah, ya entendí, hablabas de un teléfono de 9 años; por un momento pensé que un niño de primaria estaba desplegando modelos por su cuenta y me quedé impactado; a esa edad yo todavía andaba aprendiendo las tablas de multiplicar
    • Según el material de MLC, incluso modelos de hasta 8B pueden ejecutarse en iOS, pero 1-3B parece más realista; aquí hay una referencia: https://llm.mlc.ai/docs/deploy/ios.html#bring-your-own-model
  • ¿Por qué tendría que ser un texto escrito por un LLM? Eso me genera dudas
    • Este estilo de resumen, o sea, el formato tan marcado y que (!) todos los párrafos salgan como listas con viñetas, me resulta muy confuso; sobre todo en textos largos, siento que la pantalla se ve recargada y plana a la vez, y eso perjudica la legibilidad
  • Hace poco (aunque quizá me perdí el anuncio) descubrí que Siri sí funciona localmente al menos para algunos comandos; por ejemplo, puedes poner el Apple Watch en modo avión y luego pedir un temporizador o un recordatorio
    • Siri ha tenido capacidades limitadas sin conexión por lo menos desde iOS 15, pero la mayoría de los usuarios no lo ha notado mucho, porque la mayor parte de los comandos de Siri sí requiere conexión de red
  • Me pregunto por qué Apple no analizó los datos para preparar handlers cableados para, digamos, los ~1000 casos de uso más comunes
    • En realidad ya lo están haciendo, pero van demasiado lento; sí agregan funciones relacionadas con brillo y energía, pero no explican bien qué se puede usar sin conexión; el usuario tiene que activar el modo avión e ir probando cosas por su cuenta para averiguarlo, y la experiencia de usuario es muy mala
  • Buen proyecto y buen resumen
  • Me pregunto si Apple permite reemplazar Siri por otro asistente; en Android, durante mucho tiempo los asistentes que no eran de Google tuvieron restricciones para escuchar en segundo plano o usar teclas físicas, gestos y atajos; no estoy seguro de si Google Assistant sigue teniendo ese trato preferencial, pero si así fuera tampoco me sorprendería
    • Parte del problema está en el coprocesador separado (AOP) que maneja la wake word “hey siri”; el modelo también está compilado dentro del firmware; técnicamente no es imposible, pero no basta con simplemente dejar que una app de Google corra en segundo plano, porque el gesto ocurre mientras el AP está dormido; quizá se podría lanzar una app de asistente con algo como el botón de acción lateral, pero no sería una experiencia satisfactoria (por ejemplo, la app podría no estar abierta); más detalles en este enlace: https://machinelearning.apple.com/research/hey-siri
    • Con el botón de acción agregado recientemente, es bastante fácil abrir una app de asistente alternativa mediante un atajo personalizado
    • Perplexity también funciona de esta manera
  • Llevo año y medio usando chatGPT fielmente en iPhone, y la torpeza de Siri me frustra tanto que cada vez la detesto más; me pregunto cuándo OpenAI, con ayuda de Microsoft, sacará un GPT phone para competir con el iPhone; ya me cansé del iPhone aburrido; necesito un GPT phone donde desde la pantalla de bloqueo GPT haga todo por mí; estoy contando los días para que salga, y tengo la esperanza de que lo estén desarrollando en secreto