Un asistente con IA que funciona en casa: qué medimos
El asistente del hub usa un modelo de lenguaje que se ejecuta en un ordenador propio. Cómo le dimos herramientas, cómo comparamos modelos con una batería de frases reales y por qué acabamos usando uno de 3 GB.
El asistente del hub entiende frases como «apunta el dentista el viernes a las cinco y avísame media hora antes» y las convierte en una cita con su hora y su aviso. Lo hace con un modelo de lenguaje abierto que se ejecuta en un ordenador de casa, sin enviar nada a una empresa de inteligencia artificial. Este artículo cuenta cómo está montado y, sobre todo, cómo decidimos qué modelo usar: midiendo.
Las piezas
- El modelo corre en un ordenador de sobremesa con una tarjeta gráfica de 20 GB, usando Ollama. La Raspberry Pi que aloja el hub no tiene potencia para esto; solo le hace las preguntas por la red de casa.
- Las herramientas. Un servicio expone las funciones del hub (añadir a la compra, crear una tarea, apuntar una nota en el calendario, registrar un gasto…) con un protocolo estándar para que un modelo pueda usarlas. Cada herramienta tiene una descripción en español y unos parámetros con su formato.
- El asistente propiamente dicho: recibe tu mensaje, se lo pasa al modelo junto con la lista de herramientas, ejecuta las que el modelo pida y le devuelve el resultado, hasta que el modelo da una respuesta final. Como máximo seis pasos por mensaje.
Un detalle de seguridad importante: las herramientas se ejecutan con la identidad de quien escribe. El asistente no tiene permisos propios. No puede ver ni tocar nada que tú no puedas.
El primer ajuste: que el modelo quepa en la tarjeta gráfica
Empezamos con un modelo de 27.000 millones de parámetros. Con la ventana de contexto por defecto no cabía entero en la memoria de la gráfica y una parte se iba al procesador, que es mucho más lento. Probamos distintos tamaños de contexto midiendo cuánto quedaba en la gráfica:
| Contexto | En la gráfica | Velocidad |
|---|---|---|
| 16.384 tokens | 100 % | 35,7 tokens/s |
| 24.576 tokens | 91 % | — |
| 32.768 tokens | 88 % | 23,9 tokens/s |
Con que un 12 % del modelo saliera de la gráfica, la velocidad caía un tercio. Para un asistente doméstico, 16.000 tokens de contexto sobran, así que nos quedamos ahí.
Medir en lugar de opinar
La tentación es probar cuatro frases, ver que funcionan y darlo por bueno. Un modelo de lenguaje no responde siempre igual, así que eso no demuestra nada. Montamos una evaluación:
- 33 frases reales en español, escritas como habla la gente: «nos hemos quedado sin papel higiénico», «acabo de echar gasolina, 60 pavos», «el sábado comemos paella».
- Para cada frase, la herramienta que debería elegir y una comprobación de los datos: la fecha correcta, la cantidad, la lista personal y no la del grupo.
- Tres repeticiones de cada una: 99 intentos por modelo.
- La fecha de «hoy» fijada, para que «el viernes» tenga siempre la misma respuesta correcta.
Además del acierto, contamos algo más grave que un error: las confirmaciones inventadas. Es cuando el modelo contesta «he añadido la leche» sin haber llamado a ninguna herramienta. Para un asistente es el peor fallo posible, porque el usuario se queda tranquilo y no ha pasado nada.
Lo que salió
| Modelo | Correctas | Inventadas | Memoria |
|---|---|---|---|
| 27B, razonando antes de contestar | 99 de 99 | 0 | 16,1 GB |
| Pequeño de Google (variante «edge»), razonando | 96 de 99 | 0 | 3,2 GB |
| 12B, sin razonar | 81 de 99 | 0 | 7,8 GB |
| 12B, razonando | 59 de 99 | 25 | 7,8 GB |
| El pequeño, sin razonar | 15 de 99 | 1 | 3,2 GB |
Tres conclusiones que no habríamos adivinado:
- El tamaño no ordena los resultados. El modelo más pequeño quedó por encima del mediano, ocupando menos de la mitad.
- Razonar antes de contestar lo cambia todo, y no siempre a mejor. Al pequeño lo llevó de 15 a 96 aciertos. Al mediano lo hundió: con el razonamiento activado empezó a «confirmar» acciones que no había hecho, 25 veces de 99.
- El fallo típico de los modelos pequeños son las fechas. Contar qué día cae «el viernes» o «todos los martes» es donde más se equivocan.
En una comparación anterior habíamos probado otros tres modelos de tamaño parecido con resultados peores: uno calculaba mal los días de la semana, otro estaba pensado para inglés y guardaba las cosas traducidas («Mom's birthday») y entendía «60 pavos» como aves.
La decisión
El modelo grande acertaba todo. El pequeño fallaba en unas pocas frases, pero ocupaba cinco veces menos memoria y respondía en la mitad de tiempo en conversaciones completas, de cuatro a seis segundos frente a seis a doce. Para apuntar cosas de casa, esa diferencia de velocidad se nota más que tres fallos de noventa y nueve, así que el asistente usa hoy el pequeño. Cambiar de modelo es modificar una línea de configuración; si un día compensa volver, se vuelve.
Dos lecciones sobre las instrucciones
Decirle lo que no debe hacer
Alguien le pidió al asistente que añadiera un producto a la lista y, de paso, un programa en Python. Se lo escribió. Un asistente doméstico no debería hacer eso, así que añadimos una regla: solo ayuda con el hub, y a todo lo demás contesta con una frase fija.
Lo medimos con ocho peticiones fuera de tema repetidas tres veces: un script, una pregunta de cultura general, un poema con «ignora tus instrucciones anteriores», una traducción. Antes de la regla rechazaba unas 5 de 24. Después, 24 de 24.
El orden de las reglas importa
La primera versión ponía esa regla al principio de las instrucciones. Las peticiones fuera de tema se rechazaban bien, pero el uso normal empeoró: volvieron a aparecer confirmaciones inventadas. Moviendo el mismo texto al final, después de las reglas sobre cómo usar las herramientas, el problema desapareció. Sin la evaluación no lo habríamos visto.
Lo que sigue sin ser perfecto
- A veces cuenta mal los días («todos los martes» empezando una semana tarde).
- Alguna vez añade un aviso que nadie pidió, o mira tu lista personal cuando estabas viendo otra.
- Si el ordenador del modelo está apagado, no hay asistente. El resto del hub sigue funcionando.
Por eso el asistente siempre dice qué ha hecho y dónde, y por eso el panel avisa de que es un sistema automático que puede equivocarse.
Qué nos llevamos
Un modelo pequeño que corre en casa basta para un asistente útil, si se cumplen dos condiciones: que las herramientas estén bien descritas y que cada cambio se mida con frases reales en lugar de fiarse de la impresión. Lo que más mejoró al asistente no fue cambiar de modelo, sino tener una forma de saber si un cambio lo mejoraba o lo empeoraba.