Tutorial: Introducción a S3 Vectors - Amazon Simple Storage Service

Tutorial: Introducción a S3 Vectors

nota

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

En este tutorial, creará un bucket vectorial y un índice vectorial de S3 en una Región de AWS en la consola de Amazon S3. A continuación, utilizará un modelo de incrustación de Amazon Bedrock para generar incrustaciones vectoriales de los datos y almacenarlos en el índice vectorial para realizar búsquedas semánticas.

Para empezar, debe inscribirse para obtener una cuenta de AWS si no dispone de una. Para obtener más información sobre cómo configurar una cuenta, consulte Introducción a Amazon S3.

Paso 1: creación de un bucket vectorial con la consola

Los buckets vectoriales de S3 son un tipo de bucket de Amazon S3 personalizado para almacenar y consultar vectores. Se utilizan operaciones de la API dedicadas para escribir y consultar datos vectoriales. Puede controlar el acceso a los datos vectoriales con mecanismos de control de acceso, como las políticas basadas en identidad de IAM y las políticas basadas en recursos.

En este paso, utilizará la consola de Amazon S3 para crear el primer bucket vectorial. Para conocer otras formas de crear un bucket vectorial, consulte Creación de un bucket vectorial.

Creación de un bucket vectorial

  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon S3 en https://console.aws.amazon.com/s3/.

  2. En el panel de navegación izquierdo, elija Buckets vectoriales.

  3. En la página Buckets vectoriales, elija Crear bucket vectorial.

  4. En la página Crear bucket vectorial, en el campo Nombre del bucket vectorial, introduzca un nombre. En este tutorial, utilizamos media-embeddings como nombre del bucket vectorial. Los nombres de los buckets vectoriales deben tener entre 3 y 63 caracteres y ser únicos dentro de una Región de AWS. Los caracteres válidos son letras minúsculas (a-z), números (0-9) y guiones (-).

    nota

    El nombre del bucket vectorial no se puede cambiar una vez creado.

  5. En Cifrado, elija Especificar tipo de cifrado. Tiene la opción de especificar el tipo de cifrado como Cifrado del servidor con claves de AWS Key Management Service (SSE-KMS) o el predeterminado Cifrado del servidor con claves administradas por Amazon S3 (SSE-S3). En este tutorial, hemos elegido Cifrado del servidor con claves administradas por Amazon S3 (SSE-S3). Para obtener más información sobre cómo establecer la configuración de cifrado para buckets vectoriales, consulte Protección y cifrado de datos en S3 Vectors.

    nota

    El tipo de cifrado no se puede cambiar después de crear el bucket vectorial.

  6. Elija Crear bucket vectorial.

Paso 2: creación de un índice vectorial en un bucket vectorial con la consola

nota

Elija con cuidado los parámetros de configuración del índice vectorial. Después de crear un índice vectorial, no puede actualizar el nombre, la dimensión, la métrica de distancia ni las claves de metadatos no filtrables del índice vectorial. Para cambiar cualquiera de estos valores, debe crear un nuevo índice vectorial.

En este paso, creará un índice vectorial en el bucket vectorial. El índice vectorial se utiliza para almacenar y consultar las incrustaciones vectoriales. Para obtener más información sobre los índices vectoriales, consulte Índices vectoriales.

