![]() |
Muchas aplicaciones deben interactuar con el contenido disponible a través de diferentes modalidades. Algunas de estas aplicaciones procesan documentos complejos, como reclamos de seguro y facturas médicas. Las aplicaciones móviles deben analizar los medios generados por el usuario. Las organizaciones necesitan construir un índice semántico sobre sus activos digitales que incluyan documentos, imágenes, audio y archivos de video. Sin embargo, obtener información del contenido multimodal no estructurado no es fácil de configurar: debe implementar tuberías de procesamiento para los diferentes formatos de datos y seguir múltiples pasos para obtener la información que necesita. Eso generalmente significa tener múltiples modelos en producción para los cuales tiene que manejar las optimizaciones de costos (a través del ajuste fino y la ingeniería rápida), las salvaguardas (por ejemplo, contra las alucinaciones), las integraciones con las aplicaciones objetivo (incluidos los formatos de datos) y las actualizaciones de modelos.
Para facilitar este proceso, presentamos en la vista previa durante AWS re: Invent Amazon Bedrock Automation, una capacidad de Amazon Bedrock que agiliza la generación de conocimientos valiosos de contenido multimodal no estructurado, como documentos, imágenes, audio y videos. Con la automatización de datos de base, puede reducir el tiempo de desarrollo y el esfuerzo para crear procesamiento inteligente de documentos, análisis de medios y otras soluciones de automatización multimodales centradas en datos.
Puede usar la automatización de datos de roca madre como una característica independiente o como analizador para las bases de conocimiento de roca madre de Amazon para indexar las ideas de contenido multimodal y proporcionar respuestas más relevantes para la generación de generación (RAG) de recuperación.
Hoy en día, la automatización de datos de base ahora está generalmente disponible con soporte para los puntos finales de inferencia de región cruzada que estarán disponibles en más regiones de AWS y usan sin problemas en diferentes ubicaciones. Según sus comentarios durante la vista previa, también mejoramos la precisión y agregamos soporte para el reconocimiento de logotipos para imágenes y videos.
Echemos un vistazo a cómo funciona esto en la práctica.
Uso de Amazon Bedrock Data Automation con puntos finales de inferencia de región cruzada
La publicación de blog publicada para la vista previa de automatización de datos de base muestra cómo usar la demostración visual en la consola de rock de Amazon para extraer información de documentos y videos. Le recomiendo que revise la experiencia de demostración de la consola para comprender cómo funciona esta capacidad y qué puede hacer para personalizarla. Para esta publicación, me concentro más en cómo funciona la automatización de datos de roca en sus aplicaciones, comenzando con algunos pasos en la consola y siguiendo con muestras de código.
El Automatización de datos La sección de la consola Bedrock de Amazon ahora solicita confirmación para habilitar el soporte de región cruzada la primera vez que accede a ella. Por ejemplo:
Desde una perspectiva de API, el InvokeDataAutomationAsync
operación ahora requerimiento un parámetro adicional (dataAutomationProfileArn
) para especificar el perfil de automatización de datos para usar. El valor para este parámetro depende de la región y su ID de cuenta de AWS:
arn:aws:bedrock:
Además, el dataAutomationArn
el parámetro ha sido renombrado para dataAutomationProjectArn
Para reflejar mejor que contiene el nombre del recurso de Amazon (ARN) Project. Al invocar la automatización de datos de base, ahora debe especificar un proyecto o un plan para usar. Si pasa en BluePrints, obtendrá una salida personalizada. Para continuar obteniendo una salida predeterminada estándar, configure el parámetro DataAutomationProjectArn
para usar arn:aws:bedrock:
.
Como su nombre indica, el InvokeDataAutomationAsync
La operación es asíncrona. Pase la configuración de entrada y salida y, cuando el resultado está listo, está escrito en un cubo de Amazon Simple Storage Service (Amazon S3) como se especifica en la configuración de salida. Puede recibir una notificación de Amazon EventBridge de Bedrock Data Automation utilizando el notificationConfiguration
parámetro.
Con la automatización de datos de base, puede configurar salidas de dos maneras:
- Salida estándar Ofrece ideas predefinidas relevantes para un tipo de datos, como la semántica de documentos, los resúmenes de los capítulos de video y las transcripciones de audio. Con salidas estándar, puede configurar sus ideas deseadas en solo unos pocos pasos.
- Salida personalizada Le permite especificar las necesidades de extracción utilizando planos para obtener más información a medida.
Para ver las nuevas capacidades en acción, creo un proyecto y personalizo la configuración de salida estándar. Para los documentos, elijo texto sin formato en lugar de Markdown. Tenga en cuenta que puede automatizar estos pasos de configuración utilizando la API de automatización de datos de roca.
Para los videos, quiero una transcripción de audio completa y un resumen de todo el video. También solicito un resumen de cada capítulo.
Para configurar un plan, elijo Configuración de salida personalizada en el Automatización de datos Sección del panel de navegación de la consola de roca madre de Amazon. Allí, busco el US-Driver-Blicense Muestra de plan. Puede explorar otros planos de muestra para obtener más ejemplos e ideas.
Los planos de muestra no se pueden editar, así que uso el Comportamiento Menú para duplicar el plan y agregarlo a mi proyecto. Allí, puedo ajustar los datos que se extraerán modificando el plan y agregando campos personalizados que pueden usar IA generativa para extraer o calcular los datos en el formato que necesito.
Subo la imagen de una licencia de conducir estadounidense en un cubo S3. Luego, uso este script de python de muestra que utiliza la automatización de datos de roca madre a través del AWS SDK para Python (Boto3) para extraer información de texto de la imagen:
import json
import sys
import time
import boto3
DEBUG = False
AWS_REGION = ''
BUCKET_NAME = ''
INPUT_PATH = 'BDA/Input'
OUTPUT_PATH = 'BDA/Output'
PROJECT_ID = ''
BLUEPRINT_NAME = 'US-Driver-License-demo'
# Fields to display
BLUEPRINT_FIELDS = [
'NAME_DETAILS/FIRST_NAME',
'NAME_DETAILS/MIDDLE_NAME',
'NAME_DETAILS/LAST_NAME',
'DATE_OF_BIRTH',
'DATE_OF_ISSUE',
'EXPIRATION_DATE'
]
# AWS SDK for Python (Boto3) clients
bda = boto3.client('bedrock-data-automation-runtime', region_name=AWS_REGION)
s3 = boto3.client('s3', region_name=AWS_REGION)
sts = boto3.client('sts')
def log(data):
if DEBUG:
if type(data) is dict:
text = json.dumps(data, indent=4)
else:
text = str(data)
print(text)
def get_aws_account_id() -> str:
return sts.get_caller_identity().get('Account')
def get_json_object_from_s3_uri(s3_uri) -> dict:
s3_uri_split = s3_uri.split('/')
bucket = s3_uri_split[2]
key = '/'.join(s3_uri_split[3:])
object_content = s3.get_object(Bucket=bucket, Key=key)['Body'].read()
return json.loads(object_content)
def invoke_data_automation(input_s3_uri, output_s3_uri, data_automation_arn, aws_account_id) -> dict:
params = {
'inputConfiguration': {
's3Uri': input_s3_uri
},
'outputConfiguration': {
's3Uri': output_s3_uri
},
'dataAutomationConfiguration': {
'dataAutomationProjectArn': data_automation_arn
},
'dataAutomationProfileArn': f"arn:aws:bedrock:{AWS_REGION}:{aws_account_id}:data-automation-profile/us.data-automation-v1"
}
response = bda.invoke_data_automation_async(**params)
log(response)
return response
def wait_for_data_automation_to_complete(invocation_arn, loop_time_in_seconds=1) -> dict:
while True:
response = bda.get_data_automation_status(
invocationArn=invocation_arn
)
status = response['status']
if status not in ['Created', 'InProgress']:
print(f" {status}")
return response
print(".", end='', flush=True)
time.sleep(loop_time_in_seconds)
def print_document_results(standard_output_result):
print(f"Number of pages: {standard_output_result['metadata']['number_of_pages']}")
for page in standard_output_result['pages']:
print(f"- Page {page['page_index']}")
if 'text' in page['representation']:
print(f"{page['representation']['text']}")
if 'markdown' in page['representation']:
print(f"{page['representation']['markdown']}")
def print_video_results(standard_output_result):
print(f"Duration: {standard_output_result['metadata']['duration_millis']} ms")
print(f"Summary: {standard_output_result['video']['summary']}")
statistics = standard_output_result['statistics']
print("Statistics:")
print(f"- Speaket count: {statistics['speaker_count']}")
print(f"- Chapter count: {statistics['chapter_count']}")
print(f"- Shot count: {statistics['shot_count']}")
for chapter in standard_output_result['chapters']:
print(f"Chapter {chapter['chapter_index']} {chapter['start_timecode_smpte']}-{chapter['end_timecode_smpte']} ({chapter['duration_millis']} ms)")
if 'summary' in chapter:
print(f"- Chapter summary: {chapter['summary']}")
def print_custom_results(custom_output_result):
matched_blueprint_name = custom_output_result['matched_blueprint']['name']
log(custom_output_result)
print('\n- Custom output')
print(f"Matched blueprint: {matched_blueprint_name} Confidence: {custom_output_result['matched_blueprint']['confidence']}")
print(f"Document class: {custom_output_result['document_class']['type']}")
if matched_blueprint_name == BLUEPRINT_NAME:
print('\n- Fields')
for field_with_group in BLUEPRINT_FIELDS:
print_field(field_with_group, custom_output_result)
def print_results(job_metadata_s3_uri) -> None:
job_metadata = get_json_object_from_s3_uri(job_metadata_s3_uri)
log(job_metadata)
for segment in job_metadata['output_metadata']:
asset_id = segment['asset_id']
print(f'\nAsset ID: {asset_id}')
for segment_metadata in segment['segment_metadata']:
# Standard output
standard_output_path = segment_metadata['standard_output_path']
standard_output_result = get_json_object_from_s3_uri(standard_output_path)
log(standard_output_result)
print('\n- Standard output')
semantic_modality = standard_output_result['metadata']['semantic_modality']
print(f"Semantic modality: {semantic_modality}")
match semantic_modality:
case 'DOCUMENT':
print_document_results(standard_output_result)
case 'VIDEO':
print_video_results(standard_output_result)
# Custom output
if 'custom_output_status' in segment_metadata and segment_metadata['custom_output_status'] == 'MATCH':
custom_output_path = segment_metadata['custom_output_path']
custom_output_result = get_json_object_from_s3_uri(custom_output_path)
print_custom_results(custom_output_result)
def print_field(field_with_group, custom_output_result) -> None:
inference_result = custom_output_result['inference_result']
explainability_info = custom_output_result['explainability_info'][0]
if '/' in field_with_group:
# For fields part of a group
(group, field) = field_with_group.split('/')
inference_result = inference_result[group]
explainability_info = explainability_info[group]
else:
field = field_with_group
value = inference_result[field]
confidence = explainability_info[field]['confidence']
print(f'{field}: {value or ''} Confidence: {confidence}')
def main() -> None:
if len(sys.argv)
La configuración inicial en el script incluye el nombre del cubo S3 para usar en entrada y salida, la ubicación del archivo de entrada en el cubo, la ruta de salida para los resultados, la ID del proyecto que se utilizará para obtener la salida personalizada de la automatización de datos de rock y los campos de planos para mostrar en la salida.
Ejecute el script que pasa el nombre del archivo de entrada. En la salida, veo la información extraída por Bedrock Data Automation. El US-Driver-Blicense es una coincidencia y el nombre y las fechas en la licencia de conducir se imprimen en la salida.
Como se esperaba, veo en la salida la información que seleccioné del plan asociado con el proyecto de automatización de datos de base.
Del mismo modo, ejecuto el mismo script en un archivo de video de mi colega Mike Chambers. Para mantener la salida pequeña, no imprimo la transcripción completa de audio o el texto que se muestra en el video.
Cosas que saber
Amazon Bedrock Data Automation ahora está disponible mediante inferencia de región cruzada en las siguientes dos regiones de AWS: US East (N. Virginia) y US West (Oregon). Al usar la automatización de datos de roca madre de esas regiones, los datos se pueden procesar utilizando inferencia de región cruzada en cualquiera de estas cuatro regiones: US East (Ohio, N. Virginia) y US West (N. California, Oregon). Todas estas regiones están en los EE. UU. Para que los datos se procesen dentro de la misma geografía. Estamos trabajando para agregar apoyo para más regiones en Europa y Asia más adelante en 2025.
No hay cambios en el precio en comparación con la vista previa y al usar inferencia de región cruzada. Para obtener más información, visite el precio de Amazon Bedrock.
La automatización de datos de base de base ahora también incluye una serie de capacidades relacionadas con la seguridad, gobernanza y administración de la capacidad de administración, como el Servicio de Gestión de Clave de AWS (AWS KMS), el soporte de claves administradas por los clientes para el control de cifrado granular, AWS PrivateLink para conectarse directamente a las API de automatización de datos Bedrock en su nube privada virtual (VPC) en lugar de conectarse sobre el Internet, y etiquetar los recursos de datos de datos de la cama con la automatización de los recursos y los trabajos de los recursos de la automatización y los trabajos de los trabajos a los trabajos de acceso a la transmisión de acceso a la transmisión de datos y trabajos a la etiqueta de la etiqueta de la etiqueta y la etiqueta. AWS Identity and Access Management (IAM).
Utilicé Python en esta publicación de blog, pero la automatización de datos de roca madre está disponible con cualquier SDK de AWS. Por ejemplo, puede usar Java, .NET o Rust para una aplicación de procesamiento de documentos de backend; JavaScript para una aplicación web que procesa imágenes, videos o archivos de audio; y Swift para una aplicación móvil nativa que procesa el contenido proporcionado por los usuarios finales. Nunca ha sido tan fácil obtener información de los datos multimodales.
Aquí hay algunas sugerencias de lectura para obtener más información (incluidas las muestras de código):
– Danilo
–
¿Cómo está el blog de noticias? Tomar esto Encuesta de 1 minuto!