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

Estudos/Playbook
RSSMarkdownLLMs
PlaybookIA / RAG

Playbook: RAG em Produção: O Checklist de 15 Itens Antes de Ir pro Ar

15 de set. de 2025 9 min Com apoio de IA000 visualizações00 reproduções
Ouvir estudo

cerca de 9 min · áudio gerado ao tocar

Todo mundo consegue fazer um demo de RAG funcionar em 30 minutos. O problema é que 90% desses demos nunca deveriam ir a produção no estado em que estão, chunking arbitrário, sem avaliação, sem controle de custo, sem guardrails. Este playbook é o checklist que eu aplico antes de assinar qualquer deploy de RAG em ambiente real.

TL;DR: O que você vai conseguir decidir depois deste playbook

Identificar os 5 grupos de risco em qualquer pipeline RAG: ingestão, recuperação, geração, avaliação e guardrails/custo
Aplicar os 15 itens do checklist de forma concreta e testável antes de cada deploy
Decidir entre busca só-semântica e busca híbrida+reranking com base em recall, precisão, custo e latência reais
Parar de trocar de modelo quando o problema real é a qualidade da recuperação
Medir custo por consulta desde o dia zero, não depois que a fatura chegar

O modelo mental que desbloqueia tudo: RAG é um pipeline de dados, não uma feature de IA

A maioria dos times trata RAG como se fosse uma chamada de API com um passo extra. Não é. RAG é um pipeline de dados com pelo menos seis estágios sequenciais, e cada estágio tem seus próprios modos de falha silenciosa. Quando o sistema responde errado, a culpa instintiva vai para o LLM. Na prática, o LLM é frequentemente a parte mais confiável do sistema.

Pense assim: o LLM só pode responder com base no que você passou no contexto. Se os chunks recuperados estão errados, incompletos, duplicados ou fora de ordem, o modelo vai fazer o melhor que pode com lixo, e isso parece alucinação, mas é garbage-in, garbage-out clássico. A estimativa que circula na comunidade, e que bate com o que eu vejo em campo, é que cerca de 80% dos casos de resposta incorreta em RAG têm origem na fase de recuperação: chunk errado, threshold de similaridade mal calibrado, ausência de filtro por tenant, ou simplesmente embedding que não captura o domínio.

O modelo mental correto é: você está construindo um sistema de busca com um gerador de linguagem natural na ponta. Isso muda completamente as prioridades. Antes de ajustar temperatura, antes de trocar de modelo, antes de fazer prompt engineering sofisticado, conserte a busca. Meça recall. Meça precisão. Só depois suba na pilha.

No contexto AWS, isso significa tratar o Amazon OpenSearch Serverless (ou outro vector store) como um componente de dados de primeira classe, com o mesmo rigor que você aplicaria a um banco relacional em produção: versionamento de índice, estratégia de reindexação, monitoramento de deriva de distribuição, e testes de regressão quando você troca o modelo de embedding.

Referência Rápida: Stack e Escopo

Domínio
IA Generativa / RAG em produção
Stack de referência AWS
Amazon Bedrock Knowledge Bases, OpenSearch Serverless (vector engine), Bedrock Evaluation, Bedrock Guardrails
Modelos de embedding relevantes
Amazon Titan Embeddings V2, Cohere Embed v3 (via Bedrock)
Modelos de geração relevantes
Claude 3.x (Sonnet/Haiku), Amazon Nova Pro/Lite (via Bedrock)
Padrão de busca recomendado
Híbrida (semântica + BM25) + reranking cross-encoder
Métricas de avaliação-chave
Faithfulness, Answer Relevance, Context Recall, Context Precision
Escopo deste playbook
Agnóstico de domínio; exemplos ancorados em AWS; aplicável a qualquer stack RAG

Os cinco grupos de risco, por que o checklist está estruturado assim

Organizo os 15 itens em cinco grupos porque cada grupo tem um perfil de falha diferente e um dono diferente dentro do time.