Creación de un índice vectorial

  1. Navegue hasta el bucket vectorial recién creado en la lista Buckets vectoriales de la consola de Amazon S3.

  2. Elija Crear índice vectorial.

  3. En la página Crear índice vectorial, introduzca un nombre en el campo Nombre del índice vectorial. En este tutorial, utilizamos movies como nombre del índice vectorial.

    Los nombres de los índices vectoriales deben tener entre 3 y 63 caracteres y ser únicos dentro de este bucket vectorial. Los caracteres válidos son letras minúsculas (a-z), números (0-9), guiones (-) y puntos (.).

    El nombre del índice vectorial no se puede cambiar después de crearlo.

  4. En Dimensión, especifique un valor numérico entre 1 y 4096 que determine cuántos números habrá en cada vector generado por el modelo de incrustación vectorial. Los modelos de incrustación son modelos de machine learning (ML) especializados que convierten datos (como texto o imágenes) en vectores numéricos. Los modelos de incrustación suelen producir resultados de entre 500 y 2000 dimensiones, donde cada dimensión es un número de punto flotante. En este tutorial, utilizaremos el modelo de incrustación Titan Text v2 de Amazon Bedrock. Este modelo de incrustación utiliza vectores de 1024 dimensiones de forma predeterminada, por lo que estableceremos la dimensión para el índice vectorial en 1024.

    El valor de la dimensión no se puede cambiar después de crear el índice. Especifique cuidadosamente el valor de la dimensión según las recomendaciones del modelo de incrustación.

  5. En Métrica de distancia, elija Coseno (que mide la similitud angular) o Euclidiano (que mide la distancia en línea recta) como métrica de distancia para definir cómo se calcula la similitud entre vectores durante las consultas. En este tutorial, elegimos Coseno.

    La métrica de distancia no se puede cambiar después de crear el índice. Elija con cuidado la métrica de distancia basándose en las recomendaciones del modelo de incrustación.

  6. En Configuración adicional (opcional), puede especificar claves de metadatos no filtrables para almacenar información complementaria junto con las incrustaciones vectoriales.

    nota

    Puede asociar metadatos filtrables como pares clave-valor a cada vector al insertar datos vectoriales después de crear el índice. 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.

    Cada clave de metadatos no filtrables debe tener entre 1 y 63 caracteres y ser única en el índice vectorial. Estas claves son útiles para almacenar información de referencia que no necesita filtrar durante las consultas de similitud. Por ejemplo, al trabajar con incrustaciones de texto, es posible que desee conservar los fragmentos de texto originales para fines de referencia. En este tutorial, agregamos una clave de metadatos no filtrables denominada source_text para almacenar los datos de texto para los que queremos crear incrustaciones vectoriales.

    No puede actualizar las claves de metadatos no filtrables después de crear el índice. Planifique cuidadosamente la estructura de los metadatos.

  7. Elija Crear índice vectorial.

Verifique que el nuevo índice vectorial aparece dentro del bucket.

Paso 3: inserción de vectores en un índice vectorial con el SDK para Python (Boto3)

Para insertar, enumerar y consultar vectores, utilice los SDK de AWS, la AWS CLI o la API de REST de Amazon S3.

Este paso consiste en insertar incrustaciones vectoriales en el índice vectorial con la operación de la API PutVectors.

Primero debe generar incrustaciones vectoriales con el modelo de incrustación que prefiera. Si utiliza Amazon Bedrock, genere las incrustaciones con la operación de la API InvokeModel para especificar el modelo de incrustación que prefiera. De forma alternativa, para generar e insertar incrustaciones vectoriales con un solo comando, consulte (Opcional) Automatización de la creación de incrustaciones vectoriales con S3 Vectors Embed CLI.

En el siguiente ejemplo de código se generan incrustaciones vectoriales de 1024 dimensiones con el modelo Titan Text Embeddings V2 de Amazon Bedrock mediante AWS SDK para Python (Boto3) y se almacenan en el índice vectorial mediante la API PutVectors. Junto con cada vector, asociamos pares clave-valor como metadatos filtrables. Además, utilizamos una clave de metadatos no filtrables denominada source_text para conservar el texto original del que se deriva cada vector. Para maximizar el rendimiento de las solicitudes y optimizar la velocidad y la eficiencia, le recomendamos que inserte y elimine vectores en lotes. Para obtener más información, consulte Prácticas recomendadas de S3 Vectors.

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

Paso 4. Consulta de vectores en un índice vectorial con el SDK para Python (Boto3)

Después de almacenar las incrustaciones vectoriales en el índice vectorial, puede realizar una búsqueda por similitud mediante la operación de la API QueryVectors.

