Descarga el WorkFlow de la lección:
Ya hemos logrado que nuestro flujo identifique cuándo recibimos un mensaje con una imagen. Ahora, vamos a darle a nuestro agente la capacidad de «ver» y entender el contenido de esa imagen.
Nuestro agente de IA principal solo puede procesar texto. Por lo tanto, nuestro objetivo es convertir cualquier imagen recibida en una descripción textual detallada que el agente pueda comprender. Para lograrlo, utilizaremos la API de OpenAI.
Objetivos de esta lección:
- Extraer los datos de la imagen en formato Base64.
- Convertir el texto Base64 de nuevo a un archivo de imagen que podamos utilizar dentro de N8n.
- Enviar la imagen al modelo de visión de OpenAI para su análisis.
- Formatear la descripción recibida para que nuestro agente la pueda usar correctamente.
Paso 1: Aislar el Dato Base64
Cuando nuestro flujo se ejecuta, el nodo Webhook recibe_whatsapp ahora recibe un campo adicional llamado base64. Este campo contiene un larguísimo texto que es, en esencia, la imagen codificada. Nuestro primer paso es aislar este dato.
- Desde la salida Imagen de tu nodo Switch clasificar_tipo_de_mensaje, añade un nodo Edit Fields.
- Crea un solo valor:
- Nombre: data
- Valor: Para encontrar el campo base64, ve a la salida del nodo Webhook inicial (recibe_whatsapp). Búscalo (suele estar casi al final) y arrástralo al campo de valor.
- Ejecuta el nodo. El resultado (Output) será un objeto simple que contiene únicamente el texto Base64.
- Renómbralo a extraer_base64_imagen.
Paso 2: Convertir de Base64 a Archivo Binario
N8n no puede enviar un simple texto a OpenAI y esperar que lo interprete como una imagen. Primero, debemos convertir ese texto de nuevo a un formato de archivo binario.
- Añade un nodo Convert to File con la opción Move Base64 String to File después del nodo Edit Fields extraer_base64_imagen.
- En la configuración, asegúrate de que el campo Base64 Input Field sea data, que es el nombre que le dimos a nuestra variable en el paso anterior.
- Ahora, debemos especificar qué tipo de archivo estamos creando. Haz clic en Add Option y selecciona Mime Type.
- En el campo Mime Type, escribe image/png. Esto le indica a N8n que debe construir un archivo de imagen en formato PNG.
- Ejecuta el nodo. En el Output, verás que ahora tienes un archivo binario. ¡Incluso puedes hacer clic en «View» para previsualizar la imagen que enviaste!
- Renómbralo a convertir_a_imagen.
Pro-Tip: También podrías usar image/jpeg si prefieres trabajar con archivos JPG. PNG suele ser una opción segura y de alta calidad.
Paso 3: Analizar la Imagen con OpenAI
Aquí es donde ocurre la magia. Vamos a enviar nuestro archivo de imagen a un modelo de OpenAI para que nos diga qué contiene.
¡Atención! Para este paso, necesitas tener tus credenciales de OpenAI correctamente configuradas en N8n. Si aún no lo has hecho, ve a Settings > Credentials y añade tu API Key de OpenAI.
- Añade un nodo OpenAI de Analyze Image después del nodo convertir_a_imagen.
- Configura el nodo:
- Model: Elige un modelo con capacidades de visión, como gpt-4-vision-preview o gpt-4o.
- Text Input: Aquí escribes el «prompt» o la instrucción para el modelo. Un buen prompt inicial podría ser:
Describe esta imagen enviada por WhatsApp. Sé lo más detallado posible y transcribe cualquier texto visible en ella. - Input Type: Selecciona Binary File, ya que es lo que nos devuelve el nodo anterior.
- Input Data Field Name: Mantenlo como data, que es el nombre por defecto.
- Simplify Output: Activa esta opción para recibir una respuesta más limpia.
- En las opciones dejamos Auto.
- Ejecuta el nodo. El proceso puede tardar unos segundos. En el Output, recibirás la descripción detallada que el modelo ha generado a partir de tu imagen.
- Renómbralo a analizar_imagen.
Paso 4: Formatear la Salida para el Agente
El último paso es empaquetar esta descripción de una manera que nuestro agente principal pueda entender contextualizadamente que se trata de una imagen. Usaremos un formato similar a XML para lograrlo.
- Añade un nodo Edit Fields al final de esta secuencia.
- Crea un solo valor:
- Nombre: input
- Mode: Cambia el modo a Expression
- Valor: Aquí vamos a «envolver» la respuesta de OpenAI. Pega el siguiente código en el campo de expresión:
- <image>
{{ $json.output[0].content[0].text }}
</image>
- <image>
- Renómbralo a imagen.
Próximos Pasos:
En la siguiente lección, replicaremos este mismo proceso, pero adaptado para los mensajes de audio. Aprenderemos a tomar una nota de voz, transcribirla a texto usando OpenAI, y formatearla de manera similar para nuestro agente. ¡Allá vamos!