← Diario
Técnica·12 may 2026

Una imagen para cada ficha, y por qué se equivocaba

Una gran fuente de choucroute garnie sobre una mesa de madera clara, un teléfono con la pantalla borrosa al lado, luz cálida de final de tarde en una cocina

Hasta el 12 de mayo, una ficha de receta se abría con un dibujo genérico elegido según su género. Esa tarde recibió una foto de verdad, generada unos segundos después de crear la ficha y empujada a la ficha abierta sin tener que reabrirla. Para llegar ahí hubo que enseñar al generador a mostrar el plato entero, quitarle al modelo de lenguaje el derecho a lanzar la imagen por su cuenta, y prohibirle pintar personas por todas partes.

Un dibujo que decía «receta», no «chucrut»

Desde el día anterior, cada ficha declara su género de ilustración en sus campos: plato caliente, plato frío, bebida, repostería, viaje, idea, libro, lugar. En la parte alta de la ficha se dibujaba una composición vectorial a partir de ese género: unas formas, un degradado, una sugerencia. Decía «esto es una receta». No decía cuál.

La mañana se había dedicado a hacer la ficha corregible con el dedo. Por la tarde quisimos que la ficha se pareciera a lo que contiene. Una receta de choucroute con una foto de choucroute. Una idea de regalo con el objeto. Una nota de viaje con la ciudad.

Lo que sigue es el relato de esa tarde, y de las cuatro maneras en que la imagen se equivocó antes de acertar.

Una foto, dos caminos para obtenerla

La primera versión se apoyaba en dos disparadores.

El primero se confió al modelo de lenguaje. Después de crear una ficha memo visual, disponía de una herramienta más: pedir una imagen, pasando el identificador de la ficha y un tema, una frase corta que describe lo que debe mostrar la foto. Su guía le decía cuándo usarla, recetas, viajes, regalos, notas de lectura, eventos en un lugar con nombre, y cuándo abstenerse: recordatorios, tareas, contactos, hechos, actas de reunión. Un acta no tiene foto.

El segundo se le dio al usuario. En el pequeño menú de arriba a la derecha de la ficha, junto a «Modificar» y «Eliminar», una entrada nueva: «Generar una imagen». Si la primera foto fallaba, se podía pedir otra sin volver a pasar por la conversación. Durante los pocos segundos de fabricación aparecía una línea discreta, «Foto en curso de generación…», en azul y no en rojo, porque no es un error.

Detrás de los dos caminos, la misma cadena en el servidor. El tema se envuelve en una consigna de estilo fotográfico, se envía a un generador de imágenes, y la imagen vuelve en forma de bytes. Esos bytes se depositan en un espacio de almacenamiento con el nombre de la ficha, sobrescribiendo la imagen anterior si la hay, con un número de versión en la dirección para que el teléfono no saque la vieja de su caché. Por último, la dirección se escribe en los metadatos de la ficha, junto a la plantilla y la lista, sin tocar el resto. De paso, el servidor comprueba que la ficha pertenece de verdad a quien la pide, con cuenta conectada o en anónimo.

Si falta la clave del servicio, el servidor lo dice al arrancar y rechaza la herramienta limpiamente en vez de caerse en medio de una conversación. Si el generador falla, la ficha conserva su dibujo. La imagen es un complemento, nunca una condición.

Chucrut sin col

Primera prueba real: una choucroute para seis personas. La foto mostraba salchichas, zanahorias y patatas, bien iluminadas. Ni una brizna de col.

La causa estaba en el tema transmitido. El modelo de lenguaje había enviado algo como «Choucroute, 6 personas, 2 h». El generador de imágenes no conoce la choucroute como la conoce un lector alsaciano: para él es una palabra entre otras en una frase corta, y se aferra a lo que sabe dibujar. Siguieron dos correcciones.

La consigna de estilo, en el servidor, recibió una frase con peso: la imagen debe representar exactamente este tema, con cada elemento nombrado visible. Sin ella, el generador toma el tema como un ambiente. Con ella, como un encargo.

