Pular para o conteúdo
fernando.moretes.com
BlogEstudosCursosE-booksOpen SourcePodcasts
Loading…
Fernando Azevedo

Arquiteto de TI Especialista

Arquitetura, AWS, IA em produção, sistemas financeiros e FinOps, escritos a partir do que foi operado, com os números.

  • LinkedIn
  • GitHub
  • E-mail

Conteúdo

  • Blog
  • Estudos de arquitetura
  • Cursos
  • E-books
  • Open Source
  • Podcasts
  • Assuntos
  • Trilhas

Ferramentas

  • Well-Architected self-check
  • Arquitetura deste site
  • Números públicos
  • Histórico de estudo

Sobre

  • Comunidade
  • IA Builder
  • Perfil
  • Currículo (CV)
  • Trabalhe comigo
  • Media kit
  • RSS do blog
  • RSS dos estudos
  • Artigos narrados (podcast)
  • llms.txt
  • Termos, privacidade e uso de IA

(c) 2026 Fernando Francisco Azevedo

RAG de Produção na AWS/Embeddings e busca vetorial
Módulo 1 · Fundamentos· Aula 02/12

Embeddings e busca vetorial

Como significado vira vetor, similaridade por cosseno e o que é um vector store.

5 min de leitura

Escolha como aprender

combine como quiser

Dica: o vídeo é um resumo visual rápido; o áudio e o texto trazem a aula completa. Terminar o áudio ou o vídeo, ou passar no quiz, já conta a aula como concluída.

Assista a esta aula
Narrado por Fernando AzevedoMP4PDF
Ouça esta aula
0:0010:09
Velocidade
Baixar

Antes de montar qualquer pipeline RAG, você precisa entender o que acontece quando um texto vira um vetor, porque é essa transformação que torna possível buscar por significado, não apenas por palavras. Nesta aula você vai entender embeddings, similaridade por cosseno, índices vetoriais e como escolher o modelo de embedding certo para o seu caso.

O que é um embedding, de verdade

Um modelo de linguagem não entende texto como string, ele entende texto como posição num espaço de alta dimensão. Um embedding é exatamente isso: uma lista de números (o vetor) que representa onde aquele texto "mora" nesse espaço.

A propriedade mais importante: textos com significado parecido ficam próximos no espaço. "Cancelar assinatura" e "encerrar plano" vão parar perto um do outro. "Cancelar assinatura" e "receita de bolo" ficam distantes. Isso não é magia, é o resultado de treinar o modelo em bilhões de exemplos onde essas relações aparecem juntas.

Pense assim: imagine que cada documento é uma estrela no céu. O modelo de embedding é o telescópio que projeta o significado de cada texto em coordenadas. Quando você busca algo, você está perguntando "quais estrelas estão mais perto das coordenadas da minha pergunta?"

Essa representação carrega contexto semântico que busca por palavra-chave jamais captura. É por isso que RAG funciona onde CTRL+F falha: você encontra o trecho certo mesmo que ele use vocabulário completamente diferente da sua query.

Fluxo: texto → embedding → índice → busca

Como um texto percorre o pipeline de embedding até virar um resultado de busca

📄 Entrada: Documentos e Query
  • Documento · (chunk de texto)
  • Query do usuário · (pergunta)
🤖 AI: Modelo de Embedding
  • Embedding Model · Titan / Cohere
🗄️ Armazenamento: Vector Store
  • Índice Vetorial · ANN index
  • Metadados · source, date, id
🔍 Busca: Recuperação
  • Similaridade · por cosseno
  • Top-K chunks · resultados

Similaridade por cosseno e o índice vetorial

Para comparar dois vetores, o método mais comum é a similaridade por cosseno: em vez de medir a distância absoluta entre dois pontos, você mede o ângulo entre eles. Dois vetores apontando na mesma direção têm cosseno 1 (idênticos em significado). Direções opostas dão cosseno -1. Perpendiculares, zero.

Por que ângulo e não distância euclidiana? Porque embeddings normalizados (comprimento 1) tornam as duas métricas equivalentes, e normalização é o padrão na maioria dos modelos. O que importa é a direção semântica, não o tamanho do vetor.

Agora o problema prático: se você tem 10 milhões de chunks indexados, comparar a query com todos eles um a um é inviável em tempo real. É aqui que entra o ANN: Approximate Nearest Neighbor. Algoritmos como HNSW (usado no OpenSearch e pgvector) constroem uma estrutura de grafo que permite encontrar os vizinhos mais próximos sem varrer o índice inteiro.

O "aproximado" não é um defeito, é uma escolha deliberada de engenharia. Você troca um recall de 100% por latência de milissegundos. Na prática, com parâmetros bem calibrados, o recall fica em 95-99% e a latência cai de segundos para dezenas de milissegundos. Para RAG, esse trade-off é sempre válido.

FA
Na prática: o modelo de embedding é uma decisão de arquitetura, não de detalhe
Arquiteto de TI Especialista