Primero debe generar las incrustaciones vectoriales de consulta con el mismo modelo de incrustación que se utiliza durante la inserción en Paso 3: inserción de vectores en un índice vectorial con el SDK para Python (Boto3). En este tutorial, utilice el modelo Titan Text Embeddings V2 de Amazon Bedrock a través del SDK para Python (Boto3).

Puede realizar una búsqueda por similitud para devolver los vectores con la coincidencia más cercana. En una búsqueda por similitud, puede filtrar opcionalmente mediante claves de metadatos para limitar los resultados en función de criterios específicos, al mismo tiempo que se mantiene la pertinencia semántica.

# Query a vector index with an embedding 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") # Query text to convert to an embedding. input_text = "adventures in space" # Generate the vector embedding. response = bedrock.invoke_model( modelId="amazon.titan-embed-text-v2:0", body=json.dumps({"inputText": input_text}) ) # Extract embedding from response. model_response = json.loads(response["body"].read()) embedding = model_response["embedding"] # Query vector index. response = s3vectors.query_vectors( vectorBucketName="media-embeddings", indexName="movies", queryVector={"float32": embedding}, topK=3, returnDistance=True, returnMetadata=True ) print(json.dumps(response["vectors"], indent=2)) # Query vector index with a metadata filter. response = s3vectors.query_vectors( vectorBucketName="media-embeddings", indexName="movies", queryVector={"float32": embedding}, topK=3, filter={"genre": "scifi"}, returnDistance=True, returnMetadata=True ) print(json.dumps(response["vectors"], indent=2))

(Opcional) Automatización de la creación de incrustaciones vectoriales con S3 Vectors Embed CLI

Amazon S3 Vectors Embed CLI es una herramienta de la línea de comandos independiente que simplifica el proceso de trabajo con incrustaciones vectoriales en S3 Vectors. Con comandos únicos, puede crear incrustaciones vectoriales para los datos mediante Amazon Bedrock y almacenarlas y consultarlas en el índice vectorial de S3. La herramienta admite los siguientes comandos:

  • s3vectors-embed put: genera incrustaciones vectoriales de texto, contenido de archivos u objetos de S3 y los almacena como vectores en un índice vectorial de S3.

  • s3vectors-embed query: incrusta una entrada de consulta y busca vectores similares en un índice vectorial de S3.

Para obtener más información sobre los comandos y su uso, consulte el repositorio de GitHub de Amazon S3 Vectors Embed CLI.

(Opcional) Integración de S3 Vectors con Bases de conocimientos de Amazon Bedrock

Bases de conocimientos de Amazon Bedrock se integra con S3 Vectors para ofrecer un almacenamiento económico y a largo plazo de conjuntos de datos vectoriales.

Requisitos previos

Siga los requisitos previos para asegurarse de que tiene los permisos necesarios para crear una base de conocimientos de Amazon Bedrock.

  • Permisos de IAM adecuados tanto para S3 Vectors como para los servicios de Amazon Bedrock. Para obtener más información sobre los permisos de IAM para S3 Vectors, consulte Administración de identidades y accesos en S3 Vectors.

  • Los documentos de origen preparados para la ingesta en la base de conocimientos.

  • Comprensión de los requisitos del modelo de incrustación.

Creación de una base de conocimientos de Amazon Bedrock con S3 Vectors en la consola

Bases de conocimientos de Amazon Bedrock proporciona un flujo de trabajo RAG de extremo a extremo totalmente administrado. Cuando crea una base de conocimiento con S3 Vectors, Amazon Bedrock recupera 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.

