Cree e implemente una solución de sincronización automática para las bases de conocimientos de Amazon Bedrock

Con Amazon Bedrock Knowledge Bases, puede brindar a los modelos básicos (FM) y a los agentes información contextual de las fuentes de datos privadas de su organización para brindar respuestas más relevantes, precisas y personalizadas. A medida que los datos crecen, mantener la sincronización en tiempo real entre Amazon Simple Storage Service (Amazon S3) y sus bases de conocimiento se vuelve fundamental para obtener respuestas precisas y actualizadas. En esta publicación, exploramos cómo Deloitte utilizó Amazon EKS y vCluster para transformar su infraestructura de pruebas.

En esta publicación, exploramos una solución automatizada que detecta eventos de S3 y activa trabajos de ingesta mientras respeta las cuotas de servicio y proporciona un monitoreo integral. Esta solución sin servidor utiliza una arquitectura basada en eventos para mantener actualizada su base de conocimientos sin sobrecargar las API de Amazon Bedrock.

El desafío

Las bases de conocimiento en Amazon Bedrock requieren sincronización manual cada vez que se agregan, modifican o eliminan documentos en S3 (incluidos los archivos de metadatos). Las organizaciones necesitan sincronización automatizada para actualizaciones frecuentes de contenido, entornos multiusuario donde los equipos cargan documentos a lo largo del día, aplicaciones en tiempo real, como sistemas de atención al cliente, que requieren acceso inmediato a la información actual y mejorar la eficiencia operativa eliminando procesos de sincronización manual que son propensos a retrasos o al olvido. Para lograr una automatización confiable, las organizaciones deben orquestar cuidadosamente las operaciones de sincronización respetando las cuotas de servicio y los límites de tarifas de Amazon.

Consideraciones de diseño de servicios

Al implementar la sincronización automatizada, los clientes deben tener en cuenta las limitaciones de protección de Amazon Bedrock. Las cuotas de servicio de Amazon Bedrock limitan los trabajos de ingesta simultánea a:

Cinco trabajos por cuenta de AWS (ayuda a evitar el agotamiento de los recursos) Un trabajo por base de conocimientos (facilita el procesamiento enfocado) Un trabajo por fuente de datos (mantiene la coherencia de los datos)

Para obtener más información sobre las cuotas de servicio de Amazon Bedrock, consulte Cuotas de servicio de Amazon Bedrock en la guía de referencia de Amazon Bedrock. Estos límites son específicos de cada región de AWS y pueden cambiar en el futuro, así que consulte la documentación para obtener la información de cuotas más actualizada.

La API StartIngestionJob para bases de conocimiento tiene un límite de velocidad de 0,1 solicitudes por segundo (una solicitud cada 10 segundos) en cada región admitida.

Considere la posibilidad de tener un equipo de contenido que actualice varios archivos durante un lanzamiento. Sin coordinación, las solicitudes de sincronización se ponen en cola debido a los límites del servicio, lo que requiere supervisión manual. Un enfoque orquestado maneja esto sin problemas, asegurando que los cambios se procesen de manera eficiente respetando las restricciones del servicio.

Descripción general de la solución

Esta solución basada en eventos sincroniza automáticamente sus documentos de Amazon S3 con las bases de conocimientos de Amazon Bedrock. Cuando se agregan, modifican o eliminan documentos en su depósito de S3 (incluidos archivos de metadatos), la solución activa automáticamente trabajos de sincronización respetando las cuotas de servicio y los límites de velocidad. La solución utiliza la implementación optimizada del modelo de aplicación sin servidor de AWS (AWS SAM) y funciona como una arquitectura totalmente sin servidor sin necesidad de administración de infraestructura.

Esta solución implementa una arquitectura basada en eventos que combina servicios clave de AWS para procesar los cambios de Amazon S3 en tiempo real mientras administra de manera inteligente los trabajos de ingesta. Los siguientes componentes trabajan juntos para facilitar una sincronización confiable respetando las cuotas de servicio:

Amazon EventBridge captura cambios en tiempo real de Amazon S3 Las funciones de AWS Lambda procesan eventos y administran la sincronización Amazon Simple Queue Service (Amazon SQS) almacena en cola las solicitudes para respetar las cuotas de servicio AWS Step Functions organiza el flujo de trabajo de sincronización Amazon DynamoDB rastrea los cambios de documentos y los metadatos del trabajo

El siguiente diagrama muestra cómo la solución utiliza los servicios de AWS para crear un sistema de sincronización basado en eventos.

