Einfügen von Vektoren in einen Vektorindex - Amazon Simple Storage Service

Einfügen von Vektoren in einen Vektorindex

Anmerkung

Amazon S3 Vectors befindet sich in der Vorabversion für Amazon Simple Storage Service und unterliegt noch Änderungen.

Mit der PutVectors-API-Operation können Sie einem Vektorindex Vektoren hinzufügen. Jeder Vektor besteht aus einem Schlüssel, der jeden Vektor in einem Vektorindex eindeutig identifiziert. Wenn Sie einen Vektor mit einem Schlüssel verknüpfen, der bereits im Index vorhanden ist, überschreibt er den vorhandenen Vektor vollständig, sodass der vorherige Vektor nicht mehr durchsuchbar ist. Zur Maximierung des Schreib-Durchsatzes wird empfohlen, Vektoren in großen Stapeln einzufügen, bis zur maximalen Stapelgröße für PutVectors. Weitere Informationen zur maximalen Batchgröße für PutVectors, die die Obergrenze für Vektoren pro PutVectors-API-Aufruf darstellt, finden Sie unter Begrenzungen und Einschränkungen. Darüber hinaus können Sie jedem Vektor Metadaten (z. B. Jahr, Autor, Genre, Ort) als Schlüssel-Wert-Paare hinzufügen. Standardmäßig sind alle Metadatenschlüssel, die an Vektoren angehängt sind, filterbar und können als Filter in einer Ähnlichkeitsabfrage verwendet werden. Nur Metadatenschlüssel, die bei der Erstellung des Vektorindexes als nicht filterbar angegeben wurden, werden von der Filterung ausgeschlossen. S3-Vektorindizes unterstützen Metadaten vom Typ Zeichenfolge, Zahl, Boolescher Wert und Liste. Weitere Informationen zur maximalen Gesamtgröße der Metadaten pro Vektor und zur maximalen Größe der filterbaren Metadaten pro Vektor finden Sie unter Begrenzungen und Einschränkungen. Wenn die Metadatengröße diese Grenzwerte überschreitet, gibt der PutVectors API-Vorgang einen 400 Bad Request Fehler zurück.

Bevor Sie Ihrem Vektorindex mithilfe der PutVectors API-Operation Vektordaten hinzufügen, müssen Sie Ihre Rohdaten in Vektoreinbettungen konvertieren. Dabei handelt es sich um numerische Darstellungen Ihres Inhalts als Arrays von Gleitkommazahlen. Die Vektoreinbettungen erfassen die semantische Bedeutung Ihrer Inhalte und ermöglichen Ähnlichkeitssuchen, sobald sie durch den PutVectors-Vorgang in Ihrem Vektorindex gespeichert sind. Sie können Vektoreinbettungen je nach Datentyp und Anwendungsfall mit verschiedenen Methoden generieren. Diese Methoden umfassen den Einsatz von Frameworks für Machine Learning, spezialisierten Einbettungsbibliotheken oder AWS-Services wie Amazon Bedrock. Wenn Sie beispielsweise Amazon Bedrock verwenden, können Sie Einbettungen mit der InvokeModel-API-Operation und Ihrem bevorzugten Einbettungsmodell generieren.

Darüber hinaus bietet Amazon Bedrock Knowledge Bases einen vollständig verwalteten End-to-End-RAG-Workflow, bei dem Amazon Bedrock automatisch Daten aus Ihrer S3-Datenquelle abruft, Inhalte in Textblöcke konvertiert, Einbettungen generiert und sie in Ihrem Vektorindex speichert. Anschließend können Sie die Wissensdatenbank abfragen und Antworten auf der Grundlage von Blöcken generieren, die aus Ihren Quelldaten abgerufen wurden.

Darüber hinaus bietet das Open-Source-CLI-Tool Amazon S3 Vectors Embed eine vereinfachte Möglichkeit, Einbettungen zu generieren und semantische Suchen von der Befehlszeile aus durchzuführen. Weitere Informationen zu diesem Open-Source-Tool, das sowohl die Generierung von Vektor-Einbettungen mit Amazon-Bedrock-Basismodellen als auch semantische Suchvorgänge innerhalb Ihrer S3-Vektorindizes automatisiert, finden Sie unter Vektoreinbettungen erstellen und semantische Suchen durchführen mit s3vectors-embed-cli.

Anmerkung

Wenn Sie Vektordaten in Ihren Vektorindex einfügen, müssen Sie die Vektordaten als float32 (32-Bit-Gleitkomma-) Werte angeben. Wenn Sie Werte mit höherer Genauigkeit an ein AWS SDK übergeben, konvertiert S3 Vectors die Werte vor der Speicherung in 32-Bit-Gleitkommazahlen, und die Operationen GetVectors, ListVectors und QueryVectors geben die float32-Werte zurück. Verschiedene AWS SDKs können unterschiedliche numerische Standardtypen haben. Stellen Sie daher sicher, dass Ihre Vektoren korrekt als float32 Werte formatiert sind, unabhängig davon, welches SDK Sie verwenden. Verwenden Sie beispielsweise in Python numpy.float32 oder wandeln Sie Ihre Werte explizit um.

SDK for Python
# Populate a vector index with embeddings from Amazon Titan Text Embeddings V2. import boto3 import json # Create Bedrock Runtime and S3 Vectors clients in the AWS Region of your choice. bedrock = boto3.client("bedrock-runtime", region_name="us-west-2") s3vectors = boto3.client("s3vectors", region_name="us-west-2") # Texts to convert to embeddings. texts = [ "Star Wars: A farm boy joins rebels to fight an evil empire in space", "Jurassic Park: Scientists create dinosaurs in a theme park that goes wrong", "Finding Nemo: A father fish searches the ocean to find his lost son" ] # Generate vector embeddings. embeddings = [] for text in texts: response = bedrock.invoke_model( modelId="amazon.titan-embed-text-v2:0", body=json.dumps({"inputText": text}) ) # Extract embedding from response. response_body = json.loads(response["body"].read()) embeddings.append(response_body["embedding"]) # Write embeddings into vector index with metadata. s3vectors.put_vectors( vectorBucketName="media-embeddings", indexName="movies", vectors=[ { "key": "Star Wars", "data": {"float32": embeddings[0]}, "metadata": {"source_text": texts[0], "genre":"scifi"} }, { "key": "Jurassic Park", "data": {"float32": embeddings[1]}, "metadata": {"source_text": texts[1], "genre":"scifi"} }, { "key": "Finding Nemo", "data": {"float32": embeddings[2]}, "metadata": {"source_text": texts[2], "genre":"family"} } ] )