Grupo 1: Ingestão é onde a maioria dos problemas nasce e onde menos gente olha depois do deploy inicial. Chunking ruim contamina o índice inteiro. Metadados ausentes eliminam a possibilidade de filtros eficientes. Duplicatas inflam o índice e distorcem scores de similaridade. E sem versionamento de índice, você não consegue fazer rollback quando um novo modelo de embedding quebra a qualidade.

Grupo 2: Recuperação é o coração do sistema. A decisão entre busca puramente semântica e busca híbrida (semântica + BM25 + reranking) tem impacto direto e mensurável em recall e precisão. Top-k mal calibrado ou ausência de filtro por tenant são vetores de vazamento de informação em sistemas multi-tenant, um risco de segurança real, não teórico.

Grupo 3: Geração é onde o LLM entra, e onde as pessoas passam tempo demais. Os itens aqui são mais simples do que parecem: citar a fonte no output (rastreabilidade), ter uma resposta válida de 'não sei' quando o contexto não suporta a resposta (evitar confabulação), e usar structured output quando o downstream precisa parsear a resposta.

Grupo 4: Avaliação é o grupo mais negligenciado em projetos que conheço. Sem um dataset de avaliação com ground truth, você está voando cego. Sem testes de regressão, cada troca de modelo de embedding ou LLM é um salto de fé. O Bedrock Evaluation oferece métricas de faithfulness e relevância que podem ser integradas a um pipeline de CI/CD.

Grupo 5: Guardrails e Custo fecha o ciclo. PII no contexto recuperado é um problema de compliance, não de UX. Prompt injection via documentos maliciosos é um vetor de ataque real. E custo por consulta não medido é o caminho mais rápido para uma surpresa desagradável no fim do mês, especialmente com reranking e múltiplas chamadas de embedding somando tokens.

O Checklist de 15 Itens: Concreto e Testável

  1. 1

    INGESTÃO #1: Chunking pela estrutura do documento, não por tamanho fixo

    Teste: pegue 10 documentos representativos e inspecione os chunks manualmente. Um chunk válido deve conter uma unidade semântica completa (seção, parágrafo, item de lista). Chunks que cortam no meio de uma frase ou separam pergunta da resposta são falha. Use heading-aware ou sentence-boundary chunking. Bedrock Knowledge Bases suporta chunking hierárquico e semântico nativamente.

  2. 2

    INGESTÃO #2: Metadados estruturados em todo chunk

    Teste: consulte o vector store e verifique que cada chunk tem pelo menos: source_id, document_title, section, tenant_id (se multi-tenant), created_at, version. Sem esses campos, filtros de recuperação e rastreabilidade de fonte são impossíveis. No OpenSearch Serverless, defina o mapeamento explicitamente antes de indexar.

  3. 3

    INGESTÃO #3: Deduplicação antes de indexar

    Teste: calcule hash SHA-256 do conteúdo de cada chunk antes de inserir. Verifique que o pipeline rejeita ou atualiza duplicatas em vez de inserir novamente. Duplicatas inflam o índice, distorcem scores de similaridade e fazem o mesmo trecho aparecer múltiplas vezes no contexto, desperdiçando tokens.

  4. 4

    INGESTÃO #4: Reindexação versionada com rollback

    Teste: troque o modelo de embedding por uma versão nova e verifique que você consegue manter o índice antigo ativo enquanto o novo é construído (blue/green de índice). No OpenSearch Serverless, use aliases de índice. Sem isso, qualquer upgrade de embedding é uma operação de risco com downtime ou degradação silenciosa.

  5. 5

    RECUPERAÇÃO #5: Busca híbrida ativada (semântica + BM25)

    Teste: construa um conjunto de 20 queries de teste com ground truth de chunks esperados. Meça recall@5 com busca só-semântica e com busca híbrida. Se recall@5 híbrido não for ≥ recall semântico em pelo menos 70% dos casos, revise os pesos. Busca híbrida é especialmente crítica para queries com termos exatos (IDs, nomes próprios, códigos).

  6. 6

    RECUPERAÇÃO #6: Reranking cross-encoder antes de passar ao LLM

    Teste: compare MRR (Mean Reciprocal Rank) do top-k antes e depois do reranking no seu dataset de teste. O reranker deve mover o chunk mais relevante para posições mais altas consistentemente. Sem reranking, você passa os k chunks mais próximos em embedding space, que não é o mesmo que os k mais relevantes para a query.

  7. 7

    RECUPERAÇÃO #7: Top-k calibrado por domínio, não por default

    Teste: meça a distribuição do número de chunks realmente úteis por query no seu dataset. Se 80% das queries precisam de no máximo 3 chunks, passar top-k=10 ao LLM desperdiça tokens e dilui o contexto. Se há queries que precisam de 8 chunks, top-k=3 vai truncar. Calibre por percentil, não por intuição.

  8. 8

    RECUPERAÇÃO #8: Filtro por metadados/tenant obrigatório em multi-tenant

    Teste: com dois tenants A e B no mesmo índice, faça uma query autenticada como tenant A e verifique que nenhum chunk de tenant B aparece nos resultados. Isso não é opcional, é isolamento de dados. No OpenSearch Serverless, use pre-filters na query kNN. No Bedrock Knowledge Bases, use metadata filtering.

