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/O pipeline RAG ponta-a-ponta
Módulo 1 · Fundamentos· Aula 04/12

O pipeline RAG ponta-a-ponta

As duas metades, ingestão e consulta, e como elas se encaixam.

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:009:48
Velocidade
Baixar

Nas três aulas anteriores você aprendeu os ingredientes: por que RAG existe, como embeddings funcionam e como fazer chunking sem destruir o contexto. Agora vamos montar o prato inteiro, o pipeline ponta-a-ponta, com ingestão offline e consulta online lado a lado, para você enxergar onde cada decisão anterior encaixa e onde latência e custo aparecem na conta.

Pipeline RAG: ingestão (offline) e consulta (online)

Duas metades independentes. A ingestão roda sob demanda ou em schedule. A consulta roda em tempo real a cada pergunta do usuário.

📥 Ingestão: Offline
  • Fontes · S3, web, DB
  • Loader · parse + clean
  • Chunker · strategy + overlap
  • Embedding Model · Titan / Cohere
  • Vector Store · upsert + metadados
🔍 Consulta: Online
  • Usuário · pergunta
  • Embedding Model · mesmo modelo
  • Vector Store · busca top-k
  • Context Builder · rank + montar prompt
  • LLM · Bedrock / Claude
  • Resposta · + citações

A metade offline: ingestão

A ingestão não precisa ser rápida, ela precisa ser correta e reproduzível. O fluxo começa no loader, que lê a fonte (PDF, HTML, banco de dados, S3) e entrega texto limpo. O chunker divide esse texto usando a estratégia que você escolheu na Aula 03, tamanho, overlap, fronteiras semânticas. Cada chunk vira input para o modelo de embedding, que devolve um vetor de alta dimensão. Esse vetor, junto com os metadados do chunk (fonte, data, seção, ID do documento), é gravado no vector store.

Dois pontos críticos aqui:

Consistência de modelo. O modelo de embedding usado na ingestão deve ser exatamente o mesmo usado na consulta. Trocar o modelo significa reindexar tudo, sem exceção. Guarde o nome e a versão do modelo como parte do schema do índice.

Metadados não são opcionais. Sem metadados você não consegue filtrar, rastrear a origem de uma resposta nem fazer reindexação seletiva. Grave pelo menos: source_uri, chunk_index, doc_updated_at, section. Você vai agradecer na Aula 06 (filtros e roteamento) e na Aula 11 (citações).

Custo nessa etapa vem do modelo de embedding (por token) e do armazenamento no vector store. Latência não importa aqui, ingestão é assíncrona. O que importa é throughput e idempotência: se o job rodar duas vezes no mesmo documento, o índice não deve duplicar.

A metade online: consulta e o conceito de top-k

A consulta precisa ser rápida, o usuário está esperando. O fluxo começa com o embed da pergunta: o mesmo modelo de embedding transforma a query em um vetor. O vector store executa uma busca de vizinhos mais próximos e devolve os k chunks mais similares: esse é o top-k.

Por que top-k importa tanto? É um trade-off direto entre recall e ruído:

  • k pequeno (ex: 3): contexto limpo, menor custo de tokens no LLM, mas você pode perder informação relevante que ficou fora.
  • k grande (ex: 20): maior chance de capturar o chunk certo, mas o prompt fica enorme, o LLM pode se perder no meio do contexto, e o custo sobe.

Na prática, k entre 5 e 10 é um ponto de partida razoável. Você vai calibrar isso na Aula 08 (avaliação), medindo recall e faithfulness com conjuntos de teste reais.

Depois do top-k, o context builder monta o prompt: instrução do sistema + chunks recuperados (com suas referências) + pergunta do usuário. O LLM gera a resposta, idealmente citando as fontes dos chunks usados.

Latência nessa etapa se distribui assim: embed da query (~50–150 ms), busca vetorial (~20–100 ms), e geração do LLM (dominante, centenas de ms a segundos dependendo do modelo e do tamanho do output). Custo vem dos tokens de entrada (contexto + pergunta) e saída do LLM, mais a chamada de embedding.

FA
Na prática: o erro mais comum no primeiro pipeline
Arquiteto de TI Especialista

Na prática, o erro que vejo mais em primeiros pipelines RAG é tratar ingestão e consulta como um único processo acoplado, rodar o embed da pergunta com o mesmo job que indexa os documentos, ou pior, reindexar tudo a cada consulta. Separe as duas metades desde o início: ingestão é um job assíncrono, consulta é um serviço síncrono. Essa separação não é só arquitetural, ela define como você escala, monitora e cobra cada parte de forma independente. Um bug na ingestão não pode derrubar a consulta.

Reindexação: quando os dados mudam

