Inputs multimedia
Resumen
Enviar PDF e imágenes a la API de Claude te permite construir aplicaciones que leen facturas, reportes, formularios o fotografías y devuelven respuestas útiles. Aquí aprendes qué estructura espera el modelo para entender contenido multimedia y cómo prepararlo desde Python. Ideal si desarrollas con la API de Anthropic y quieres procesar archivos, no solo texto.
La idea central es sencilla: Claude no se limita a responder texto plano. Puede analizar imágenes y documentos, y eso abre la puerta a casos reales como leer una factura de Rappi y extraer su contenido con una sola llamada al endpoint.
Qué necesitas para procesar archivos con Claude
Antes de escribir la lógica, tienes que preparar los imports y entender qué hace cada pieza. En el archivo main.py se agregan varias librerías en la parte superior [00:56].
Estas son las herramientas que entran en juego:
annotationpara manejar los types dentro del código.base64para la codificación y decodificación de archivos.mimetypespara identificar la estructura y el formato del archivo.osypathpara acceder directamente a archivos dentro de tu máquina.- La librería
anthropic, que provee Anthropic para consumir su API.
El modelo que se usa a lo largo del ejercicio es Claude Sonnet 4.6 [01:22]. Con esta base ya puedes armar la primera función.
¿Por qué se usa base64 al enviar archivos a Claude? Porque la API no recibe el archivo binario directo. Necesitas convertirlo a una cadena base64 para transportarlo dentro del mensaje, junto con su tipo de medio.
Cómo codificar el archivo antes de enviarlo
La primera función se encarga de la codificación de archivos [01:29]. Recibe el archivo, revisa el tipo, el nombre y la extensión, y luego lo codifica o decodifica según haga falta.
Ese paso de decodificar en UTF-8 sirve para extraer el texto de la información. La función retorna dos cosas: el tipo de medio y la data. Ambos valores son los que después alimentan el llamado a la API.
Dentro de la función main [02:10] hay validaciones que ya conoces del curso:
- Detecta la API key y, si no existe, marca el error.
- Intenta acceder al archivo
sample.pdfy, si no lo encuentra, pide agregarlo junto al script. - Identifica el tipo de media y la data desde la codificación de archivos.
- Distingue si el archivo es un documento PDF o lo asume como imagen.
Con esa distinción resuelta, el código sabe cómo tratar cada tipo de contenido antes de armar el mensaje.
Cómo estructurar el mensaje multimedia en la API
El cliente se define con Anthropic usando la API key de tus variables de entorno [03:08]. El endpoint sigue siendo el mismo de siempre: client.messages.create.
A ese llamado le pasas el modelo, un máximo de 500 tokens de salida, que alcanza para este ejercicio, y los mensajes con rol de usuario. Y aquí viene lo interesante: el usuario envía dos mensajes.
El primero es el contenido del archivo. Se define como una fuente donde:
- El tipo es
base64. - El media type se ajusta segun el archivo, sea PDF o imagen.
- La data es la que se extrae directamente de la codificacion.
El segundo mensaje es la instruccion en texto: describir qué hay en el archivo sin incluir nombres ni correos electrónicos, por temas de seguridad y privacidad [03:47]. La respuesta se recorre con response.content [04:00], imprimiendo cada bloque de tipo texto en la terminal.
¿Qué estructura espera Claude para leer un archivo? Un mensaje con dos partes: la fuente del archivo (tipo base64, su media type y la data codificada) y una instrucción en texto que le dice qué hacer con ese contenido.
Qué devuelve Claude al leer un PDF y una imagen
Al ejecutar el archivo desde la rama correcta de la clase [04:22], Claude describe el PDF de Rappi con precisión. Identifica que es un recibo de confirmación de entrega e incluye datos concretos.
Lo que extrae del documento incluye:
- La notificación de entrega del pedido y la fecha.
- La dirección de entrega y el total pagado.
- El producto, la cantidad y el precio unitario.
- Un banner publicitario y enlaces a ayuda, privacidad y términos.
Los montos y la información salen correctos [05:11]. El problema es que llegan como texto suelto, sin una estructura clara para usarlos en otra aplicación.
Para probar con imágenes, se importa image.jpg en la raíz del proyecto, una fotografía de una zapatilla [05:24]. Basta con cambiar el nombre del archivo en el código y en el mensaje de error para ajustarlo a la realidad.
Al ejecutar de nuevo [06:04], Claude describe la imagen: un sneaker deportivo separado por diseño, colores, estilo y perspectiva. Detecta que es una vista de perfil lateral izquierdo sobre fondo gris claro, con estilo de catálogo comercial. El mismo código lee un PDF y una imagen sin cambios de lógica.
Por qué el texto suelto no le sirve a tu aplicación
Ya puedes enviarle un PDF o una imagen a Claude y confiar en que entiende qué hay dentro. Pero fíjate cómo responde: en bloques de texto extenso, fáciles de leer para ti [06:33].
El detalle es que tu aplicación no lee párrafos. Necesita el total en un campo, la fecha en otro y los ítems en una lista. El texto libre no le sirve de nada al programa porque tendría que adivinar dónde está cada dato.
¿Cómo logras que Claude devuelva datos que tu código use directo? La respuesta llega al pedir respuestas estructuradas en formato JSON. ¿Ya intentaste procesar tus propios documentos con la API? Cuéntame qué tipo de archivo te gustaría automatizar.