Na prática, o modelo de embedding que você escolhe na fase de indexação fica preso ao seu índice para sempre, ou até você reindexar tudo. Trocar de modelo depois significa reprocessar cada chunk e reconstruir o índice do zero. Por isso eu trato essa escolha com o mesmo peso que a escolha do banco de dados: avalie antes, teste com seus dados reais, e documente a decisão. O Amazon Titan Embeddings V2 é meu ponto de partida padrão em projetos AWS pelo custo baixo e integração nativa com Bedrock Knowledge Bases. Cohere Embed v3 entra quando preciso de multilingual robusto ou quando o benchmark no meu domínio específico justifica o custo extra. Nunca escolho modelo de embedding por popularidade, escolho por recall no meu corpus.

Dimensão, normalização e escolha do modelo

Todo embedding tem uma dimensão: o número de valores no vetor. Titan Embeddings V2 suporta 256, 512 ou 1024 dimensões. Cohere Embed v3 usa 1024. Modelos open-source como all-MiniLM-L6-v2 usam 384.

Mais dimensões = mais capacidade de capturar nuances semânticas, mas também mais custo de armazenamento e latência de busca. Para a maioria dos casos de RAG corporativo em português, 1024 dimensões é o ponto ótimo. Dimensões menores (256-512) fazem sentido quando o volume é enorme e o domínio é restrito.

Normalização significa que o vetor gerado tem comprimento (norma L2) igual a 1. Quase todos os modelos modernos normalizam por padrão. Isso importa porque garante que a similaridade por cosseno e o produto interno dão o mesmo resultado, e simplifica a configuração do índice.

Alguns critérios concretos para escolher o modelo:

  • Idioma: Titan V2 e Cohere v3 têm boa cobertura de português. Modelos só-inglês degradam silenciosamente em textos PT-BR.
  • Tamanho máximo de input: Titan V2 aceita até 8192 tokens. Cohere v3 aceita 512 tokens por padrão (com chunking adequado isso não é problema, veja a aula 03).
  • Custo por token: avalie com o volume real do seu projeto antes de decidir.
  • Latência de inferência: em pipelines síncronos, o tempo de embedding da query soma na latência total do RAG.

Na aula 04 você vai ver como esse vetor de query se encaixa no pipeline completo de recuperação e geração.

Flashcards

Termos de busca vetorial

Toque num cartão para virar.

Modelos de embedding disponíveis no Amazon Bedrock

ModeloDimensõesMax tokens inputMultilingualMelhor para
Amazon Titan Embeddings V2256 / 512 / 10248192Sim (25+ idiomas)RAG geral na AWS, integração nativa com Knowledge Bases
Cohere Embed v3 (English)1024512NãoCorpora em inglês com alta precisão semântica
Cohere Embed v3 (Multilingual)1024512Sim (100+ idiomas)Documentos multilíngues, PT-BR com alta qualidade

O que fixar desta aula

Embedding = vetor que representa posição semântica no espaço; textos similares ficam próximos.
Similaridade por cosseno mede o ângulo entre vetores, direção semântica importa, não magnitude.
ANN (busca aproximada) troca recall perfeito por latência viável, trade-off sempre válido em produção.
O modelo de embedding é uma decisão de arquitetura: trocar depois exige reindexação completa.
Verifique suporte a português antes de escolher o modelo, degradação silenciosa é real.
Dimensão do vetor afeta custo de armazenamento e latência de busca: 1024d é o ponto ótimo para a maioria dos casos.

Perguntas frequentes

Posso usar o mesmo modelo de embedding para indexar e para a query?

Sim, e você deve. Documento e query precisam estar no mesmo espaço vetorial para que a comparação faça sentido. Usar modelos diferentes para cada um é um bug silencioso que destrói a qualidade da busca.

Qual a diferença entre produto interno (dot product) e similaridade por cosseno?

Para vetores normalizados (norma L2 = 1), os dois são equivalentes. A maioria dos modelos modernos normaliza por padrão, então na prática você pode usar qualquer um. Se o seu modelo não normaliza, use cosseno explicitamente.

Preciso de GPU para gerar embeddings em produção?

Não quando você usa modelos via API (Bedrock, Cohere API). A inferência roda na infraestrutura do provedor. Se você hospedar o modelo você mesmo (ex.: SageMaker com modelo open-source), GPU acelera significativamente, mas para a maioria dos casos de RAG na AWS, a API é mais simples e mais barata.

O que acontece se meu chunk for maior que o limite de tokens do modelo de embedding?

O modelo trunca silenciosamente, você perde o conteúdo além do limite sem nenhum erro. É um dos motivos pelos quais a estratégia de chunking (aula 03) precisa levar em conta o limite do modelo de embedding escolhido.

Referências

Amazon Titan Embeddings V2: Bedrock docsCohere Embed v3 on Amazon BedrockHNSW: Efficient and robust approximate nearest neighbor searchOpenSearch k-NN plugin: ANN algorithmsBedrock Knowledge Bases, supported embedding models
Concluir e ir para a próxima Aula anterior