Busca Só-Semântica vs. Híbrida + Reranking

DimensãoSó-Semântica (kNN puro)Híbrida (kNN + BM25)Híbrida + Reranking Cross-Encoder
Recall em queries de linguagem naturalAltoAltoAlto
Recall em queries com termos exatos (IDs, códigos)Baixo, embeddings generalizam demaisAlto: BM25 captura termos exatosAlto
Precisão no top-k finalMédia, muitos falsos positivos por similaridade de embeddingMédia-AltaAlta, reranker reordena por relevância real
Latência adicionadaBaseline (~10-50ms no OpenSearch Serverless)+5-15ms (fusão de scores)+50-200ms (chamada ao reranker)
Custo adicional por consultaNenhum além do embedding da queryMínimoModerado, depende do modelo de reranking
Complexidade de implementaçãoBaixaMédia, requer configuração de índice BM25 + fusãoAlta, requer serviço de reranking separado ou modelo Bedrock
Quando usarProtótipos, domínios com linguagem muito homogêneaMaioria dos casos de produçãoAlta precisão exigida, domínio técnico, documentos longos

Pipeline RAG de Produção: Ingestão → Índice → Recuperação → Reranking → Geração → Guardrail → Avaliação

Fluxo completo de um pipeline RAG em produção na AWS. O caminho superior é o pipeline de ingestão (offline/batch). O caminho inferior é o pipeline de consulta (online/real-time). Avaliação é um loop contínuo que alimenta melhorias em ambos os caminhos.

📥 Ingestão (Offline)
  • Fontes · S3 / SharePoint / DB
  • Parser · Estrutura + Metadados
  • Dedup · SHA-256 Hash
  • Chunker · Semântico / Hierárquico
  • Embedding Model · Titan V2 / Cohere
🗄️ Índice (Versionado)
  • OpenSearch Serverless · Vector + BM25 Index
  • Index Alias · Blue/Green
🔍 Recuperação (Online)
  • Usuário · Query
  • Embedding · Query
  • Busca Híbrida · kNN + BM25 + Filtro Tenant
  • Reranker · Cross-Encoder
🤖 Geração + Guardrails
  • Prompt Builder · Contexto + Instrução
  • Bedrock Guardrails · PII + Injection Filter
  • LLM · Claude / Nova
  • Output · Resposta + Citations
📊 Avaliação Contínua
  • Dataset · Ground Truth
  • Bedrock Evaluation · Faithfulness / Relevance
  • CloudWatch · Custo + Latência + Alertas

O que fazer quando as métricas de avaliação regridem

Quando você roda o dataset de avaliação e vê uma regressão, o instinto é ir direto para o LLM ou para o prompt. Na maioria das vezes, esse é o lugar errado para começar. Sigo um protocolo de diagnóstico em camadas:

Primeiro, isole o estágio. Meça context recall separadamente de faithfulness. Se context recall caiu mas faithfulness está estável, o problema é na recuperação, chunking, embedding, threshold de similaridade, ou filtros. Se faithfulness caiu mas context recall está ok, aí sim o problema pode ser no prompt ou no modelo.

