Tuvimos algunas preguntas internas sobre la gestión de imágenes en contextos de IA, por lo que quería abordar algunas de las consideraciones en un problema público.
El problema
Los LLM actuales admiten múltiples modalidades. Todos los principales proveedores ahora admiten imágenes como entrada, algunos proveedores (notablemente Google) admiten imágenes como salida.
Esto deja a Discourse AI con un pequeño problema: ¿cómo presentamos las “imágenes” a los LLM?
Específicamente, si tenemos esta publicación de ejemplo:
Hola, aquí hay una foto mía:

Y aquí hay otra

El fin
¿Cómo presentamos esto al LLM?
Opción 1: Markdown conservado, imágenes añadidas al final
Enfoque: Mantener todo el texto junto, añadir las imágenes al final.
[
"Hola, aquí hay una foto mía: \n\n\n\nY aquí hay otra\n\n\n\nEl fin",
image1,
image2
]
Opción 2: Markdown conservado, imágenes incrustadas en línea
Enfoque: Intercalar texto e imágenes para preservar el contexto y el orden.
[
"Hola, aquí hay una foto mía: \n\n",
image1,
"Y aquí hay otra\n\n",
image2,
"El fin"
]
Opción 3: Markdown eliminado, imágenes añadidas al final
Enfoque: Eliminar por completo la sintaxis de markdown de las imágenes, añadir las imágenes reales al final.
[
"Hola, aquí hay una foto mía: \n\nY aquí hay otra\n\nEl fin",
image1,
image2
]
Opción 4: Descripciones conservadas, Markdown simplificado
Enfoque: Eliminar el formato específico de Discourse pero conservar las descripciones de las imágenes para el contexto.
[
"Hola, aquí hay una foto mía: \n\nY aquí hay otra\nSam standing next to a window\n\nEl fin",
image1,
image2
]
Opción 5: Descripciones en línea, imágenes incrustadas
Enfoque: Reemplazar el markdown con descripciones en línea, luego incrustar las imágenes correspondientes.
[
"Hola, aquí hay una foto mía:",
image1,
"Y aquí hay otra\nSam standing next to a window",
image2,
"El fin"
]
En este momento, nuestra implementación es (1), parte de la respuesta de por qué los modelos antiguos “legacy” no nos permitían posicionar las imágenes, la otra es que a menudo la gente usa Discourse para reformatear una publicación, si eliminamos los marcadores de carga, el LLM pensará que dijimos algo más y no podrá reformatear una publicación con imágenes.
Además, las recomendaciones de los proveedores de LLM como Anthropic son colocar siempre las imágenes al final. Mantiene las cosas más simples para que el LLM las interprete.
Sin embargo, este enfoque es muy problemático para un LLM como Nano Banana: Image editing in Google Gemini gets a major upgrade.
Cuando intenté esto, el LLM comenzó a alucinar marcadores de carga en lugar de renderizar imágenes.
En retrospectiva, tiene sentido.
Si le decimos a un LLM que acaba de decir: upload://xd5Pv36uPIVKBqya8N5BzZGsJrN.png, no se sorprenda si vuelve a decir algo extraño.
Estoy indeciso sobre cambiarnos a (2) y parece que (3) es la única forma sensata para “repetir lo que el LLM acaba de decir, para evitar alucinaciones”… Así que nuestra solución a este problema complicado es algo mixta.
Mientras realizaba este trabajo, exploré si podía crear una solución aún mejor donde la salida y la entrada se traten de la misma manera, pero no creo que sea práctico. (También intenté conservar las descripciones de carga cuando son lo suficientemente largas, etc.)
Por ahora, sin embargo:
(1) para las entradas al LLM
(3) para las salidas del LLM
A largo plazo:
(2) para las entradas vale la pena explorarlo
y eliminar pero conservar la posición contextual en las salidas también vale la pena explorarlo.
Es una pena que ningún proveedor de LLM permita ahora suministrar metadatos adicionales para una imagen junto con la imagen.