

# Inserir vetores em um índice de vetores
<a name="s3-vectors-index-create"></a>

Você pode adicionar vetores a um índice de vetores com a operação de API [PutVectors](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_PutVectors.html). Cada vetor consiste em uma chave, que identifica exclusivamente cada vetor em um índice de vetores. Se você colocar um vetor com uma chave que já existe no índice, ele substituirá completamente o vetor existente, o que faz com que o vetor anterior não possa mais ser pesquisado. Para maximizar o throughput de gravação e otimizar os custos, é recomendável inserir vetores em lotes grandes, até o tamanho máximo do lote para `PutVectors`. No entanto, para workloads que precisam usar lotes menores (por exemplo, quando é necessário tornar os dados vetoriais de entrada em tempo real imediatamente pesquisáveis), é possível obter um throughput de gravação mais alto usando um número maior de solicitações `PutVectors` simultâneas, até o limite máximo permitido de solicitações por segundo. Para ter mais informações sobre o tamanho máximo do lote para `PutVectors`, que é o limite de vetores por chamada de API `PutVectors`, e o limite máximo de solicitações e vetores por segundo, consulte [Limitações e restrições](s3-vectors-limitations.md). Além disso, você pode anexar metadados (por exemplo, ano, autor, gênero e localização) como pares de chave-valor a cada vetor. 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. Os índices de vetores do S3 permitem os tipos de metadados de string, número, booliano e lista. Para ter mais informações sobre o limite total de tamanho de metadados por vetor e o limite de tamanho de metadados filtráveis por vetor, consulte [Limitações e restrições](s3-vectors-limitations.md). Se o tamanho dos metadados ultrapassar esses limites, a operação de API `PutVectors` exibirá o erro `400 Bad Request`.

Antes de adicionar dados vetoriais ao índice de vetores com a operação de API `PutVectors`, você precisa converter seus dados brutos em incorporações de vetores, que são representações numéricas do conteúdo como matrizes de números de ponto flutuante. As incorporações de vetores capturam o significado semântico do conteúdo, permitindo pesquisas por similaridade quando elas são armazenadas no índice de vetores por meio da operação `PutVectors`. Você pode gerar incorporações de vetores usando vários métodos, dependendo do tipo de dados e do caso de uso. Esses métodos incluem o uso de frameworks de machine learning, bibliotecas de incorporações especializadas ou serviços da AWS, como o Amazon Bedrock. Por exemplo, se você estiver usando o Amazon Bedrock, poderá gerar incorporações com a operação de API [InvokeModel](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html) e o modelo de incorporação de sua preferência.

Além disso, as Bases de Conhecimento do Amazon Bedrock oferecem um fluxo de trabalho de RAG completo e totalmente gerenciado, no qual o Amazon Bedrock busca dados automaticamente na fonte de dados do S3, converte o conteúdo em blocos de texto e gera incorporações e as armazena no índice de vetores. Em seguida, você pode consultar a base de conhecimento e gerar respostas baseadas em partes recuperadas dos dados de origem.

Além disso, a ferramenta de código aberto Amazon S3 Vectors Embed CLI oferece uma maneira simplificada de gerar incorporações e realizar pesquisas semânticas por meio da linha de comandos. Para ter mais informações sobre essa ferramenta de código aberto que automatiza a geração de incorporações de vetores com os modelos de base do Amazon Bedrock e as operações de pesquisa semântica nos índices de vetores do S3, consulte [Criar incorporações de vetores e realizar pesquisas semânticas com a `s3vectors-embed-cli`](s3-vectors-cli.md).

**nota**  
Ao inserir dados vetoriais no índice de vetores, você deve fornecer os dados vetoriais como valores de `float32` (ponto flutuante de 32 bits). Se você passar valores de maior precisão para um SDK da AWS, o S3 Vectors os converterá em ponto flutuante de 32 bits antes de armazená-los, e as operações [GetVectors](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_GetVectors.html), [ListVectors](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_ListVectors.html) e [QueryVectors](https://docs.aws.amazon.com/AmazonS3/latest/API/API_S3VectorBuckets_QueryVectors.html) mostrarão os valores de `float32`. SDKs da AWS diferentes podem ter tipos numéricos padrão diferentes; portanto, formate seus vetores corretamente como valores de `float32`, independentemente do SDK que você estiver usando. Por exemplo, em Python, use `numpy.float32` ou converta explicitamente seus valores.

## Usar SDKs da AWS
<a name="s3-vectors-create-sdk"></a>

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

------