Acelerar el reconocimiento de entidades personalizadas con el uso de la herramienta Claude en Amazon Bedrock

Las empresas de todos los sectores se enfrentan a un desafío común: cómo extraer eficientemente información valiosa de grandes cantidades de datos no estructurados. Los enfoques tradicionales a menudo implican procesos que requieren muchos recursos y modelos inflexibles. Esta publicación presenta una solución revolucionaria: el uso de Claude Tool en Amazon Bedrock, que utiliza el poder de los modelos de lenguaje grandes (LLM) para realizar un reconocimiento de entidades dinámico y adaptable sin una configuración o capacitación extensa.

En esta publicación, analizamos:

Qué es el uso de Claude Tool (llamada a funciones) y cómo funciona Cómo utilizar Claude Tool para extraer datos estructurados mediante indicaciones en lenguaje natural Configurar una canalización sin servidor con Amazon Bedrock, AWS Lambda y Amazon Simple Storage Service (S3) Implementar extracción dinámica de entidades para varios tipos de documentos Implementar una solución lista para producción siguiendo las mejores prácticas de AWS

¿Cuál es el uso de Claude Tool (llamada a funciones)?

El uso de Claude Tool, también conocido como llamada de función, es una capacidad poderosa que nos permite aumentar las habilidades de Claude estableciendo e invocando funciones o herramientas externas. Esta característica nos permite brindarle a Claude una colección de herramientas preestablecidas a las que puede acceder y emplear según sea necesario, mejorando su funcionalidad.

Cómo funciona el uso de Claude Tool con Amazon Bedrock

Amazon Bedrock es un servicio de inteligencia artificial (IA) generativa totalmente administrado que ofrece una variedad de modelos básicos (FM) de alto rendimiento de líderes de la industria como Anthropic. Amazon Bedrock hace que la implementación del uso de la herramienta Claude sea notablemente sencilla:

Los usuarios definen un conjunto de herramientas, incluidos sus nombres, esquemas de entrada y descripciones. Se proporciona un mensaje de usuario que puede requerir el uso de una o más herramientas. Claude evalúa el mensaje y determina si alguna herramienta podría ser útil para abordar la pregunta o tarea del usuario. Si corresponde, Claude selecciona qué herramientas utilizar y con qué aportaciones.

Descripción general de la solución

En esta publicación, demostramos cómo extraer campos personalizados de licencias de conducir utilizando Claude Tool en Amazon Bedrock. Esta solución sin servidor procesa documentos en tiempo real y extrae información como nombres, fechas y direcciones sin la capacitación del modelo tradicional.

Arquitectura

Nuestra solución personalizada de reconocimiento de entidades utiliza una arquitectura sin servidor para procesar documentos de manera eficiente y extraer información relevante utilizando el modelo Claude de Amazon Bedrock. Este enfoque minimiza la necesidad de una gestión de infraestructura compleja al tiempo que proporciona capacidades de procesamiento escalables bajo demanda.

La arquitectura de la solución utiliza varios servicios de AWS para crear un proceso fluido. Así es como funciona el proceso:

Los usuarios cargan documentos en Amazon S3 para su procesamiento. Una notificación de evento PUT de S3 activa una función de AWS Lambda. Lambda procesa el documento y lo envía a Amazon Bedrock. Amazon Bedrock invoca a Anthropic Claude para la extracción de entidades. Los resultados se registran en Amazon CloudWatch para su monitoreo.

El siguiente diagrama muestra cómo estos servicios funcionan juntos:

Componentes de arquitectura

Amazon S3: almacena documentos de entrada AWS Lambda: se activa al cargar archivos, envía indicaciones y datos a Claude, almacena resultados Amazon Bedrock (Claude): procesa entradas y extrae entidades Amazon CloudWatch: monitorea y registra el rendimiento del flujo de trabajo

Requisitos previos

Guía de implementación paso a paso:

Esta guía de implementación demuestra cómo crear una solución de procesamiento de documentos sin servidor utilizando Amazon Bedrock y los servicios de AWS relacionados. Si sigue estos pasos, puede crear un sistema que extraiga automáticamente información de documentos como licencias de conducir, evitando la entrada manual de datos y reduciendo el tiempo de procesamiento. Ya sea que maneje unos pocos documentos o miles, esta solución puede escalarse automáticamente para satisfacer sus necesidades y al mismo tiempo mantener una precisión constante en la extracción de datos.