La arquitectura de la solución consta de cinco componentes interconectados que trabajan juntos para gestionar el flujo de trabajo de sincronización completo. Exploremos cómo funciona cada componente dentro del sistema, con ejemplos de código para ilustrar la implementación técnica detrás de esta solución lista para implementar.

Fase 1: Detección de cambio de documento

La fase inicial establece la detección y el procesamiento automatizados de los cambios de documentos en su depósito S3. A continuación se detallan las principales acciones realizadas durante esta fase:

EventBridge captura eventos de S3: cuando se cargan, modifican o eliminan documentos, S3 envía automáticamente eventos a EventBridge Lambda procesa los eventos secuencialmente: EventBridge activa la función Lambda del procesador de eventos, que extrae los metadatos del documento (ruta del archivo, tipo de cambio y marca de tiempo) y crea entradas de seguimiento en DynamoDB con fines de auditoría Solicitudes de sincronización de colas SQS: la misma función Lambda envía inmediatamente un mensaje de solicitud de sincronización a Amazon SQS, que almacena en el buffer las solicitudes para administrar la velocidad límites y facilitar el procesamiento confiable

El siguiente código muestra cómo la función Lambda del procesador de eventos maneja los eventos entrantes de S3 y coordina el proceso de seguimiento y puesta en cola:

# El procesador de eventos Lambda extrae la información de cambio def lambda_handler(event, context): para el registro en event.get('Records',[]): # Extraer información de S3 bucket = record['s3']['bucket']['name'] key = record['s3']['object']['key'] event_name = record['eventName'] # Determinar el tipo de cambio change_type = get_change_type(event_name) # Crear una entrada de seguimiento en DynamoDB track_table.put_item( Item={ 'change_id': str(uuid.uuid4()), 'knowledge_base_id': kb_id, 'change_type': change_type, 'key': key, 'processed': False, 'timestamp': datetime.utcnow().timestamp() } ) # Enviar notificación inmediata a SQS sqs.send_message( QueueUrl=QUEUE_URL, MessageBody=json.dumps({ 'change_type': change_type, 'bucket': depósito, 'clave': clave, 'knowledge_base_id': kb_id }))

Fase 2: gestión de colas

Para mantener un procesamiento consistente y respetar las cuotas de servicio, la solución implementa un mecanismo de cola que gestiona las solicitudes de cambio de documentos. La fase de gestión de colas implica estos pasos críticos:

Amazon SQS almacena en búfer las solicitudes: los mensajes de la fase 1 se ponen en cola para aplicar el límite de velocidad entre las solicitudes de trabajos de sincronización que se cumplen. Lambda procesa los mensajes: la función Lambda del procesador de sincronización consume un mensaje a la vez desde la cola SQS. Inicio del flujo de trabajo: cada mensaje desencadena una nueva ejecución de Step Functions con los detalles del cambio del documento y la configuración de la base de conocimientos.

Este código demuestra cómo la función Lambda del procesador de sincronización consume mensajes SQS e inicia el flujo de trabajo de orquestación:

def lambda_handler(evento, contexto): para registro en event.get('Registros',[]): mensaje = json.loads(record['body']) kb_id = mensaje['knowledge_base_id'] # Obtener o descubrir ID de fuente de datos data_source_id = get_data_source_id(kb_id) # Iniciar flujo de trabajo de funciones de paso sfn_input = { 'knowledge_base_id': kb_id, 'data_source_id': data_source_id, 'message': mensaje } respuesta = sfn.start_execution( stateMachineArn=STEP_FUNCTION_ARN, nombre=f"sync-{kb_id}-{int(datetime.utcnow().timestamp())}", input=json.dumps(sfn_input) )

Fase 3: sincronización orquestada

La fase de orquestación utiliza AWS Step Functions para coordinar el proceso de sincronización mientras administra las cuotas de servicio y maneja las fallas. Este flujo de trabajo incluye:

Validación de cuota: verifica los trabajos de ingesta activos en la región actual en todas las bases de conocimiento para confirmar que no se excedan los límites del servicio. Ejecución condicional: si las cuotas lo permiten, inicia el trabajo de sincronización inmediatamente; de lo contrario, espera 5 minutos antes de volver a comprobarlo. Monitoreo de trabajos: realiza un seguimiento del progreso del trabajo de sincronización y maneja escenarios de finalización exitosa y falla. Manejo de errores: implementa lógica de reintento y procesamiento de mensajes no entregados para intentos fallidos de sincronización.

