Gemma 26B afinada en un MacBook de 24 GB: el asistente sin conexión acierta 703 de 766
Un desarrollador lleva medio año construyendo un asistente de voz para macOS que ejecuta acciones en el ordenador: abre carpetas, busca archivos y lee el correo. El modelo de lenguaje funciona en local, sin nube. Afinó Gemma 4 26B A4B con QLoRA directamente en un MacBook con 24 GB de memoria unificada. La clave fue trasladar las reglas del prompt de sistema, de 5 000 tokens, a los pesos de un adaptador LoRA. La versión v4b, con un prompt corto, resolvió 703 de 766 conversaciones de prueba con una mediana de 1,64 s. La Gemma base con prompt largo respondía en 1,94 s y acertaba el 89 % de los pasos. • Entrenamiento: ~3 horas por pasada; ejemplos de no más de ~1400 tokens, porque si no Metal se queda sin memoria • La pasada de reparación con 416 ejemplos problemáticos duró 70 minutos y dio el mejor resultado • La búsqueda en documentos usa Spotlight, tarda 60–700 ms y no requiere una base de datos vectorial propia
Procesado por IA desde Habr AI; editado por Hamidun News
Medio año de trabajo, un MacBook con 24 GB de memoria unificada y una condición estricta: nada de nube ni suscripciones. El autor del proyecto ha construido un asistente de voz para macOS que no charla, sino que actúa: abre carpetas, busca archivos, reproduce películas y lee el correo. Para ello afinó Gemma 4 26B A4B (un MoE con ~4 000 millones de parámetros activos) con QLoRA a través de mlx-lm. Las reglas que antes ocupaban unos 5 000 tokens de prompt de sistema pasaron a los pesos de un pequeño adaptador LoRA. En un banco de pruebas congelado de 766 conversaciones, la versión v4b con prompt corto resolvió 703, con una mediana de respuesta de 1,64 segundos.
El cerebro elige una herramienta, no escribe texto
La aplicación está escrita en Electron y varios procesos independientes trabajan alrededor de la ventana. El oído lo gestiona Python, con un detector de voz y Whisper compilado para MLX. El cerebro es llama-server (llama.cpp) con Gemma cuantizada a 4 bits y un LoRA en formato GGUF. La voz la sintetiza Qwen-TTS a partir de una grabación de referencia. Un ayudante en Swift se encarga de los componentes del sistema de macOS (sonido, micrófono, eco). Si un proceso se cae, un proceso vigilante lo reinicia, y la voz vuelve a estar operativa en unos 7 segundos.
Para cada intervención, el modelo devuelve un único paso en un JSON de formato fijo, con los campos think, tool, args, say y next. La ventana ejecuta la herramienta y, si hace falta, devuelve el resultado al modelo. Cualquier cambio o borrado de archivos requiere confirmación por voz. ChatGPT, Claude y Gemini devuelven el mismo formato si el usuario los conecta: las herramientas se les pasan mediante llamadas nativas a funciones. En ese caso, el llama-server local se apaga y libera unos 13 GB.
Un banco de pruebas de 766 conversaciones y una pasada de reparación
Antes de entrenar el modelo, el autor montó un banco de pruebas congelado: frases con pasos de referencia con las que nunca entrena. Incluye órdenes sobre carpetas, búsqueda de películas, correo, preguntas sobre documentos, cadenas de intervenciones, rechazos y errores de reconocimiento de voz. Dos lecciones salieron caras. La evaluación por intervenciones sueltas descartaba más de 400 cadenas y pintaba un panorama demasiado optimista, así que hay que comparar conversaciones completas. Los ejemplos recopilados a partir de los errores del banco inflan la puntuación en ese mismo banco, de modo que para una verificación honesta hace falta un conjunto nuevo.
Evolución de las versiones (el banco creció de 533 a 766 conversaciones, por lo que la comparación directa solo es válida dentro del mismo tamaño):
- Sin adaptador, prompt completo: 475 de 533 (89 %), mediana de 1,94 s
- v3, prompt completo: 487 de 533 (91 %), mediana de 1,63 s
- v4 con secciones nuevas (documentos, planos, inglés, cadenas): 684 de 766
- v4b, prompt corto: 703 de 766, mediana de 1,64 s
En v4 el modelo mejoró en las secciones nuevas, pero empeoró en las antiguas. «Pon la película» empezó a lanzar música, «busca la película» perdió el tipo de búsqueda y «mi carpeta» se confundía con la carpeta de notas. Lo que ayudó fue una pasada de reparación: 416 ejemplos de estos casos más una muestra aleatoria de datos antiguos y nuevos, unos 1100 en total. El reentrenamiento duró otros ~1000 pasos con un learning rate de 1,5e-5 en lugar de 3e-5 y sin validación. Llevó unos 70 minutos y dio el mejor resultado de todo el proyecto. En cambio, entrenar desde cero hacía que el modelo olvidara lo anterior.
Qué fallaba en el portátil
El límite de Metal dicta la longitud de los ejemplos: no más de ~1400 tokens, porque si no salta el error Insufficient Memory. Entrenar con el prompt completo en un Mac es físicamente imposible, y es un argumento más para trasladar las reglas a los pesos. El script descarta de antemano los ejemplos que no caben. La velocidad es de 0,25–0,4 pasos por segundo y cada pasada dura unas tres horas, así que el modelo se entrena por la noche.
Otros tropiezos:
- El Mac se dormía. Tras un entrenamiento, la evaluación en el banco tardó seis horas. Ahora toda la cadena (entrenamiento, conversión a GGUF, banco de pruebas) se lanza bajo un único caffeinate -i -s.
- Fallos de memoria. El navegador y la indexación de Spotlight disparan el swap hasta 6–7 GB, y los fallos coincidían con la validación cada 200–400 pasos. La solución: guardar puntos de control, continuar automáticamente con --resume-adapter-file y desactivar la validación en las etapas finales.
- Editar un script de bash al vuelo tumbó la cadena con un syntax error, porque bash lee el archivo a medida que lo ejecuta.
- Para Gemma 4 hicieron falta dos pequeños parches en mlx-lm, y para convertir el adaptador a GGUF se necesita un entorno aparte con torch.
Alrededor del modelo también hay bastante ingeniería. El volumen de la película no baja al oír el nombre del asistente, sino al detectar el inicio del habla: si la voz supera en 6 dB el «suelo flotante» y no es eco, el sonido baja, y vuelve a subir a los 2,5 segundos si no se ha dicho el nombre. Un defecto de síntesis, por el que «сэр» se convierte en «сёр» en aproximadamente una de cada tres tomas, se detecta por vía acústica.
La vocal se mide con un análisis LPC de orden 12 y se compara el segundo formante (en «э» ronda los 2000–2300 Hz; en «ё», 750–900 Hz). La comprobación tarda unos 3 ms, el detector encuentra 39 fallos de 46 y la frase se vuelve a sintetizar con otra toma. Las preguntas sobre documentos las resuelve Spotlight: la búsqueda tarda 60–700 ms, devuelve los dos o tres mejores archivos, toma ventanas de ~600 caracteres y la respuesta se basa solo en ellas.
Los planos DWG los procesa LibreDWG en WebAssembly en un hilo aparte; el resultado se convierte en SVG y se guarda en caché.
Receta para tu propio proyecto
Si estás construyendo un agente local, empieza por el banco de pruebas, no por el entrenamiento. Congela un conjunto de conversaciones y compara las versiones solo con él; para la evaluación final, reserva una muestra nueva que no hayan visto ni el modelo ni tú.
Las reglas que arrastran miles de tokens de prompt en cada petición conviene trasladarlas a un LoRA: la precisión y la latencia mejoran a la vez. Añade las nuevas habilidades sobre el adaptador anterior, con una mezcla de datos antiguos y nuevos y un learning rate más bajo. 24 GB bastan para un modelo MoE de 26B si se recorta la longitud de los ejemplos, se guardan puntos de control y no se deja que la máquina se duerma. El siguiente paso del autor es una memoria personal y el autoaprendizaje a partir de las frases que el asistente no ha entendido.
- 28 oct 202612 herramientas de pentesting contra Juice Shop: el mejor agente de IA encontró 5 fallos de 116
- 28 oct 2026OpenAI lanza GPT-6.1 Terra: la mitad de precio y casi al nivel de los modelos superiores
- 28 oct 2026OpenAI lanza GPT-6.1 Terra: token a $1 y el triple de rápido que Astra
- 28 oct 2026Anthropic presenta el S-1: $11,6 mil millones de ingresos en un trimestre y compromisos por $780 mil millones
Preguntas frecuentes sobre la noticia
¿Qué se sabe sobre El cerebro elige una herramienta, no escribe texto?
La aplicación está escrita en Electron y varios procesos independientes trabajan alrededor de la ventana. El oído lo gestiona Python, con un detector de voz y Whisper compilado para MLX. El cerebro es llama-server (llama.cpp) con Gemma cuantizada a 4 bits y un LoRA en formato GGUF. La voz la sintetiza Qwen-TTS a partir de una grabación de referencia. Un ayudante en Swift se encarga de los componentes del sistema de macOS (sonido, micrófono, eco). Si un proceso se cae, un proceso vigilante lo reinicia, y la voz vuelve a estar operativa en unos 7 segundos. Para cada intervenc
¿Qué se sabe sobre Un banco de pruebas de 766 conversaciones y una pasada de reparación?
Antes de entrenar el modelo, el autor montó un banco de pruebas congelado: frases con pasos de referencia con las que nunca entrena. Incluye órdenes sobre carpetas, búsqueda de películas, correo, preguntas sobre documentos, cadenas de intervenciones, rechazos y errores de reconocimiento de voz. Dos lecciones salieron caras. La evaluación por intervenciones sueltas descartaba más de 400 cadenas y pintaba un panorama demasiado optimista, así que hay que comparar conversaciones completas. Los ejemplos recopilados a partir de los errores del banco inflan la puntuación en ese mi
¿Qué se sabe sobre Qué fallaba en el portátil?
El límite de Metal dicta la longitud de los ejemplos: no más de ~1400 tokens, porque si no salta el error Insufficient Memory. Entrenar con el prompt completo en un Mac es físicamente imposible, y es un argumento más para trasladar las reglas a los pesos. El script descarta de antemano los ejemplos que no caben. La velocidad es de 0,25–0,4 pasos por segundo y cada pasada dura unas tres horas, así que el modelo se entrena por la noche. Otros tropiezos: El Mac se dormía. Tras un entrenamiento, la evaluación en el banco tardó seis horas. Ahora toda la cadena (entrenamiento, co
Build & Ship Production AI Agents Without Boilerplate Code
Start your free 72-hour trial at Hamidun Academy (academy.hamidun.com) — interactive lessons on Claude Code & Cursor, live Tech Radar, and production agent templates.
Lo esencial de la IA — una vez por semana
Siete historias que de verdad importaron, elegidas a mano. Sin ruido ni notas de prensa.
¡Listo! Revisa tu correo para la confirmación.