Documentos mudam. Políticas são atualizadas, preços mudam, produtos são descontinuados. Se o vector store não reflete o estado atual das fontes, o LLM vai gerar respostas desatualizadas com total confiança, e isso é pior do que não responder.

Existem três padrões para lidar com reindexação:

Full reindex: apaga e reconstrói o índice inteiro. Simples, confiável, mas caro e lento para bases grandes. Adequado para corpora pequenos ou mudanças estruturais (ex: troca de modelo de embedding).

Incremental upsert: detecta documentos novos ou modificados (via hash, updated_at ou event-driven via S3 notifications / EventBridge) e reprocessa só eles. Mais complexo, mas escala bem. Exige que cada chunk tenha um ID determinístico baseado na fonte e no índice do chunk, assim o upsert sobrescreve o chunk antigo sem duplicar.

Soft delete + versioning: mantém versões antigas marcadas como inativas, útil quando você precisa de auditoria ou rollback. Aumenta o custo de armazenamento, mas dá rastreabilidade.

Minha recomendação padrão: comece com full reindex em schedule (ex: diário), implemente incremental upsert quando o volume ou a frequência de mudanças tornar o full reindex proibitivo. Não otimize antes de medir.

Na AWS, S3 Event Notifications + Lambda ou EventBridge Pipes são o padrão natural para disparar reindexação incremental quando um documento é atualizado no bucket de origem.

Ordenar

Ordene a consulta RAG (online)

Da pergunta à resposta com fontes.

  1. 1Montar o contexto com os trechos
  2. 2Buscar os top-k trechos no vector store
  3. 3Gerar o embedding da pergunta
  4. 4Gerar a resposta com citações

O que fixar desta aula

Ingestão (offline) e consulta (online) são pipelines separados, nunca acople os dois.
O modelo de embedding deve ser idêntico nos dois lados; trocar o modelo exige reindexação total.
top-k controla o trade-off entre recall e ruído no contexto enviado ao LLM.
Metadados gravados na ingestão habilitam filtros, citações e reindexação seletiva, grave-os sempre.
A geração do LLM domina a latência online; a chamada de embedding domina o custo de ingestão.
Reindexação incremental requer IDs determinísticos por chunk para fazer upsert sem duplicar.

Ingestão vs. Consulta: características de cada metade

CaracterísticaIngestão (offline)Consulta (online)
Quando rodaSchedule ou evento (S3, EventBridge)A cada pergunta do usuário
Requisito principalThroughput e idempotênciaBaixa latência
Maior custoEmbedding por token (volume de docs)Tokens de entrada/saída do LLM
Falha tolerável?Sim, retry assíncrono, sem impacto ao usuárioNão, falha visível ao usuário imediatamente
Escala comVolume e frequência de atualização dos docsNúmero de usuários simultâneos

Dúvidas frequentes sobre o pipeline

Posso usar modelos de embedding diferentes para documentos de domínios distintos?

Sim, mas cada modelo precisa de seu próprio índice separado no vector store. Na consulta, você precisa saber qual índice usar (roteamento por domínio, tema da Aula 06). Nunca misture vetores de modelos diferentes no mesmo índice; as distâncias não são comparáveis.

O que acontece se eu aumentar o top-k mas o LLM tiver uma janela de contexto pequena?

Você vai truncar o contexto ou receber erro. A solução é calcular o tamanho médio dos chunks em tokens e garantir que k × chunk_tokens caiba na janela do modelo com margem para a instrução e a resposta. Reranking (Aula 05) ajuda a selecionar os melhores k antes de montar o prompt.

Preciso reindexar tudo se mudar só um documento?

Não, se você implementou upsert com IDs determinísticos por chunk. Reprocesse só os chunks do documento alterado e faça upsert no índice. O restante do índice permanece intacto. Full reindex só é obrigatório quando você troca o modelo de embedding.

Fechando o Módulo 1

Módulo 1 completo ✓

Com esta aula você tem o mapa completo do RAG: sabe o que acontece em cada etapa, onde o dinheiro vai, onde a latência aparece e o que quebra quando os dados mudam. O Módulo 1 foi sobre fundamentos, e fundamentos sólidos são o que separa um protótipo que impressiona numa demo de um sistema que funciona em produção. O Módulo 2 começa pela qualidade da recuperação: busca híbrida, reranking e filtros por metadados. Porque recuperar os chunks certos é a única coisa que o LLM não consegue consertar por você.

Quiz

Checkpoint: Módulo 1

1. A ingestão acontece tipicamente…
2. Aumentar o top-k tende a…

Referências

Amazon Bedrock Knowledge Bases: How it worksAmazon OpenSearch Service: Vector searchAmazon Bedrock User Guide: How knowledge bases workLewis et al. Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (original paper)LangChain: RAG conceptual guide
Concluir e ir para a próxima Aula anterior