Configuración de su entorno (10 minutos) Cree un depósito S3 de origen para la entrada (por ejemplo, entrada de licencia de conducir). Configure roles y permisos de IAM: { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "bedrock:InvokeModel", "Resource": "arn:aws:bedrock:*::foundation-model/*", "arn:aws:bedrock:*:111122223333:inference-profile/*” }, { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*" } ] } Creación de la función Lambda (30 minutos)
Esta función Lambda se activa automáticamente cuando se carga una nueva imagen en su depósito S3. Lee la imagen, la codifica en base64 y la envía a Claude 4.5 Sonnet a través de Amazon Bedrock utilizando la API de uso de herramientas. La función define una única herramienta llamada extract_license_fields con fines de demostración. Sin embargo, puede definir esquemas y nombres de herramientas según su caso de uso, por ejemplo, extraer datos de tarjetas de seguro, credenciales de identificación o formularios comerciales. Claude selecciona dinámicamente si desea llamar a su herramienta según la relevancia del mensaje y la estructura de entrada.
Estamos usando "tool_choice": "auto" para permitir que Claude decida cuándo invocar la función. En casos de uso de producción, es posible que desee codificar “tool_choice”: { “type”: “tool”, “name”: “your_tool_name” } para un comportamiento determinista. Vaya a la consola de AWS Lambda. Elija Crear función. Seleccione Autor desde cero. Establezca el tiempo de ejecución en Python 3.12. Elija Crear función.

Configurar el tiempo de espera de Lambda En la configuración de la función Lambda, haga clic en la pestaña Configuración general. En Configuración general, haga clic en Editar para tiempo de espera, aumente desde los 3 segundos predeterminados hasta al menos 30 segundos. Recomendamos configurarlo entre 1 y 2 minutos para imágenes más grandes. Elija Guardar.

Nota: Este ajuste es crucial porque el procesamiento de imágenes a través de Claude puede tardar más que el tiempo de espera predeterminado de Lambda, especialmente para imágenes de alta resolución o cuando se procesan varios campos. Supervise el tiempo de ejecución de su función en CloudWatch Logs para ajustar esta configuración a su caso de uso específico.
Pegue este código en el archivo de código lambda_function.py:

importar boto3, json importar base64 def lambda_handler(evento, contexto): bedrock = boto3.client("bedrock-runtime") s3 = boto3.client("s3") bucket = evento["Registros"][0]["s3"]["bucket"]["name"] clave = evento["Registros"][0]["s3"]["object"]["key"] file = s3.get_object(Bucket=bucket, Key=key) # Convertir imagen a base64 image_data = file["Body"].read() base64_image = base64.b64encode(image_data).decode('utf-8') # Definir esquema de herramientas herramientas = [{ "name": "extract_license_fields", "input_schema": { "type": "object", "properties": { "first_name": { "type": "string" }, "last_name": { "type": "string" }, "issue_date": { "type": "string" }, "license_number": { "type": "string" }, "address": { "type": "object", "properties": { "street": { "type": "string" }, "city": { "type": "string" }, "estado": { "tipo": "cadena" }, "zip": { "tipo": "cadena" } } } }, "requerido": ["nombre", "apellido", "fecha de emisión", "número de licencia", "dirección"] } }] carga útil = { "anthropic_version": "bedrock-2023-05-31", "max_tokens": 2048, "messages": [{ "role": "user", "content": [ { "type": "image", "source": { "type": "base64", "media_type": "image/jpeg", "data": base64_image } }, { "type": "text", "text": "Extrae los campos de la licencia de conducir de esta imagen". } ] }], "tools": tools } try: respuesta = bedrock.invoke_model( modelId="global.anthropic.claude-sonnet-4-5-20250929-v1:0", body=json.dumps(payload) ) result = json.loads(response["body"].read()) # Imprimir cada paso para la depuración print("1. Raw Response:", json.dumps(resultado, sangría=2)) if "contenido" en el resultado: print("2. Contenido encontrado en respuesta") para el contenido en el resultado["contenido"]: print("3. Elemento de contenido:", json.dumps(contenido, sangría=2)) if isinstance(content, dict): print("4. Tipo de contenido:", content.get("tipo")) if content.get("tipo") == "texto": print("5. Contenido de texto:", content.get("text")) if content.get("type") == "tool_calls": print("6. Se encontraron llamadas a herramientas") extraído = json.loads(content["tool_calls"][0]["función"]["argumentos"]) print("7. Datos extraídos:", json.dumps(extraído, sangría=2)) return { "statusCode": 200, "body": json.dumps({ "message": "Proceso completado", "raw_response": resultado }, sangría=2) } excepto excepción como e: print(f"Se produjo un error: {str(e)}") return { "statusCode": 500, "body": json.dumps({ "error": str(e), "type": str(type(e)) }) }