Y la descripción de la herramienta, del lado del modelo de lenguaje, se reescribió con ejemplos de temas fallidos y de temas logrados. «Choucroute» da una col. «Choucroute garnie en una gran fuente de gres, col blanca fermentada en montículo en el centro, salchichas ahumadas, codillo de cerdo y panceta en lonchas, patatas al vapor, mesa de madera clara, luz cálida» da una choucroute. La regla cabe en una pregunta: si se quita el nombre del plato de la frase, ¿sigue describiendo la misma imagen? Si es que sí, es demasiado vaga. Hace falta el plato, de tres a cinco elementos visibles que lo distingan, y el contexto de servicio, fuente, plato o tabla. De veinte a cuarenta palabras, sin verbos, sin citas.

La línea en cursiva que repetía la pregunta

La misma prueba reveló un defecto sin relación con la imagen, corregido de inmediato porque vivía en el mismo sitio.

Bajo el título de la ficha, una línea en cursiva repetía la frase original: «Me gustaría hacer una choucroute este fin de semana, ¿puedes…». Leída en la ficha una semana después, esa frase es ruido. Uno sabe que la pidió, no quiere releer cómo.

Esa línea cambió de naturaleza. Se convirtió en una entradilla editorial, una o dos frases que presentan la ficha como la introducción de un artículo de revista: «Un plato alsaciano generoso para un domingo de invierno: col fermentada, carnes ahumadas y patatas al vapor.» El campo conserva su nombre, se muestra en el mismo lugar, solo el sentido de su contenido ha cambiado. En el editor de la ficha, el texto de ayuda pasó de «frase original» a «resumen editorial».

Esa entradilla tuvo un efecto secundario feliz. El botón «Generar una imagen» de la ficha no tiene un modelo de lenguaje a mano para redactar un tema. Ensambla lo que la ficha ya contiene, el título y las etiquetas. Con la entradilla añadida, por fin dispone de elementos visuales, col, carnes ahumadas, patatas, donde la frase original no llevaba ninguno.

El identificador que aún no existía

El segundo defecto no se veía en la foto. Estaba en el registro.

El modelo de lenguaje, al que se le pedía llamar a la generación «inmediatamente después» de crear la ficha, se tomó la consigna al pie de la letra: llamaba a las dos herramientas a la vez, en el mismo turno. Pero el identificador de la ficha solo existe una vez terminada la creación. En lugar de esperar, el modelo se inventaba uno, verosímil, del estilo «ficha-tartiflette-receta». La generación salía hacia una ficha fantasma, fallaba, y la ficha real conservaba su dibujo.

Se puede reformular la consigna diez veces. También se le puede quitar al modelo una responsabilidad para la que no está hecho: el orden de las operaciones. Eso hicimos.

Desde entonces decide el servidor. Cuando una creación desemboca en una ficha memo cuyo género de ilustración es visual, plato caliente, plato frío, bebida, repostería, viaje, idea, libro, lugar, lanza él mismo la generación, con el identificador real, puesto que acaba de escribirlo. No espera el resultado: la respuesta vuelve al modelo enseguida, y la imagen se fabrica en segundo plano. El tema se construye a partir del título, la entradilla editorial y las etiquetas de la ficha, las mismas señales que el botón manual, para que los dos caminos den fotos de la misma naturaleza. Las fichas reforzadas, aquellas en las que una petición ha encontrado un recuerdo existente en vez de crear uno, no disparan nada: ya tienen su imagen, o nunca la quisieron.

Quedaba hacer llegar la imagen a la ficha que el usuario está mirando, sin pedirle que la cierre y la vuelva a abrir. Cuando la generación termina bien, el servidor envía un mensaje en tiempo real a todos los dispositivos del propietario: tal identificador, tal dirección de imagen. En el teléfono, ese mensaje acaba en un tablón de anuncios diminuto, indexado por identificador de ficha. Una ficha abierta se suscribe allí a su propio identificador, y sustituye su dibujo por la foto en cuanto pasa el anuncio, unos tres segundos después de la creación. El tablón retiene también la última dirección anunciada, para la ficha que se abriera después del mensaje y no antes: la encuentra al llegar.

La herramienta de generación quedó en manos del modelo de lenguaje para un solo uso: una petición explícita del usuario, «rehaz la foto de la tartiflette», «sustituye la imagen por el plato servido». Nunca encadenada con una creación.

Dos fotos para una sola ficha

El tercer defecto llegó con dos quejas que no tenían nada en común.

La primera: en la lista de fichas, la miniatura seguía mostrando el dibujo aunque la ficha tuviera su foto. La lista construía la miniatura sin transmitirle la dirección de la imagen. Una línea para pasársela, y la ficha muestra la misma imagen fuera y dentro.

