Verwendung von Nova Embeddings
Amazon Nova Multimodal Embeddings ist ein hochmodernes multimodales Einbettungsmodell für agentenbasierte RAG- und semantische Suchanwendungen. Es handelt sich um das erste einheitliche Einbettungsmodell, das Text, Dokumente, Bilder, Videos und Audio über ein einziges Modell unterstützt, um eine modalitätsübergreifende Suche mit überragender Genauigkeit zu ermöglichen. Nova Multimodal Embeddings ordnet jeden dieser Inhaltstypen einem einheitlichen semantischen Raum zu, sodass Entwickler unimodale, modalübergreifende und multimodale Vektoroperationen durchführen können.
Die Nova-Embeddings-API kann in einer Vielzahl von Anwendungen genutzt werden, wie zum Beispiel:
-
Semantische Inhaltsabfrage und -empfehlung: Erstellen Sie Einbettungen für Ihre Inhalte und nutzen Sie diese, um ähnliche Elemente zu finden oder Ihren Benutzern personalisierte Empfehlungen zu geben.
-
Multimodale Suche: Kombinieren Sie Einbettungen aus verschiedenen Inhaltstypen, um leistungsstarke modalitätsübergreifende Suchfunktionen zu ermöglichen.
-
RAG: Generieren Sie Einbettungen aus multimodalen Inhalten wie Dokumenten mit verschachtelten Texten und Bildern, um Ihren Abruf-Workflow für GenAI-Anwendungen zu optimieren.
Wichtigste Funktionen
-
Support für Text, Bilder, Dokumentbilder, Videos und Audiodateien in einer einheitlichen semantischen Umgebung. Die maximale Kontextlänge beträgt 8 000 Token oder 30 Sekunden Video und 30 Sekunden Audio.
-
Synchrone und asynchrone APIs: Die API unterstützt sowohl synchrone als auch asynchrone Verwendung.
-
Segmentierung großer Dateien: Die asynchrone API erleichtert die Arbeit mit großen Eingaben, indem sie eine API-basierte Segmentierung für lange Texte, Videos und Audiodateien bereitstellt, die durch benutzerdefinierte Parameter gesteuert wird. Das Modell generiert für jedes Segment eine einzige Einbettung.
-
Video mit Audio: Video und Audio gleichzeitig verarbeiten. Die API ermöglicht es Ihnen, festzulegen, ob Sie eine einzige Einbettung wünschen, die beide Modalitäten repräsentiert, oder zwei separate Einbettungen, die jeweils den Video- und den Audiostream repräsentieren.
-
Zweck der Einbettung: Mit Nova Multimodal Embeddings können Sie Ihre Einbettungen entsprechend der beabsichtigten nachgelagerten Anwendung optimieren. Zu den unterstützten Anwendungsfällen gehören Abruf (RAG/Search), Klassifizierung und Clustering. Die spezifischen Werte hängen von der Anwendung ab (siehe bewährte Methoden).
-
Größen: Vier Größen zur Abwägung zwischen Einbettungsgenauigkeit und Vektorspeicherkosten: 3 072, 1 024, 384, 256.
-
Eingabemethoden: Sie können Inhalte entweder durch Angabe einer S3-URI oder inline als Base64-Kodierung zum Einbetten übergeben.
Wie Nova Multimodal Embeddings funktioniert
-
Wenn ein Inhalt durch Nova-Einbettungen geführt wird, wandelt das Modell diesen Inhalt in ein universelles numerisches Format um, das als Vektor bezeichnet wird. Ein Vektor ist ein Satz beliebiger numerischer Werte, der dann für verschiedene Suchfunktionen verwendet werden kann. Ähnlichem Inhalt wird ein näherer Vektor zugewiesen als weniger ähnlichen Inhalten. Beispielsweise wird Inhalten, die als „glücklich“ beschrieben werden könnten, ein Vektor zugewiesen, der einem Vektor wie „freudig“ näher kommt als einem Vektor wie „Traurigkeit“.
Voraussetzungen
Um multimodale Einbettungen zu verwenden, benötigen Sie Folgendes:
-
Python muss installiert sein
-
Die AWS-CLI wurde installiert
-
Die AWS-CLI wurde mit den Anmeldeinformationen für Ihr AWS-Konto konfiguriert
-
Das Modell Nova Multimodal Embeddings ist auf Ihrem AWS-Konto aktiviert
Ist dies gegeben, können Sie entweder asynchrone oder synchrone Einbettungsanforderungen ausführen.
Einbettungen synchron generieren
Für kleinere Inhaltselemente können Sie die Runtime-InvokeModel-API von Bedrock verwenden. Dies ist eine gute Option, um schnell Einbettungen für Text, Bilder oder kurze Audio-/Videodateien zu generieren.
Das folgende Beispiel generiert eine synchrone Einbettung für den Text „Hallo Welt!“
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))
Die Ausgabe sieht etwa wie folgt aus:
Request ID: fde55db5-c129-423b-c62d-7a8b36cf2859 { "embeddings": [ { "embeddingType": "TEXT", "embedding": [ 0.031115104, 0.032478657, 0.10006265, ... ] } ] }
Einbettungen asynchron generieren
Für umfangreichere Dateien können Sie die Funktion „Bedrock Runtime StartAsyncInvoke” verwenden, um Einbettungen asynchron zu generieren. So können Sie einen Auftrag übermitteln und die Ergebnisse später abrufen, ohne die Ausführung der Anwendung zu blockieren. Die Ergebnisse werden in Amazon S3 gespeichert.
Im folgenden Beispiel wird ein asynchroner Auftrag zur Generierung von Einbettungen für eine Videodatei gestartet:
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"))
Die Ausgabe sieht etwa wie folgt aus:
Request ID: 07681e80-5ce0-4723-cf52-68bf699cd23e Invocation ARN: arn:aws:bedrock:us-east-1:111122223333:async-invoke/g7ur3b32a10n
Nachdem Sie den asynchronen Auftrag gestartet haben, verwenden Sie den invocationArn, um den Auftragsstatus mit der Funktion „GetAsyncInvoke“ zu überprüfen. Verwenden Sie die Funktion „ListAsyncInvokes“, um die letzten asynchronen Aufrufe und ihren Status anzuzeigen.
Wenn die Generierung asynchroner Einbettungen abgeschlossen ist, werden Artefakte in den S3-Bucket geschrieben, den Sie als Ausgabeziel angegeben haben. Die Dateien haben die folgende Struktur:
amzn-s3-demo-bucket/job-id/ segmented-embedding-result.json embedding-audio.jsonl embedding-image.json embedding-text.jsonl embedding-video.jsonl manifest.json