Implemente la función Lambda: después de pegar el código, elija el botón Implementar en el lado izquierdo del editor de código y espere el mensaje de confirmación de implementación.
Importante: recuerde siempre implementar su código después de realizar cambios. Esto garantiza que su código más reciente se guarde y se ejecute cuando se active la función Lambda. Trabajar con esquemas de uso de herramientas de Claude Amazon Bedrock con Claude 4.5 Sonnet admite llamadas de funciones mediante el uso de herramientas, donde se definen herramientas invocables con esquemas JSON claros. Una entrada de herramienta válida debe incluir: nombre: identificador de su herramienta (por ejemplo, extract_license_fields) input_schema: esquema JSON que define los campos, tipos y estructura requeridos Ejemplo de definición de uso de herramienta:

[{ "nombre": "extract_license_fields", "input_schema": { "tipo": "objeto", "properties": { "first_name": { "type": "string" }, "last_name": { "type": "string" }, "issue_date": { "type": "string" }, "license_number": { "type": "string" }, "address": { "type": "object", "properties": { "calle": { "tipo": "cadena" }, "ciudad": { "tipo": "cadena" }, "estado": { "tipo": "cadena" }, "zip": { "tipo": "cadena" } } } }, "requerido": ["nombre", "apellido", "fecha_emisión", "número_licencia", "dirección"] } }]

Puede definir varias herramientas en la matriz de herramientas. Claude selecciona uno (o ninguno) según el valor de opción_herramienta y qué tan bien el mensaje coincide con un esquema determinado. Configurar la notificación de eventos de S3 (5 minutos) Abra la consola de Amazon S3. Seleccione su depósito S3. Haga clic en la pestaña Propiedades. Desplácese hacia abajo hasta Notificaciones de eventos. Haga clic en Crear notificación de evento. Introduzca un nombre para la notificación (por ejemplo, "LambdaTrigger"). En Tipos de eventos, seleccione PUT. En Destino, seleccione la función Lambda. Elija su función Lambda en el menú desplegable. Haga clic en Guardar cambios. Prueba y validación (15 minutos) Formatos admitidos: Claude 4.5 admite entradas de imágenes en formatos JPEG, PNG, WebP y GIF de un solo cuadro. Nota: Si bien esta implementación actualmente solo admite imágenes .jpeg, puede ampliar la compatibilidad con otros formatos modificando el campo media_type en la función Lambda para que coincida con el tipo MIME del archivo cargado. Límites de tamaño y resolución: Tamaño máximo de imagen: 20 MB Resolución recomendada: 300 DPI o superior Dimensiones máximas: 4096 x 4096 píxeles Es posible que las imágenes más grandes no se procesen o produzcan resultados inexactos. Consejos de preprocesamiento para una mayor precisión: recorte la imagen con precisión para eliminar el ruido y las secciones irrelevantes. Ajuste el contraste y el brillo para garantizar que el texto sea claramente legible. Corrija los escaneos y asegúrese de que el texto esté alineado horizontalmente. Evite capturas de pantalla de baja resolución o imágenes con artefactos de compresión elevados. Prefiere fondos blancos y texto oscuro para obtener la máxima claridad de OCR. Cargar imagen de prueba:
Abra su depósito S3. Cargue una imagen de licencia de conducir (formatos admitidos: .jpeg, .jpg). Nota: Asegúrese de que la imagen sea clara y legible para obtener mejores resultados. Supervisar los registros de CloudWatch Vaya a la consola de Amazon CloudWatch. Haga clic en Registrar grupos en la navegación izquierda. Busque el nombre de su función Lambda invoke_drivers_license. Haga clic en el último flujo de registro (ordenado por marca de tiempo). Vea los resultados de la ejecución, que muestran este resultado de muestra:

