Inserción de vectores en un índice vectorial - Amazon Simple Storage Service

Inserción de vectores en un índice vectorial

nota

Amazon S3 Vectors se encuentra en versión preliminar para Amazon Simple Storage Service y está sujeto a cambios.

Puede agregar vectores a un índice vectorial con la operación de la API PutVectors. Cada vector consta de una clave que identifica de forma única cada vector en un índice vectorial. Si coloca un vector con una clave que ya existe en el índice, se sobrescribirá por completo el vector existente, lo que hará que ya no se pueda buscar en el vector anterior. Para maximizar el rendimiento de escritura, se recomienda insertar vectores en lotes grandes, hasta el tamaño máximo de lote para PutVectors. Para obtener más información sobre el tamaño máximo de lote para PutVectors, que es el límite de vectores por llamada a la API PutVectors, consulte Restricciones y limitaciones. Además, puede asociar metadatos (por ejemplo, año, autor, género o ubicación) como pares clave-valor a cada vector. De forma predeterminada, todas las claves de metadatos asociadas a vectores son filtrables y se pueden utilizar como filtros en una consulta de similitud. Solo las claves de metadatos que se especifican como no filtrables durante la creación del índice vectorial se excluyen del filtrado. Los índices vectoriales de S3 admiten metadatos de tipo cadena, número, booleano y lista. Para obtener más información sobre el límite de tamaño total de metadatos por vector y el límite de tamaño de metadatos filtrables por vector, consulte Restricciones y limitaciones. Si el tamaño de los metadatos supera estos límites, la operación de la API PutVectors devolverá un error 400 Bad Request.

Antes de agregar datos vectoriales al índice vectorial con la operación de la API PutVectors, debe convertir los datos sin procesar en incrustaciones vectoriales, que son representaciones numéricas del contenido como matrices de números de punto flotante. Las incrustaciones vectoriales capturan el significado semántico del contenido, lo que habilita las búsquedas por similitud una vez que se almacenan en el índice vectorial a través de la operación PutVectors. Puede generar incrustaciones vectoriales a través de varios métodos, dependiendo del tipo de datos y del caso de uso. Estos métodos incluyen el uso de marcos de machine learning, bibliotecas de incrustaciones especializadas o servicios de AWS como Amazon Bedrock. Por ejemplo, si utiliza Amazon Bedrock, puede generar incrustaciones con la operación de la API InvokeModel y el modelo de incrustación que prefiera.

Además, Bases de conocimientos de Amazon Bedrock proporciona un flujo de trabajo RAG de extremo a extremo totalmente administrado en el que Amazon Bedrock obtiene automáticamente los datos del origen de datos de S3, convierte el contenido en bloques de texto, genera incrustaciones y las almacena en el índice vectorial. A continuación, puede consultar la base de conocimientos y generar respuestas basadas en fragmentos recuperados de los datos de origen.

Además, la herramienta de código abierto Amazon S3 Vectors Embed CLI proporciona una forma simplificada de generar incrustaciones y realizar búsquedas semánticas desde la línea de comandos. Para obtener más información sobre esta herramienta de código abierto que automatiza tanto la generación de incrustaciones vectoriales con los modelos fundacionales de Amazon Bedrock como las operaciones de búsqueda semántica en los índices vectoriales de S3, consulte Creación de incrustaciones vectoriales y realización de búsquedas semánticas con s3vectors-embed-cli.

nota

Al insertar datos vectoriales en el índice vectorial, debe proporcionar los datos vectoriales como valores float32 (punto flotante de 32 bits). Si pasa valores de mayor precisión a un SDK de AWS, S3 Vectors convierte los valores a punto flotante de 32 bits antes de almacenarlos y las operaciones GetVectors, ListVectors y QueryVectors devuelven los valores float32. Los distintos SDK AWS de pueden tener diferentes tipos numéricos predeterminados, por lo que debe asegurarse de que los vectores tengan el formato correcto de valores float32 independientemente del SDK que esté utilizando. Por ejemplo, en Python, utilice numpy.float32 o convierta explícitamente los valores.

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