Creación de una base de conocimientos de Amazon Bedrock con S3 Vectors en la consola
  1. Inicie sesión en la AWS Management Console con un rol de IAM con los permisos de Amazon Bedrock y abra la consola de Amazon Bedrock en https://console.aws.amazon.com/bedrock/.

  2. En el panel de navegación izquierdo, elija Bases de conocimientos.

  3. En la sección Bases de conocimientos, elija Crear. En la lista desplegable, elija Base de conocimientos con almacén vectorial.

  4. Mantenga el nombre de la base de conocimientos, la descripción de la base de conocimientos y los permisos de IAM en los valores predeterminados en este tutorial.

  5. En Elegir un tipo de origen de datos, elija el origen de datos al que desea conectar la base de conocimientos. En este tutorial, elija Amazon S3.

  6. (Opcional) Proporcione Etiquetas o Registros de aplicación.

  7. Elija Siguiente.

  8. En la página Configurar origen de datos, mantenga el nombre del origen de datos, la ubicación del origen de datos, la estrategia de análisis y la estrategia de fragmentación en la configuración predeterminada de este tutorial.

  9. En URI de S3, introduzca el bucket de uso general de S3 que contiene los archivos de origen o seleccione Examinar S3 y elija el bucket de uso general de S3.

  10. Para los datos de S3 cifrados, seleccione Agregar clave de KMS administrada por el cliente para datos de S3 y especifique la clave de KMS administrada por el cliente.

  11. Elija Siguiente para continuar con el siguiente paso, en el que se especifican las opciones Modelo de incrustación y Almacén vectorial.

  12. En la sección Modelo de incrustación, elija Seleccionar modelo y elija un modelo de incrustación compatible con S3 Vectors. Debe utilizar incrustaciones de punto flotante. No se admite el tipo binario.

  13. (Opcional) Expanda la sección Configuraciones adicionales para ver las siguientes opciones de configuración (no todos los modelos admiten todas las configuraciones):

    • Tipo de incrustaciones: si desea convertir los datos en incrustaciones vectoriales de punto flotante (float32) (más precisas, pero más costosas) o incrustaciones vectoriales binarias (menos precisas, pero menos costosas). Para la integración con S3 Vectors, debe elegir Incrustaciones vectoriales de punto flotante.

    • Dimensiones vectoriales: elija el tamaño de dimensión recomendado para los modelos de incrustación.

  14. En la sección Almacén vectorial, elija el método recomendado Crear rápidamente un nuevo almacén vectorial para configurar automáticamente un nuevo bucket vectorial o elija Usar un almacén vectorial existente para utilizar un bucket vectorial existente, si está disponible. Para obtener información sobre cómo utilizar un flujo de almacén vectorial existente, consulte Requisitos previos para utilizar un almacén vectorial creado para una base de conocimientos en la Guía del usuario de Amazon Bedrock.

  15. Para Configuraciones adicionales: de manera predeterminada, el bucket vectorial usa el cifrado del servidor con las claves administradas por Amazon S3 (SSE-S3). Puede decidir si utiliza una clave de KMS propia para el cifrado del servidor con las claves del servicio de administración de claves (SSE-KMS) de AWS para obtener un control mejorado sobre la configuración del cifrado.

  16. Elija Siguiente para revisar los detalles de la base de conocimientos y, a continuación, seleccione Crear base de conocimientos.

nota

El tiempo que tarde en crearse una base de conocimientos dependerá de las configuraciones específicas. Cuando se completa la creación de una base de conocimientos, el estado de esta cambia para indicar que está lista o disponible. Cuando la base de conocimientos esté lista y disponible, sincronice el origen de datos por primera vez o siempre que desee mantener el contenido actualizado. Para sincronizar el origen de datos, elija la base de conocimientos en la consola y seleccione Sincronizar en la sección de información general del origen de datos.

(Opcional) Integración de S3 Vectors con Amazon OpenSearch

Amazon OpenSearch Service es un servicio totalmente administrado que simplifica la implementación, el escalado y la operación de OpenSearch en la nube de AWS. Hay dos integraciones entre S3 Vectors y OpenSearch. Una es exportar datos vectoriales desde S3 Vectors a OpenSearch sin servidor para obtener capacidades de búsqueda de alto rendimiento. La otra utiliza S3 Vectors como un motor de almacenamiento económico en OpenSearch, al mismo tiempo que mantiene el acceso a la funcionalidad de OpenSearch.

Para obtener más información, consulte Uso de S3 Vectors con OpenSearch Service.