{ "type": "tool_use", "id": "toolu_bdrk_01Ar6UG7BcARjqAKsiSPyNdf", "name": "extract_license_fields

Optimización del rendimiento

Configurar la memoria Lambda y los ajustes de tiempo de espera Implementar el procesamiento por lotes para múltiples documentos Usar notificaciones de eventos S3 para el procesamiento automático Agregar métricas de CloudWatch para monitoreo

Mejores prácticas de seguridad

Implementar cifrado en reposo para depósitos de S3. Usar claves de AWS Key Management Service (KMS) para datos confidenciales. Aplicar políticas de IAM con privilegios mínimos. Habilitar puntos finales de nube privada virtual (VPC) para acceso a redes privadas.

Manejo y monitoreo de errores

La salida de Claude está estructurada como una lista de bloques de contenido, que pueden incluir respuestas de texto, llamadas a herramientas u otros tipos de datos. Para depurar: registre siempre la respuesta sin procesar de Claude. Compruebe si tool_calls está presente en la respuesta. Utilice un bloque try-except alrededor de la llamada a la función para detectar errores como cargas útiles con formato incorrecto o tiempos de espera del modelo. Aquí hay un patrón mínimo de manejo de errores:

Pruebe: resultado = json.loads(respuesta["cuerpo"].read()) si "tool_calls" en resultado.get("contenido", [{}])[0]: argumentos = resultado["contenido"][0]["llamadas a herramientas"][0]["función"]["argumentos"] print("Campos extraídos:", json.dumps(json.loads(args), indent=2)) excepto Excepción como e: print("Se produjo un error:", str(e))

Limpiar

Elimine el depósito de S3 y su contenido. Eliminar funciones Lambda. Elimine funciones y políticas de IAM. Deshabilite el acceso a Bedrock si ya no es necesario.

Conclusión

El uso de Claude Tool en Amazon Bedrock proporciona una solución poderosa para la extracción de entidades personalizadas, minimizando la necesidad de modelos complejos de aprendizaje automático (ML). Esta arquitectura sin servidor permite un procesamiento de documentos escalable y rentable con una configuración y un mantenimiento mínimos. Al aprovechar el poder de los grandes modelos lingüísticos a través de Amazon Bedrock, las organizaciones pueden desbloquear nuevos niveles de eficiencia, conocimiento e innovación en el manejo de datos no estructurados.

Próximos pasos

Le animamos a explorar más a fondo esta solución implementando el código de muestra en su entorno y personalizándolo para sus casos de uso específicos. Únase a la discusión sobre soluciones de extracción de entidades en la comunidad AWS re:Post, donde podrá compartir sus experiencias y aprender de otros desarrolladores.

Para obtener información técnica más profunda, explore nuestra documentación completa sobre Amazon Bedrock, AWS Lambda y Amazon S3. Considere mejorar su implementación integrándola con Amazon Textract para funciones adicionales de procesamiento de documentos o Amazon Comprehend para análisis de texto avanzado. Para mantenerse actualizado sobre soluciones similares, suscríbase a nuestro blog de aprendizaje automático de AWS y explore más ejemplos en el repositorio de ejemplos de AWS en GitHub. Si es nuevo en los servicios de aprendizaje automático de AWS, consulte nuestra Universidad de aprendizaje automático de AWS o explore nuestra Biblioteca de soluciones de AWS. Para obtener soporte y soluciones empresariales, comuníquese con su equipo de cuentas de AWS.

Sobre los autores

Kimo El Mehri

Kimo es un arquitecto de soluciones de AWS con experiencia en infraestructura, almacenamiento, seguridad, GenAI y análisis de datos, entre otras áreas. Le apasiona trabajar con clientes de diversos sectores verticales, ayudándolos a aprovechar los servicios de AWS para impulsar su transformación digital y satisfacer sus necesidades comerciales.

Johana Herrera

Johana Herrera es Arquitecta de Soluciones en AWS y ayuda a las empresas a modernizarse y crecer en la nube. Se especializa en análisis e inteligencia artificial generativa, y le encanta ayudar a los clientes a diseñar soluciones teniendo en cuenta la seguridad y la resiliencia. En su tiempo libre, le gusta pasar tiempo con sus dos perros o ver deportes.