Tutorial: conceitos básicos sobre o S3 Vectors
nota
O Amazon S3 Vectors está na versão prévia para o Amazon Simple Storage Service e está sujeito a alterações.
Neste tutorial, você cria um bucket de vetores e um índice de vetores do S3 em uma Região da AWS por meio do console do Amazon S3. Em seguida, você usa um modelo de incorporação do Amazon Bedrock para gerar incorporações de vetores de seus dados, armazená-las no índice de vetores e realizar pesquisas semânticas.
Para começar, cadastre-se em uma conta da AWS, se ainda não tiver uma. Para ter mais informações sobre como criar uma conta, consulte Conceitos básicos do Amazon S3.
Tópicos
Etapa 2: criar um índice de vetores em um bucket de vetores com o console
Etapa 3: inserir vetores em um índice de vetores com o SDK para Python (Boto3)
Etapa 4: inserir vetores em um índice de vetores com o SDK para Python (Boto3)
(Opcional) Automatizar a criação de incorporações de vetores com a S3 Vectors Embed CLI
(Opcional) Integrar o S3 Vectors às Bases de Conhecimento do Amazon Bedrock
Etapa 1: criar um bucket de vetores com o console
Os buckets de vetores do S3 são um tipo de bucket do Amazon S3 criado especificamente para armazenar e consultar vetores. Você usa operações de API dedicadas para gravar e consultar dados vetoriais. É possível controlar o acesso aos dados vetoriais com mecanismos de controle de acesso, como políticas baseadas em identidade do IAM e políticas baseadas em recursos.
Nesta etapa, use o console do Amazon S3 para criar seu primeiro bucket de vetores. Para ver outras maneiras de criar um bucket de vetores, consulte Criar um bucket de vetores.
Como criar um bucket de vetores
Faça login no AWS Management Console e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/
. -
No painel de navegação à esquerda, escolha Buckets de vetores.
-
Na página Buckets de vetores, escolha Criar bucket de vetores.
-
Na página Criar bucket de vetores, no campo Nome do bucket de vetores, insira um nome. Neste tutorial, usamos
incorporações de mídia
como nome do bucket de vetores. Os nomes de bucket de vetores devem ter de 3 a 63 caracteres e ser exclusivos em uma Região da AWS. Os caracteres válidos são letras minúsculas (a-z), números (0-9) e hifens (-).nota
Após a criação do bucket, não é possível alterar o respectivo nome.
-
Em Criptografia, escolha Especificar tipo de criptografia. Você tem a opção de especificar o tipo de criptografia como criptografia do lado do servidor com chaves do AWS Key Management Service (SSE-KMS) ou a criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3) padrão. Neste tutorial, escolhemos a criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3). Para ter mais informações sobre como definir a configuração de criptografia para buckets de vetores, consulte Proteção e criptografia de dados no S3 Vectors.
nota
Não é possível alterar o tipo de criptografia após a criação do bucket de vetores.
-
Escolha Criar bucket de vetores.
Etapa 2: criar um índice de vetores em um bucket de vetores com o console
nota
Escolha cuidadosamente os parâmetros de configuração do índice de vetores. Após a criação de um índice de vetores, não é possível atualizar o respectivo nome, dimensão, métrica de distância ou chaves de metadados não filtráveis. Para alterar qualquer um desses valores, você deve criar outro índice de vetores.
Nesta etapa, você criará um índice de vetores no bucket de vetores. O índice de vetores é usado para armazenar e consultar incorporações de vetores. Para ter mais informações sobre índices de vetores, consulte Índices de vetores.
Como criar um índice de vetores
-
Navegue até o bucket de vetores recém-criado na lista Buckets de vetores no console do Amazon S3.
-
Escolha Criar índice de vetores.
-
Na página Criar índice de vetores, insira um nome no campo Nome do índice de vetores. Neste tutorial, usamos
filmes
como nome do índice de vetores.Os nomes de índice de vetores devem ter entre 3 e 63 caracteres e ser exclusivos dentro desse bucket de vetores. Os caracteres válidos são letras minúsculas (a-z), números (0-9), hifens (-) e pontos (.).
Após a criação do nome do índice de vetores, não é possível alterar o respectivo nome.
-
Em Dimensão, especifique um valor numérico entre 1 e 4096 para determinar quantos números estarão em cada vetor gerado pelo modelo de incorporação de vetores. Modelos de incorporação são modelos especializados de machine learning (ML) que convertem dados (como textos ou imagens) em vetores numéricos. Eles normalmente produzem saídas de 500 a 2 mil dimensões, em que cada dimensão é um número de ponto flutuante. Neste tutorial, usaremos o modelo Incorporador de Texto do Titan V2 do Amazon Bedrock. Como esse modelo de incorporação usa vetores de 1.024 dimensões como padrão, definiremos a dimensão do índice de vetores como
1024
.O valor da dimensão não poderá ser alterado após a criação do índice. Especifique cuidadosamente o valor da dimensão com base nas recomendações do seu modelo de incorporação.
-
Em Métrica de distância, escolha Cosseno (que mede a similaridade angular) ou Euclidiano (que mede a distância em linha reta) como a métrica de distância para definir como a similaridade entre vetores é calculada durante as consultas. Neste tutorial, escolhemos Cosseno.
A métrica de distância não poderá ser alterada após a criação do índice. Escolha cuidadosamente a métrica de distância com base nas recomendações do seu modelo de incorporação.
-
Em Configurações adicionais (opcional), você pode especificar chaves de metadados não filtráveis para armazenar informações complementares com as incorporações de vetores.
nota
Após a criação do índice, você pode anexar metadados filtráveis como pares de chave-valor a cada vetor ao inserir dados vetoriais. Por padrão, todas as chaves de metadados anexadas aos vetores são filtráveis e podem ser usadas como filtros em uma consulta de similaridade. Somente as chaves de metadados especificadas como não filtráveis durante a criação do índice de vetores são excluídas da filtragem.
Cada chave de metadados não filtráveis deve ter entre 1 e 63 caracteres e ser exclusiva no índice de vetores. Essas chaves são úteis para armazenar informações de referência que você não precisa filtrar durante consultas de similaridade. Por exemplo, ao trabalhar com incorporações de texto, é recomendável preservar os trechos do texto original para fins de referência. Neste tutorial, adicionamos uma chave de metadados não filtráveis denominada
source_text
para armazenar os dados textuais para os quais queremos criar incorporações de vetores.Não é possível atualizar chaves de metadados não filtráveis após a criação do índice. Planeje sua estrutura de metadados com cuidado.
-
Escolha Criar índice de vetores.
Verifique se seu novo índice de vetores aparece dentro do bucket.
Etapa 3: inserir vetores em um índice de vetores com o SDK para Python (Boto3)
Para inserir, listar e consultar vetores, use os SDKs da AWS, a AWS CLI ou a API REST do Amazon S3.
Esta etapa consiste em inserir incorporações de vetores no índice de vetores com a operação de API PutVectors.
Primeiro, você deve gerar incorporações de vetores usando o modelo de incorporação de sua preferência. Se você usa o Amazon Bedrock, gere incorporações utilizando a operação de API InvokeModel para especificar o modelo de incorporação de sua preferência. Para conhecer uma alternativa para gerar e inserir incorporações de vetores com um único comando, consulte (Opcional) Automatizar a criação de incorporações de vetores com a S3 Vectors Embed CLI.
O código de exemplo a seguir gera incorporações de vetores de 1.024 dimensões com o modelo Incorporador de Texto do Titan V2 do Amazon Bedrock usando o AWS SDK para Python (Boto3) e as armazena no índice de vetores usando a API PutVectors
. Com cada vetor, anexamos pares de chave-valor como metadados filtráveis. Além disso, usamos uma chave de metadados não filtráveis denominada source_text
para preservar o texto original do qual cada vetor é derivado. Para maximizar o throughput de solicitações e otimizar a velocidade e a eficiência, recomendamos que você insira e exclua vetores em lotes. Para obter mais informações, consulte Práticas recomendadas do 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"} } ] )
Etapa 4: inserir vetores em um índice de vetores com o SDK para Python (Boto3)
Depois de armazenar as incorporações de vetores no índice de vetores, você pode realizar uma pesquisa por similaridade usando a operação de API QueryVectors.
Primeiro, você deve gerar as incorporações de vetores de consulta usando o mesmo modelo de incorporação usado durante a inserção em Etapa 3: inserir vetores em um índice de vetores com o SDK para Python (Boto3). Neste tutorial, use o modelo Incorporador de Texto do Titan V2 do Amazon Bedrock por meio do SDK para Python (Boto3).
Você pode realizar uma pesquisa por similaridade para exibir os vetores que apresentam maior correspondência. Em uma pesquisa por similaridade, você pode, opcionalmente, usar chaves de metadados como filtro para restringir os resultados com base em critérios específicos e, ao mesmo tempo, manter a relevância 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) Automatizar a criação de incorporações de vetores com a S3 Vectors Embed CLI
A Amazon S3 Vectors Embed CLI é uma ferramenta de linha de comandos autônoma que simplifica o processo de trabalho com incorporações de vetores no S3 Vectors. Com comandos únicos, você pode criar incorporações de vetores para seus dados usando o Amazon Bedrock e armazená-las e consultá-las no índice de vetores do S3. Ela permite os seguintes comandos:
-
s3vectors-embed put
: gere incorporações de vetores de texto, conteúdo de arquivo ou objetos do S3 e armazene-as como vetores em um índice de vetores do S3. -
s3vectors-embed query
: incorpore uma entrada de consulta e pesquise vetores semelhantes em um índice de vetores do S3.
Para ter mais informações sobre os comandos e o uso, consulte o Repositório Amazon S3 Vectors Embed CLI do GitHub
(Opcional) Integrar o S3 Vectors às Bases de Conhecimento do Amazon Bedrock
As Base de Conhecimento do Amazon Bedrock se integram ao S3 Vectors para oferecer um armazenamento de conjuntos de dados vetoriais econômico e de longo prazo.
Pré-requisitos
Siga os pré-requisitos a fim de garantir que você tenha as permissões necessárias para criar uma base de conhecimento do Amazon Bedrock.
-
Você tem as permissões apropriadas do IAM para os serviços S3 Vectors e Amazon Bedrock. Para ter mais informações sobre permissões do IAM para S3 Vectors, consulte Gerenciamento de identidade e acesso no S3 Vectors.
-
Você tem os documentos de origem preparados para serem inseridos na base de conhecimento.
-
Você conhece os requisitos do seu modelo de incorporação.
Criar uma base de conhecimento do Amazon Bedrock com o S3 Vectors no console
As Bases de Conhecimento do Amazon Bedrock oferecem um fluxo de trabalho de RAG completo e totalmente gerenciado. Quando você cria uma base de conhecimento com o S3 Vectors, o Amazon Bedrock busca os dados automaticamente na fonte de dados do S3, converte conteúdo em blocos de texto e gera incorporações e as armazena em seu índice de vetores. Em seguida, você pode consultar a base de conhecimento e gerar respostas baseadas em partes recuperadas dos dados de origem.
Como criar uma base de conhecimento do Amazon Bedrock com o S3 Vectors no console
-
Faça login no AWS Management Console usando um perfil do IAM com as permissões do Amazon Bedrock e abra o console do Amazon Bedrock em https://console.aws.amazon.com/bedrock/
. -
No painel de navegação à esquerda, selecione Bases de conhecimento.
-
Na seção Bases de conhecimento, escolha Adicionar. Na lista suspensa, escolha Base de conhecimento com armazenamento vetorial.
-
Neste tutorial, mantenha os valores padrão em Nome da base de conhecimento, Descrição da base de conhecimento e Permissões do IAM.
-
Em Escolher um tipo de fonte de dados, escolha a fonte de dados à qual você conectará sua base de conhecimento. Neste tutorial, escolha Amazon S3.
-
(Opcionalmente) Forneça quaisquer tags ou logs de aplicação.
-
Escolha Próximo.
-
Neste tutorial, na página Configurar fonte de dados, mantenha as configurações padrão em Nome da fonte de dados, Localização da fonte de dados, Estratégia de análise e Estratégia de fragmentação.
-
Em URI do S3, insira o bucket de uso geral do S3 que contém seus arquivos de origem ou escolha Procurar no S3 e selecione o bucket de uso geral do S3.
-
Para dados criptografados do S3, selecione Adicionar chave do KMS gerenciada pelo cliente para dados do S3 e especifique sua chave do KMS gerenciada pelo cliente.
-
Selecione Próximo para prosseguir para a etapa seguinte, que especifica as opções Modelo de incorporação e Armazenamento de vetores.
-
Na seção Modelo de incorporação, escolha Selecionar modelo e selecione um modelo de incorporação que possa ser usado com o S3 Vectors. Você deve usar incorporações de ponto flutuante. Não é possível usar o tipo binário.
-
(Opcional) Expanda a seção Configurações adicionais para ver as seguintes opções de configuração (nem todos os modelos comportam todas as configurações):
-
Tipo de incorporação: se deseja converter os dados em incorporações de vetores de ponto flutuante (float32) (mais precisas, mas mais caras) ou incorporações de vetores binários (menos precisas, mas menos caras). Para fazer a integração com o S3 Vectors, você deve escolher Incorporações de vetores de ponto flutuante.
-
Dimensões vetoriais: escolha o tamanho de dimensão recomendado dos modelos de incorporação.
-
-
Na seção Armazenamento de vetores, escolha o método recomendado Criar rapidamente um novo armazenamento de vetores para configuração automática de um novo bucket de vetores ou escolha Usar um armazenamento vetorial existente para usar um bucket de vetores existente, se disponível. Para ter informações sobre o uso de um fluxo de armazenamento de vetores existente, consulte Prerequisites for using a vector store you created for a knowledge base no Guia do usuário do Amazon Bedrock.
-
Em Configurações adicionais: por padrão, o bucket de vetores usa a criptografia do lado do servidor com chaves gerenciadas pelo Amazon S3 (SSE-S3). Você pode optar por usar sua própria chave do KMS para a criptografia do lado do servidor com chaves do AWS Key Management Service (SSE-KMS) para ter maior controle sobre as configurações de criptografia.
-
Escolha Próximo para analisar os detalhes da base de conhecimento e, em seguida, escolha Criar base de conhecimento.
nota
O tempo necessário para criar uma base de conhecimento depende de suas configurações específicas. Quando a criação da base de conhecimento é concluída, o respectivo status muda para o estado pronto ou disponível. Quando a base de conhecimento estiver pronta e disponível, sincronize a fonte de dados pela primeira vez ou sempre que quiser manter o conteúdo atualizado. Para sincronizar sua fonte de dados, escolha a base de conhecimento no console e selecione Sincronizar na seção de visão geral da fonte de dados.
(Opcional) Integrar o S3 Vector ao Amazon OpenSearch
O Amazon OpenSearch Service
Para obter mais informações, consulte Usar o S3 Vectors com o OpenSearch Service.