La segunda era más interesante: algunas fichas recibían dos fotos seguidas, una mediocre y luego una mejor. Pese a la consigna reescrita, el modelo seguía a veces llamando a la generación después de la creación, compitiendo con el disparo automático del servidor que ya hacía el mismo trabajo. Dos generaciones para una ficha, y la última en llegar ganaba.

Dejamos de negociar. La herramienta se retiró de la lista que ve el modelo. La función sigue existiendo en el servidor, para la ruta que llama el botón de la ficha, pero el modelo ya no puede dispararla. Y para el caso en que la ruta se llamara dos veces seguidas, desde dos teléfonos por ejemplo, el servidor mantiene una tabla de generaciones en curso, por ficha: una segunda petición para la misma ficha se engancha a la promesa ya en marcha en vez de empezar de cero. Cinturón y tirantes, pero el cinturón era la corrección de verdad.

La noche: dos fichas que parpadean, y gente por todas partes

Al final del día, una última prueba hizo aflorar dos defectos de golpe, otra vez sin relación entre sí.

«Recuérdame mañana a las 8 ir a la tienda de bricolaje a comprar cemento y correas.» En pantalla apareció una ficha, vacía, una cita desnuda, y luego fue sustituida por una segunda, con la lista. Un parpadeo desagradable, y un duplicado en la lista de fichas.

El registro mostraba la secuencia: una creación de tipo evento, luego una llamada para programar el recordatorio, luego una segunda creación de tipo tarea con la lista. El modelo había troceado una petición en dos recuerdos. Cada creación abre automáticamente su ficha, y el antirrebote que debía absorber esa clase de ráfaga estaba en trescientos milisegundos: suficiente para dos creaciones pegadas, no para dos creaciones separadas por otra llamada.

Dos correcciones. En la guía del modelo, un bloque al frente de la parte de memos: una petición, una neurona principal. Una cita con lista es una tarea con fecha que lleva su lista, no un evento más una tarea. Si se duda entre los dos, es una tarea en cuanto hay cosas que marcar, un evento solo cuando no hay nada que marcar. Y el antirrebote pasó a dos segundos: la ficha se abre dos segundos después de la última creación, de modo que, si el modelo vuelve a trocear, solo la última ficha llega a la pantalla. En una petición sencilla esos dos segundos pasan desapercibidos, porque la respuesta hablada se prepara al mismo tiempo.

El segundo defecto afectaba a las imágenes de esas listas de la compra: mostraban mujeres. Una mujer en un pasillo de ferretería, una mujer delante de sacos de cemento. Nadie había pedido un personaje.

La causa estaba en las primeras palabras de la consigna de estilo: «fotografía editorial, calidad de revista». Para un generador criado con revistas, esas palabras significan moda, y moda significa modelos. El tema llegaba después, demasiado tarde para cambiar la escena.

La consigna se volvió a anclar: fotografía de bodegón y de escena de objetos, con cláusulas explícitas, sin personas, sin rostros, sin siluetas, sin retratos. El generador se toma esas prohibiciones al pie de la letra, exactamente como se tomó «revista» al pie de la letra. Los pasillos de ferretería volvieron a ser pasillos.

Lo que la tarde enseñó

Cuatro veces se equivocó la imagen, y cuatro veces por una razón distinta. Un tema demasiado escaso. Un identificador inventado. Una carrera entre dos disparadores. Dos palabras de estilo que pesaban más que el tema.

Quedaron dos lecciones. La primera: un generador de imágenes no interpreta, ejecuta. No sabe lo que debe contener una choucroute, no sabe que una lista de la compra no necesita figurantes. Todo lo que no se le dice, lo inventa, y todo lo que se le dice primero pesa más que el resto.

La segunda vale más allá de las imágenes. Cuando una operación depende del orden de las cosas, el identificador después de la creación, una sola generación por ficha, no le corresponde al modelo de lenguaje sostener ese orden. Le dejamos lo que hace bien, entender lo que quiere el usuario, y el servidor se queda con lo que tiene que ser exacto. La memoria sigue siendo la fuente, la conversación el medio, y la foto, desde ahora, se parece al plato.

Leer a continuación
XNeuronal ya está disponible en AndroidUna memoria que deduce está por llegar