Uso de Nova Embeddings - Amazon Nova

Uso de Nova Embeddings

Amazon Nova Multimodal Embeddings es un modelo de incrustaciones multimodales de última generación para aplicaciones de RAG y búsqueda semántica de agentes. Se trata del primer modelo de incrustaciones unificado que admite texto, documentos, imágenes, video y audio en un único modelo, lo que permite la recuperación intermodal con la máxima precisión. Nova Multimodal Embeddings mapea cada uno de estos tipos de contenido en un espacio semántico unificado, lo que permite a los desarrolladores realizar operaciones vectoriales unimodales, intermodales y multimodales.

La API de Nova Embeddings se puede utilizar en diversas aplicaciones, como las siguientes:

  • Recuperación y recomendación de contenido semántico: genere incrustaciones para su contenido y utilícelas para buscar elementos similares u ofrecer recomendaciones personalizadas a sus usuarios.

  • Búsqueda multimodal: combine incrustaciones de diferentes tipos de contenido para facilitar potentes capacidades de búsqueda intermodal.

  • RAG: genere incrustaciones a partir de contenido multimodal, como documentos con texto e imágenes intercalados, para potenciar el flujo de trabajo de recuperación de las aplicaciones GenAI.

Características clave

  • Soporte de texto, imagen, imagen de documento, video y audio en un espacio semántico unificado. La longitud máxima del contexto es de 8000 tokens o 30 segundos de video y 30 segundos de audio.

  • API sincrónicas y asincrónicas: la API admite el uso sincrónico y asincrónico.

  • Segmentación de archivos grandes: la API asincrónica facilita el trabajo con entradas de gran tamaño al proporcionar una segmentación creada por la API para texto, video y audio largos, controlada mediante parámetros que define el usuario. El modelo generará una incrustación única para cada segmento.

  • Video con audio: procese video y audio de forma simultánea. La API le permite especificar si desea una sola incrustación que represente ambas modalidades o dos incrustaciones independientes que representen la transmisión de video y audio, respectivamente.

  • Fin de la incrustación: Nova Multimodal Embeddings le permite optimizar sus incrustaciones en función de la aplicación posterior prevista. Los casos de uso compatibles incluyen la recuperación (RAG/búsqueda), la clasificación y la agrupación en clústeres. Los valores específicos dependen de la aplicación (consulte las prácticas recomendadas).

  • Tamaños: 4 tamaños para compensar la precisión de incrustación y el costo de almacenamiento vectorial: 3072, 1024, 384 y 256.

  • Métodos de entrada: puede pasar el contenido para incrustarlo especificando un URI de S3 o insertarlo en línea como una codificación base64.

¿Cómo funciona Nova Multimodal Embeddings?

  • Cuando un contenido pasa por las incrustaciones de Nova, el modelo convierte ese contenido en un formato numérico universal, denominado vector. Un vector es un conjunto de valores numéricos arbitrarios que luego se pueden utilizar para diversas funcionalidades de búsqueda. Al contenido similar se le asigna un vector más cercano que al contenido menos similar. Por ejemplo, al contenido que podría describirse como “feliz” se le asigna un vector más cercano a un vector como “alegre” en lugar de uno como “tristeza”.

Requisitos previos

Para usar incrustaciones multimodales, necesita lo siguiente:

  • Python instalado.

  • La CLI de AWS instalada.

  • La CLI de AWS configurada con las credenciales de acceso de su cuenta de AWS.

  • El modelo Nova Multimodal Embeddings habilitado en su cuenta de AWS.

Con estas opciones habilitadas, puede realizar solicitudes de incrustaciones asincrónicas o sincrónicas.

Cómo generar incrustaciones de forma sincrónica

En el caso de elementos de menor contenido, puede usar la API InvokeModel de Bedrock Runtime. Esta es una buena opción para generar rápidamente incrustaciones de texto, imágenes o archivos cortos de audio/video.