La siguiente definición de máquina de estado de Step Functions muestra la lógica de decisión para la gestión de cuotas y la ejecución de trabajos:

{ "Comment": "Flujo de trabajo para sincronizar documentos con Amazon Bedrock Knowledge Base", "StartAt": "CheckServiceQuota", "States": { "CheckServiceQuota": { "Type": "Task", "Resource": "${CheckQuotaFunctionArn}", "Next": "EvaluateQuotaCheck" }, "EvaluateQuotaCheck": { "Type": "Choice", "Choices": [ { "Variable": "$.quota_check.all_quotas_ok", "BooleanEquals": true, "Siguiente": "StartSyncJob" }, { "Variable": "$.quota_check.all_quotas_ok", "BooleanEquals": false, "Siguiente": "QuotaExceeded" } ] }, "QuotaExceeded": { "Tipo": "Esperar", "Segundos": 300, "Siguiente": "CheckServiceQuota" }, "StartSyncJob": { "Tipo": "Tarea", "Recurso": "${StartSyncFunctionArn}", "Siguiente": "MonitorSyncJob" } } }

Fase 4: procesamiento de la base de conocimientos

Durante esta fase, la base de conocimientos procesa el contenido sincronizado y lo pone a disposición para su uso. Se producen los siguientes pasos:

Procesamiento de documentos: Amazon Bedrock escanea los documentos modificados identificados durante el trabajo de sincronización Conversión de vectores: los documentos se fragmentan y se convierten en incrustaciones de vectores utilizando el modelo de incrustación configurado Actualizaciones de índice: las nuevas incrustaciones se almacenan en la base de datos de vectores mientras que las incrustaciones obsoletas se eliminan Disponibilidad de contenido: el contenido actualizado está inmediatamente disponible para búsqueda y recuperación semántica

Fase 5: Monitoreo y alertas

La fase final implementa monitoreo y alertas integrales para garantizar que la solución funcione de manera confiable. Esto incluye:

Seguimiento de estado: actualiza el estado de los cambios de documentos en DynamoDB a medida que los trabajos se completan exitosamente o fallan. Entrega de notificaciones: envía alertas de éxito o fracaso a través de Amazon SNS a direcciones de correo electrónico o puntos finales configurados. Monitoreo del rendimiento: las métricas de Amazon CloudWatch rastrean la duración de los trabajos de sincronización, las tasas de éxito y la utilización de cuotas. Alertas automatizadas: las alarmas de CloudWatch se activan cuando las tasas de error exceden los umbrales o los trabajos permanecen estancados.

Características clave

Esta solución proporciona varias capacidades esenciales que facilitan una sincronización eficiente y confiable entre Amazon S3 y sus bases de conocimiento. Exploremos cada característica clave y sus beneficios.

Procesamiento de eventos en tiempo real

La solución responde inmediatamente a los cambios de S3. La integración de EventBridge captura eventos de S3 en tiempo real. El sistema procesa los cambios de objetos de Amazon S3 a medida que ocurren mediante el uso de notificaciones de eventos de S3 para activar automáticamente los trabajos de ingesta. La respuesta es rápida y no hay que esperar por los procesos programados.

Gestión integral de cuotas

La solución respeta las cuotas de servicio de Amazon Bedrock:

# Validación de cuotas de servicio MAX_CONCURRENT_JOBS_PER_ACCOUNT = 5 MAX_CONCURRENT_JOBS_PER_DATA_SOURCE = 1 MAX_CONCURRENT_JOBS_PER_KB = 1 MAX_FILE_SIZE_BYTES = 50 * 1024 * 1024 * 1024 # 50 GB MAX_TOTAL_SIZE_BYTES = 100 * 1024 * 1024 * 1024 # 100 GB def check_quotas(kb_id, data_source_id): # Obtener trabajos activos actuales respuesta = bedrock.list_ingestion_jobs( KnowledgeBaseId=kb_id, dataSourceId=data_source_id ) active_jobs = [trabajo para trabajo en respuesta['ingestionJobSummaries'] if trabajo['status'] en ['STARTING', 'IN_PROGRESS']] return { 'all_quotas_ok': len(active_jobs) == 0, 'kb_quota_ok': len(active_jobs) < MAX_CONCURRENT_JOBS_PER_KB }

Limitación de velocidad inteligente

La configuración de la cola SQS facilita la limitación de velocidad adecuada:

