Como usar o Nova Embeddings - Amazon Nova

Como usar o Nova Embeddings

O Amazon Nova Multimodal Embeddings é um modelo de incorporação multimodal de última geração para aplicações de RAG e pesquisa semântica baseadas em agentes. É o primeiro modelo de incorporação unificado que suporta texto, documentos, imagens, vídeo e áudio por meio de um único modelo, para permitir a recuperação multimodal com maior precisão. O Nova Multimodal Embeddings mapeia cada um desses tipos de conteúdo em um espaço semântico unificado, permitindo que os desenvolvedores conduzam operações vetoriais unimodais, intermodais e multimodais.

A API do Nova Embeddings pode ser usada em uma variedade de aplicativos, como:

  • Recuperação e recomendação de conteúdo semântico: gere incorporações para seu conteúdo e use-as para encontrar itens semelhantes ou fornecer recomendações personalizadas aos seus usuários.

  • Pesquisa multimodal: combine incorporações de diferentes tipos de conteúdo para habilitar recursos poderosos de pesquisa multimodal.

  • RAG: gere incorporações a partir de conteúdo multimodal, como documentos com texto e imagens intercalados, para potencializar seu fluxo de trabalho de recuperação para aplicativos GenAI.

Recursos principais

  • Suporte para texto, imagem, imagem de documento, vídeo e áudio em um espaço semântico unificado. O comprimento máximo do contexto é de 8.000 tokens ou 30 segundos de vídeo e 30 segundos de áudio.

  • APIs síncronas e assíncronas: a API suporta o uso síncrono e assíncrono.

  • Segmentação de arquivos grandes: a API assíncrona facilita o trabalho com entradas grandes, fornecendo segmentação criada pela API para texto, vídeo e áudio longos, controlada por parâmetros definidos pelo usuário. O modelo gerará uma única incorporação para cada segmento.

  • Vídeo com áudio: processe vídeo com áudio simultaneamente. A API permite que você especifique se deseja uma única incorporação representando as duas modalidades ou duas incorporações separadas representando o fluxo de vídeo e áudio, respectivamente.

  • Propósito de incorporação: o Nova Multimodal Embeddings permite que você otimize suas incorporações dependendo da aplicação posterior pretendida. Os casos de uso compatíveis incluem recuperação (RAG/Pesquisa), classificação e clustering. Os valores específicos dependem da aplicação (consulte as melhores práticas).

  • Tamanhos das dimensões: 4 tamanhos de dimensão para equilibrar a precisão da incorporação e o custo de armazenamento do vetor: 3072; 1024; 384; 256.

  • Métodos de entrada: você pode passar o conteúdo para ser incorporado especificando um URI do S3 ou diretamente em uma codificação base64.

Como o Nova Multimodal Embeddings funciona

  • Quando um conteúdo é processado pelas incorporações do Nova, o modelo converte esse conteúdo em um formato numérico universal, conhecido como vetor. Um vetor é um conjunto de valores numéricos arbitrários que podem ser usados para várias funcionalidades de pesquisa. Conteúdos semelhantes recebem um vetor mais próximo do que conteúdos menos semelhantes. Por exemplo, um conteúdo que pode ser descrito como “feliz” recebe um vetor mais próximo de um vetor como “alegre” do que de um como “tristeza”.

Pré-requisitos

Para usar o Multimodal Embeddings, você precisa do seguinte:

  • Python instalado

  • A AWS CLI instalada

  • A AWS CLI configurada com credenciais de acesso para sua conta AWS

  • O modelo Nova Multimodal Embeddings habilitado em sua conta AWS

Com essas opções ativadas, você pode realizar solicitações de incorporação assíncrona ou síncrona.

Gerar incorporações de forma síncrona

Para itens de conteúdo menores, você pode usar a API Bedrock Runtime InvokeModel. Essa é uma boa opção para gerar rapidamente incorporações para texto, imagens ou arquivos curtos de áudio/vídeo.

O exemplo a seguir gera uma incorporação síncrona para o texto “Hello World!”

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))

A saída será semelhante a esta:

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

Gerar incorporações de forma assíncrona

Para arquivos de conteúdo maiores, você pode usar a função StartAsyncInvoke do Bedrock Runtime para gerar incorporações de forma assíncrona. Isso permite que você envie um trabalho e recupere os resultados posteriormente, sem bloquear a execução do aplicativo. Os resultados são salvos no Amazon S3.

O exemplo a seguir inicia um trabalho de geração de incorporação assíncrona para um arquivo de vídeo:

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"))

A saída será semelhante a esta:

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

Depois de iniciar o trabalho assíncrono, use o InvocationArn para verificar o status do trabalho com a função getAsyncInvoke. Para ver as invocações assíncronas recentes e seu status, use a função ListAsyncInvokes.

Quando a geração de incorporações assíncronas é concluída, os artefatos são gravados no bucket do S3 que você especificou como destino de saída. Os arquivos terão a seguinte estrutura:

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