Segundo, verifique se houve mudança de distribuição nos documentos. Documentos novos com estrutura diferente, terminologia nova, ou idioma diferente podem degradar a qualidade do embedding sem nenhuma mudança de código. Monitore a distribuição dos scores de similaridade ao longo do tempo, uma queda no score médio dos top-1 chunks é um sinal precoce.

Terceiro, antes de trocar de modelo, ajuste os parâmetros de recuperação. Mudar o threshold de similaridade mínima, ajustar os pesos de fusão híbrida, ou calibrar o top-k frequentemente resolve regressões sem o custo e risco de uma troca de modelo. Trocar de modelo de embedding implica reindexar tudo, é uma operação cara e que exige os testes de regressão do item #13.

Quarto, mantenha um log de decisões de avaliação. Cada vez que você aceita uma regressão em uma métrica em troca de melhora em outra, documente. Isso evita que a equipe reverta decisões já tomadas e cria um histórico de trade-offs que é valioso quando o sistema cresce.

Anti-padrões que eu vejo em todo projeto RAG

1. Chunking por tamanho fixo de caracteres ou tokens. O padrão mais comum e o mais destrutivo. Um chunk de 512 tokens que corta no meio de uma tabela ou separa a pergunta da resposta em um FAQ vai produzir recuperações inúteis independente de qual embedding você use. Sempre inspecione chunks manualmente antes de indexar. 2. Deploy sem dataset de avaliação. 'Testamos manualmente com algumas queries e pareceu ok' não é avaliação. Sem ground truth, você não tem como saber se uma mudança melhorou ou piorou o sistema. Construir o dataset é trabalho, mas é o único jeito de ter confiança em mudanças. 3. Custo por consulta não medido. Reranking + embedding + LLM com contexto grande somam rápido. Vi projetos com custo de $0.15-0.30 por consulta que ninguém havia medido. Com 10.000 consultas/dia, isso é $1.500-3.000/dia. Configure métricas de custo estimado desde o primeiro deploy. 4. Trocar de modelo como primeiro recurso quando a qualidade é ruim. Claude 3.5 Sonnet não vai consertar chunks ruins. GPT-4o não vai consertar ausência de filtro por tenant. O modelo é o último lugar para otimizar, conserte a busca primeiro. 5. Ignorar prompt injection via documentos. Se usuários podem fazer upload de documentos que vão ser indexados, um documento malicioso com instruções embutidas pode manipular o comportamento do LLM. Use Bedrock Guardrails e sanitize o conteúdo dos documentos antes de indexar.

Regra de Bolso

Se a resposta está errada, culpe a busca antes de culpar o modelo. ~80% dos problemas de qualidade em RAG têm origem na recuperação. Antes de trocar de LLM, meça context recall. Se o chunk certo não está no top-k, nenhum modelo vai gerar a resposta certa.

FA
Minha perspectiva sênior, o que eu faço na prática
Arquiteto de TI Especialista

Quando começo um projeto RAG, a primeira coisa que faço não é escolher o LLM, é entender a estrutura dos documentos. Documentos com estrutura previsível (PDFs com headings, JSONs, markdowns) permitem chunking determinístico e de alta qualidade. Documentos escaneados, PDFs de formulários, ou conteúdo misto são onde a maioria dos projetos afunda antes mesmo de chegar ao modelo. Minha ordem de prioridade invariável: (1) ingestão e chunking corretos, (2) metadados completos, (3) busca híbrida com filtros, (4) dataset de avaliação com pelo menos 50 pares, (5) reranking, (6) guardrails, (7) aí sim otimização de prompt e escolha de modelo. Nunca inverto essa ordem. Na AWS, uso Bedrock Knowledge Bases para o caminho feliz, hierarquical chunking + OpenSearch Serverless + citations nativas economizam semanas de trabalho. Mas para sistemas com requisitos de multi-tenancy rigorosos ou domínios muito especializados, construo o pipeline manualmente com mais controle sobre o índice e os filtros. O item que mais frequentemente está ausente quando recebo um projeto para revisar é o #12, dataset de avaliação. Sem ele, toda decisão de arquitetura é baseada em intuição. Com ele, você tem uma conversa baseada em dados. É o investimento de menor custo e maior retorno em qualquer projeto RAG.

