Utilizzo di Embedding Nova - Amazon Nova

Utilizzo di Embedding Nova

Embedding multimodali Amazon Nova è un modello di embedding multimodale all’avanguardia per applicazioni RAG agentiche e di ricerca semantica. È il primo modello di embedding unificato che supporta testo, documenti, immagini, video e audio attraverso un unico modello, per consentire il recupero intermodale con la massima precisione. Embedding multimodali Nova mappa ciascuno di questi tipi di contenuto in uno spazio semantico unificato che consente agli sviluppatori di condurre operazioni vettoriali unimodali, intermodali e multimodali.

L’API Embedding Nova può essere usata in una varietà di applicazioni, come:

  • Recupero e raccomandazione di contenuti semantici: genera embedding per i tuoi contenuti, quindi usali per trovare articoli simili o fornire consigli personalizzati ai tuoi utenti.

  • Ricerca multimodale: combina gli embedding di diversi tipi di contenuto per abilitare potenti funzionalità di ricerca intermodale.

  • RAG: genera embedding da contenuti multimodali, come documenti con testo e immagini interleaved, per potenziare il flusso di lavoro di recupero per le applicazioni GenAI.

Caratteristiche chiave

  • Supporto per testo, immagini, immagini di documenti, video e audio in uno spazio semantico unificato. La lunghezza massima del contesto è di 8.000 token o 30 secondi di video e 30 secondi di audio.

  • API sincrone e asincrone: l’API supporta sia l’uso sincrono che asincrono.

  • Segmentazione di file di grandi dimensioni: l’API asincrona semplifica la gestione di input di grandi dimensioni fornendo una segmentazione integrata nell’API per testi lunghi, video e audio, controllata da parametri definiti dall’utente. Il modello genererà un singolo embedding per ogni segmento.

  • Video con audio: elaborazione simultanea di video e audio. L’API consente di specificare se si desidera un singolo embedding che rappresenti entrambe le modalità o due embedding separati che rappresentino rispettivamente il flusso video e audio.

  • Scopo dell’embedding: Embedding multimodali Nova consente di ottimizzare gli embedding in base all’applicazione downstream prevista. I casi d’uso supportati comprendono il recupero (RAG/Ricerca), la classificazione e il clustering. I valori specifici dipendono dall’applicazione (vedi le procedure consigliate).

  • Dimensioni: 4 dimensioni per bilanciare la precisione di embedding e il costo di archiviazione dei vettori: 3072; 1024; 384; 256.

  • Metodi di input: puoi passare il contenuto da incorporare specificando un URI S3 o in linea come codifica base64.

Come funziona Embedding multimodali Nova

  • Quando un contenuto viene passato attraverso gli embedding Nova, il modello converte quel contenuto in un formato numerico universale, denominato vettore. Un vettore è un insieme di valori numerici arbitrari che possono quindi essere usati per varie funzionalità di ricerca. Ai contenuti simili viene assegnato un vettore più ravvicinato rispetto ai contenuti meno simili. Ad esempio, a un contenuto che potrebbe essere descritto come “felice” viene assegnato un vettore più vicino a un vettore come “gioioso” invece che a uno come “tristezza”.

Prerequisiti

Per usare Embedding multimodali occorre quanto segue:

  • Python installato

  • AWS CLI installata

  • AWS CLI configurata con le credenziali di accesso per il tuo account AWS

  • Il modello Embedding multimodali Nova abilitato sul tuo account AWS

Con questi elementi abilitati, puoi eseguire richieste di embedding asincrone o sincrone.

Generare embedding in modo sincrono

Per elementi di contenuto più piccoli, puoi usare l’API Bedrock Runtime InvokeModel. È una buona opzione per generare rapidamente embedding per testo, immagini o brevi file audio/video.

Il seguente esempio genera un embedding sincrono per il testo “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))

L'output apparirà come segue:

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

Generare embedding in modo asincrono

Per file di contenuto più grandi, puoi usare la funzione Bedrock Runtime StartAsyncInvoke per generare embedding in modo asincrono. Ciò consente di inviare un processo e recuperare i risultati in un secondo momento, senza bloccare l’esecuzione dell’applicazione. I risultati vengono salvati in Amazon S3.

Il seguente esempio avvia un processo di generazione di embedding asincrono per un file 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"))

L'output apparirà come segue:

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

Dopo aver avviato il processo asincrono, usa invocationArn per controllare lo stato del processo con la funzione GetAsyncInvoke. Per visualizzare le invocazioni asincrone recenti e il relativo stato, usa la funzione ListAsyncInvokes.

Quando la generazione degli embedding asincroni è completa, gli artefatti vengono scritti nel bucket S3 specificato come destinazione dell’output. I file avranno la struttura seguente:

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