SyncQueue: Tipo: AWS::SQS::Queue Propiedades: VisibilityTimeout: 300 MessageRetentionPeriod: 1209600 # 14 días RedrivePolicy: deadLetterTargetArn: !GetAtt SyncQueueDLQ.Arn maxReceiveCount: 5 SyncProcessorFunction: Eventos: SQSEvent: Tipo: SQS Propiedades: Cola: !GetAtt SyncQueue.Arn BatchSize: 1 # Procesa un mensaje a la vez

Manejo sólido de errores

La solución implementa un manejo integral de errores con colas de mensajes fallidos para mensajes fallidos, lógica de reintento automático para fallas transitorias y registro detallado a través de CloudWatch para facilitar una operación confiable y una solución de problemas sencilla.

Requisitos previos

Antes de implementar esta solución, asegúrese de tener lo siguiente:

Una cuenta de AWS con permisos para crear y administrar los siguientes servicios: Una base de conocimientos de Amazon Bedrock preconfigurada con: Al menos una fuente de datos conectada a Amazon S3 Permisos adecuados para administrar las bases de conocimientos de Amazon Bedrock Las siguientes herramientas instaladas en su máquina de desarrollo:

Tiempo estimado para la implementación de la infraestructura: 5 a 10 minutos

Tutorial de la solución

Esta sección lo guía paso a paso por el proceso de implementación de la solución de sincronización automática en su entorno de AWS. Para implementar esta solución, siga estos pasos:

Clona el repositorio de GitHub:

git clone https://github.com/aws-samples/sample-automatic-sync-for-bedrock-knowledge-bases CD de muestra-automatic-sync-for-bedrock-knowledge-bases

Cree e implemente la solución:

sam construir sam desplegar –guiado

Durante la implementación, se le pedirá que proporcione estos parámetros:

Nombre de pila [kb-auto-sync]: nombre de su pila de CloudFormation Región de AWS [us-west-2]: región donde existe su base de conocimientos de Amazon Bedrock KnowledgeBaseId: identificador de su base de conocimientos de Amazon Bedrock S3BucketName: nombre del depósito de S3 que contiene sus documentos S3KeyPrefix (opcional): prefijo de carpeta específico para sincronizar (por ejemplo, documentos/) NotificationsEmail (opcional): dirección de correo electrónico para notificaciones de trabajos de sincronización MaxConcurrentJobs[5]– Número máximo de trabajos de sincronización simultáneos Permitir la creación de roles de IAM de AWS SAM CLI [S/n] – Permiso para crear roles de IAM Guardar argumentos en el archivo de configuración [S/n] – Guardar configuraciones para implementaciones futuras

El siguiente código muestra una entrada de ejemplo:

Configuración de argumentos predeterminados para la implementación de Sam

=================================

Nombre de pila [kb-auto-sync]: my-kb-sync
Región de AWS [us-west-2]: us-east-1
Parámetro KnowledgeBaseId: kb-1234567890
Parámetro S3BucketName: mi-documento-bucket
Parámetro S3KeyPrefix: documentos/
Notificaciones de parámetrosCorreo electrónico: usuario@ejemplo.com
Permitir la creación de roles IAM de SAM CLI [S/n]: Sí
Guardar argumentos en el archivo de configuración [Y/n]: Y

La implementación creará los recursos necesarios y generará los detalles de la pila al finalizar.

Consideraciones de costos

La solución utiliza varios servicios de AWS, cada uno con su propio modelo de precios:

Estos son los costos mensuales estimados para el uso típico por cada 10.000 documentos:

Invocaciones Lambda: ~$0,20 Eventos EventBridge: ~$1,00 Otros servicios: Costos mínimos

Esta solución es ideal para organizaciones que necesitan sincronización de documentos en tiempo real, procesan actualizaciones frecuentes de documentos y requieren un mantenimiento automatizado de la base de conocimientos con una mínima intervención manual. El proceso sigue estas acciones en un ejemplo del mundo real donde un usuario carga un documento:

El usuario carga el documento en Amazon S3 a las 2:00 p. m. EventBridge captura el evento S3 inmediatamente La función Lambda del procesador de eventos crea una entrada de seguimiento y envía un mensaje SQS La función Lambda del procesador de sincronización recibe el mensaje e inicia un flujo de trabajo de Step Functions La verificación de cuota verifica que no hay trabajos activos para la base de conocimiento El trabajo de ingesta comienza inmediatamente La función de monitor rastrea el progreso hasta su finalización a las 2:05 p. m. El cambio se marca como procesado en DynamoDB

Solución de problemas

Las fallas en las tareas de sincronización y la limitación de velocidad son problemas comunes que se pueden resolver de la siguiente manera:

Error en el trabajo de sincronización: esto puede ocurrir cuando los permisos están mal configurados o el tamaño de los documentos excede los límites. Para resolverlo: revise las advertencias del trabajo de ingesta en la consola de Amazon Bedrock en el historial de sincronización de la fuente de datos de su base de conocimientos. Verifique que los permisos de IAM estén configurados correctamente. Confirme que los tamaños de los documentos estén dentro de los límites permitidos. Limitación de velocidad: esto sucede cuando se procesan demasiadas solicitudes de sincronización simultáneamente o se alcanzan las cuotas de servicio. Para resolver esto, siga estos pasos: Supervise las métricas de CloudWatch para identificar cuellos de botella. Ajuste la configuración de simultaneidad según sea necesario para mantenerse dentro de los límites.

Limpieza

Para evitar incurrir en cargos continuos, es importante limpiar adecuadamente los recursos creados por esta solución. Siga estos pasos para facilitar la extracción de los componentes.

Para eliminar la pila usando AWS SAM, ingrese el siguiente código:

# Eliminación interactiva (recomendada) sam delete –stack-name kb-auto-sync –region YOUR_REGION # O eliminación no interactiva sam delete –stack-name kb-auto-sync –region YOUR_REGION –no-prompts

Para eliminar la pila usando CloudFormation, siga estos pasos:

Abra la consola de AWS CloudFormation Seleccione su pila: kb-auto-sync (o el nombre personalizado que eligió durante la implementación) Elija Eliminar y confirme la eliminación Espere a que se complete la eliminación de la pila sin errores

Los siguientes recursos permanecerán después de la eliminación de la pila:

Documentos originales de S3 Base de conocimientos de Amazon Bedrock Registros de CloudWatch (hasta que expire el período de retención) Recursos creados manualmente fuera de la pila

Conclusión

Esta solución de sincronización automatizada basada en eventos proporciona una solución para mantener las bases de conocimiento de Amazon Bedrock sincronizadas con documentos S3 en tiempo real. Al combinar el procesamiento inmediato de eventos con la gestión inteligente de cuotas y el monitoreo integral, la solución facilita una operación confiable y al mismo tiempo optimiza el rendimiento. El enfoque en tiempo real es ideal para aplicaciones que requieren disponibilidad inmediata de documentos, como sistemas de atención al cliente, sistemas de documentación y soluciones de gestión del conocimiento.

Próximos pasos y recursos adicionales

¿Quieres aprender más? Aquí hay algunos recursos útiles para continuar su viaje. Inmersión más profunda:

Soluciones relacionadas:

Documentación:

Apoyo y comunidad:

Sobre los autores

Manideep Reddy Gillela

Manideep es consultor de entrega y arquitecto de infraestructura en la nube en Amazon Web Services. Ayuda a los clientes empresariales a diseñar e implementar soluciones en la nube escalables, seguras y rentables. Con más de 6 años de experiencia en arquitectura de nube y diseño de infraestructura, junto con un enfoque en soluciones de IA generativa y IA/ML en AWS, trabaja con organizaciones líderes en diversas industrias para acelerar sus viajes de transformación digital. Además de ayudar a los clientes a innovar en AWS, a Manideep le gusta viajar, nadar y practicar deportes recreativos.

Sushma Nagaraj

Sushma es arquitecto de soluciones asociadas en Amazon Web Services con más de cinco años de experiencia ayudando a socios y clientes a crear soluciones en la nube seguras y escalables. Especializada en DevOps y automatización de infraestructura, colabora con socios estratégicos para diseñar arquitecturas optimizadas para AWS, dirigir talleres técnicos y ofrecer pruebas de concepto de alto impacto. Su experiencia se extiende a AI/ML, donde apoya a los clientes en la creación de aplicaciones inteligentes utilizando los servicios de AI de AWS. Le apasiona simplificar la complejidad y permitir la innovación a escala.

Luis Felipe Florez Leano

Luis es arquitecto de soluciones en el equipo de Arquitectura de soluciones de socios GenAI de América en Amazon Web Services. En este puesto, trabaja con socios de AWS en toda América para ayudarlos a diseñar, construir y escalar soluciones de IA generativa en AWS, aprovechando su experiencia para ayudar a los socios a dar vida a sus innovaciones de IA, con un enfoque en implementaciones prácticas utilizando Amazon Bedrock y otros servicios de IA de AWS, y en ayudar a las organizaciones a explorar las oportunidades técnicas y comerciales de la IA generativa.