Veredito

RAG confiável em produção não é um problema de modelo, é um problema de engenharia de dados com um LLM na ponta. Os 15 itens deste checklist não são boas práticas opcionais: são a linha que separa um sistema que você consegue operar e melhorar com confiança de um que você torce para funcionar. Conserte a busca antes de trocar o modelo. Meça antes de otimizar. E nunca faça deploy sem um dataset de avaliação, você está apenas adiando a descoberta do problema para o pior momento possível.

Referências

Amazon Bedrock Knowledge Bases: OverviewAmazon Bedrock: Retrieval Augmented Generation (User Guide)Amazon OpenSearch Serverless: Vector Engine for Semantic SearchAmazon Bedrock: Evaluate RAG Systems
#RAG#GenAI#AWS Bedrock#vector search#production#evaluation#guardrails#OpenSearch
Fontes do caso
AWS: Amazon Bedrock Knowledge BasesAWS: Retrieval Augmented GenerationAmazon OpenSearch Serverless: Vector engineAWS: Evaluate RAG (Bedrock)
Compartilhar:LinkedInWhatsAppXBaixar em Markdown
Escrito com apoio de IA a partir do caso público e da minha leitura como arquiteto.
Próximo passo
Agentes de IA em produção na AWSComo eu desenho, oriento e audito agentes que vão ao ar, com os números e as fontes.Ver o IA BuilderTrilha Arquiteto de IA, gratuitaFundamentos, LLMs, RAG, tools, MCP e arquitetura na AWS, em aulas curtas e interativas.Começar a trilha

Continue lendo

PlaybookPlaybook: Um Agente de IA de Produção na AWS em 7 PassosNoventa por cento dos agentes de IA morrem no notebook. Este playbook cobre os 7 passos que separam um protótipo funcional de um agente confiável em produção na AWS, do trigger ao guardrail, passando por topologia de loop, ferramentas com menor privilégio, verifier externo e orçamento de execução. Opinioso, concreto e baseado nas primitivas reais do Amazon Bedrock AgentCore.Ler PlaybookPlaybook: Vector Store na AWS: OpenSearch Serverless vs Aurora pgvector vs S3 VectorsEscolher o vector store errado é onde a conta de RAG explode, ou onde a latência entrega p99 inaceitável em produção. Este playbook mapeia os três caminhos principais na AWS (OpenSearch Serverless, Aurora pgvector, S3 Vectors) por três eixos reais: latência exigida, modelo de custo e carga operacional. Saia com uma decisão defensável, não com a escolha do tutorial.Ler PlaybookPlaybook: do Prompt ao Pipeline, os 5 Estágios de um Agente ConfiávelUm agente não nasce confiável, ele é construído estágio a estágio, do prompt simples ao sistema operável com observabilidade, guardrails e auditoria. Este playbook mapeia cada estágio, o que você ganha, o que você arrisca, e quando parar de subir a escada. O gargalo não é o prompt; é o sistema em volta.Ler
AnteriorPlaybook: Onde Rodar IA na AWS: Lambda vs Fargate vs ECS/EKS (GPU)PróximoPlaybook: do Prompt ao Pipeline, os 5 Estágios de um Agente Confiável
Gostou deste estudo? Receba o próximo.

Post-mortems, ADRs e deep dives de arquitetura no seu email, do jeito que um arquiteto lê.

Sem spam · cancele quando quiser

Pergunte ao Fernando sobre isto

Uma resposta focada sobre este estudo, do meu assistente de IA, baseada no meu trabalho.

Participe da conversa

Entre para comentar

Confirme seu e-mail para participar, você também recebe a newsletter. Sem senha.

Neste estudo
O modelo mental que desbloqueia tudo: RAG é um pipeline de dados, não uma feature de IAOs cinco grupos de risco, por que o checklist está estruturado assimO Checklist de 15 Itens: Concreto e TestávelBusca Só-Semântica vs. Híbrida + RerankingArquiteturaO que fazer quando as métricas de avaliação regridemVereditoReferências