En el siguiente ejemplo se genera una incrustación sincrónica para el texto “¡Hola, mundo!”.

import json import boto3 # Create the Bedrock Runtime client. bedrock_runtime = boto3.client( service_name="bedrock-runtime", region_name="us-east-1", ) # Define the request body. request_body = { "taskType": "SINGLE_EMBEDDING", "singleEmbeddingParams": { "embeddingPurpose": "GENERIC_INDEX", "embeddingDimension": 3072, "text": {"truncationMode": "END", "value": "Hello, World!"}, }, } try: # Invoke the Nova Embeddings model. response = bedrock_runtime.invoke_model( body=json.dumps(request_body, indent=2), modelId="amazon.nova-2-multimodal-embeddings-v1:0", accept="application/json", contentType="application/json", ) except Exception as e: # Add your own exception handling here. print(e) # Print the request ID. print("Request ID:", response.get("ResponseMetadata").get("RequestId")) # Print the response body. response_body = json.loads(response.get("body").read()) print(json.dumps(response_body, indent=2))

La salida tendrá este aspecto:

Request ID: fde55db5-c129-423b-c62d-7a8b36cf2859 { "embeddings": [ { "embeddingType": "TEXT", "embedding": [ 0.031115104, 0.032478657, 0.10006265, ... ] } ] }

Cómo generar incrustaciones de forma asincrónica

En el caso de archivos de mayor contenido, puede utilizar la función StartAsyncInvoke de Bedrock Runtime para generar incrustaciones de forma asincrónica. Esto le permite enviar un trabajo y recuperar los resultados más adelante, sin bloquear la ejecución de la aplicación. Los resultados se almacenan en Amazon S3.

En el siguiente ejemplo se inicia una tarea de generación de incrustaciones asincrónicas para un archivo de video:

import boto3 # Create the Bedrock Runtime client. bedrock_runtime = boto3.client( service_name="bedrock-runtime", region_name="us-east-1", ) model_input = { "taskType": "SEGMENTED_EMBEDDING", "segmentedEmbeddingParams": { "embeddingPurpose": "GENERIC_INDEX", "embeddingDimension": 3072, "video": { "format": "mp4", "embeddingMode": "AUDIO_VIDEO_COMBINED", "source": { "s3Location": {"uri": "s3://amzn-s3-demo-bucket/path/to/video.mp4"} }, "segmentationConfig": { "durationSeconds": 15 # Segment into 15 second chunks }, }, }, } try: # Invoke the Nova Embeddings model. response = bedrock_runtime.start_async_invoke( modelId="amazon.nova-2-multimodal-embeddings-v1:0", modelInput=model_input, outputDataConfig={ "s3OutputDataConfig": { "s3Uri": "s3://amzn-s3-demo-bucket" } }, ) except Exception as e: # Add your own exception handling here. print(e) # Print the request ID. print("Request ID:", response.get("ResponseMetadata").get("RequestId")) # Print the invocation ARN. print("Invocation ARN:", response.get("invocationArn"))

La salida tendrá este aspecto:

Request ID: 07681e80-5ce0-4723-cf52-68bf699cd23e Invocation ARN: arn:aws:bedrock:us-east-1:111122223333:async-invoke/g7ur3b32a10n

Tras iniciar la tarea asincrónica, utilice el comando InvocationArn para comprobar el estado de la tarea con la función GetAsyncInvoke. Para ver las invocaciones asincrónicas recientes y su estado, utilice la función ListAsyncInvokes.

Cuando finalice la generación de incrustaciones asincrónicas, los artefactos se escribirán en el bucket de S3 que especificó como destino de salida. Los archivos tendrán la estructura siguiente:

amzn-s3-demo-bucket/ job-id/ segmented-embedding-result.json embedding-audio.jsonl embedding-image.json embedding-text.jsonl embedding-video.jsonl manifest.json