Knowledge Bases: RAG gerenciado de ponta a ponta
- ⬜🖼️ Além do texto: imagem, documento, vídeo e áudio(AWS Bedrock — GenAI em Produção)
Recomendamos completar os pré-requisitos antes de seguir, mas nada te impede de continuar.
Todo mundo que constrói RAG passa pela mesma dor, e ela não é o prompt: é o pipeline em volta dele. Você precisa ler documentos de dez lugares diferentes, parsear PDF com tabela, quebrar em chunks do tamanho certo, gerar embeddings, escrever num vector store, manter tudo sincronizado quando o documento muda, e ainda devolver a resposta com citação de onde ela veio. Knowledge Bases é a AWS dizendo: esse pipeline inteiro é problema meu, não seu. Você não opera infra de embedding nem escreve o loop de sync.
Quando Knowledge Bases é a escolha certa
Knowledge Bases é RAG fully-managed: você aponta para os dados, escolhe um modelo de embedding e um vector store, e o Bedrock cuida de ingestão, parsing, chunking, embeddings, indexação e retrieval com citações. Considere quando:
- Você precisa de RAG sobre dados corporativos sem construir nem operar o pipeline de ingestão/retrieval.
- Rastreabilidade importa: cada resposta precisa vir com citações apontando o documento-fonte.
- Você quer metadata filtering (ex.: só documentos do tenant X, ou do tier enterprise) na busca.
- Os dados mudam com frequência e você quer sync incremental, não reindexar tudo do zero toda vez.
- Vale menos a pena quando você já tem um pipeline de RAG maduro e quer controle absoluto de cada etapa — aí LangChain/LlamaIndex sobre seu próprio store pode fazer mais sentido.
O pipeline de ponta a ponta: dois fluxos
Por baixo, uma Knowledge Base são dois pipelines distintos. O de ingestão (build-time) roda quando você sincroniza uma data source: lê, parseia, chunka, gera embeddings e escreve no vector store. O de query (runtime) roda a cada pergunta: transforma a pergunta em embedding, busca os chunks mais próximos, opcionalmente reordena com reranking e gera a resposta com citações. Separar os dois na cabeça ajuda a raciocinar sobre custo (ingestão é esporádica; query é por request) e latência.
- → metadado obrigatório: sem ele não há filtro de permissão
- → você monta o prompt
- → uma chamada faz busca e geração
- Armazenamento
- Fora da AWS
- IA e machine learning
- Analytics
- Banco de dados
Ingestão e consulta rodam em tempos diferentes: a primeira é assíncrona e paga por documento; a segunda é síncrona e paga por request. Confundir os dois é a origem da surpresa de custo — o vector store cobra 24 horas por dia, entre as duas.
- Ingestão: acontece uma vez por documento. Conectores trazem o conteúdo, o chunking parte e os embeddings são gerados. É assíncrono e o custo é de mudança, não recorrente.
- Metadado na ingestão, não depois. Dono, área, confidencialidade e validade. Sem eles não existe filtro de permissão nem forma de expirar conteúdo velho — e retroagir custa reindexar a base.
- Consulta: as duas APIs. Retrieve devolve os trechos e deixa você montar o prompt. RetrieveAndGenerate faz busca e resposta numa chamada, com citação da fonte.
- Geração ancorada. O modelo responde a partir do contexto recuperado. Citação visível é o que permite ao usuário conferir e ao time achar conteúdo desatualizado.
- O que cobra parado domina a conta do piloto. A ingestão cobra por mudança e a consulta cobra por request, mas o vector store cobra capacidade 24 horas por dia, com ou sem pergunta. Em volume baixo é ele que define a fatura — então a escolha do store se faz pelo custo mínimo em repouso, não pela latência de busca que o piloto nunca vai exercitar.
Conectores de ingestão (data sources)
Uma Knowledge Base pode ter várias data sources. Cada conector sabe autenticar, listar e ler documentos da fonte, e respeita filtros de inclusão/exclusão (por padrão de URL/prefixo) para você ingerir só o que importa. Os conectores nativos em meados de 2026:
- Amazon S3 — o mais comum: aponte para um bucket/prefixo com seus documentos.
- Web Crawler — rastreia páginas web (apenas as suas ou aquelas que você tem autorização para rastrear).
- Confluence, SharePoint, Salesforce, Google Drive, OneDrive — SaaS corporativo com auth gerenciada.
- Ingestão direta via API (custom) — você entrega os documentos/chunks por chamada, sem conector, quando a fonte é sua e exótica.
Web Crawler: só o que é seu
O Web Crawler deve indexar apenas páginas que você é dono ou tem autorização para rastrear — respeite robots.txt e os termos dos sites. Use os filtros de inclusão/exclusão por padrão de URL para limitar o escopo e evitar puxar o site inteiro (ou domínios de terceiros) para dentro da sua KB.
Estratégias de chunking
Chunking é como o documento vira pedaços indexáveis. É a decisão que mais mexe na qualidade do retrieval: chunk grande demais dilui a relevância, chunk pequeno demais perde contexto. O Bedrock oferece estas estratégias:
| Estratégia | Parâmetros-chave | Quando usar |
|---|---|---|
| Default | ~300 tokens por chunk, sem configuração | Ponto de partida rápido; documentos homogêneos de texto corrido |
| Fixed-size | Max tokens/chunk + overlap (%) | Você quer controle direto do tamanho; overlap preserva contexto na borda |
| Hierarchical | Parent + child: recupera o child e injeta o parent no contexto | Precisão do trecho pequeno + contexto do bloco maior. NÃO use com S3 Vectors |
| Semantic | Buffer de frases + breakpoint percentile threshold (usa FM) | Documentos com assuntos misturados; melhora quebras, mas adiciona custo de inferência na ingestão |
| None | 1 documento = 1 chunk | Você já pré-particionou os arquivos no tamanho ideal fora do Bedrock |
| Custom (Lambda) | Sua função Lambda pluga LangChain/LlamaIndex | Lógica de chunking proprietária que as estratégias nativas não cobrem |
| Multimodal | Embeddings Nova; chunk de áudio/vídeo além de texto/imagem | Base com mídia (áudio, vídeo, imagens) e não só documentos textuais |
Hierarchical dá precisão + contexto, mas cuidado com o store
Hierarchical chunking recupera o child (preciso) e injeta o parent (mais contexto) no prompt — ótimo equilíbrio entre acerto do trecho e contexto ao redor. Porém NÃO é compatível com Amazon S3 Vectors: se for usar S3 Vectors como store, escolha fixed-size ou semantic. Regra geral: comece no default, meça, e só troque de estratégia quando o retrieval errar de forma sistemática.
Vector stores: onde os vetores moram
O vector store é onde os embeddings vivem e de onde o retrieval lê. O Bedrock gerencia a integração, mas a escolha do store define custo, escala e recursos. Se você não indicar um existente, o Bedrock provisiona um OpenSearch Serverless por padrão — e é aí que a fatura escapa (voltamos a isso na seção de custo). Além dos stores vetoriais abaixo, dá para usar um Amazon Kendra GenAI Index como retriever alternativo quando você já investe no Kendra.
| Vector store | Quando usar |
|---|---|
| OpenSearch Serverless | Default gerenciado, billing por OCU. Zero setup, mas tem mínimo rodando 24/7 (caro para KB pequena/idle) |
| OpenSearch Managed Cluster | Você já opera um cluster OpenSearch e quer controle de nós/capacidade |
| Aurora PostgreSQL (pgvector) | Já tem Postgres; quer SQL e vetores juntos e billing previsível (Serverless v2 escala para baixo) |
| Amazon S3 Vectors | Escala massiva (até ~2 bilhões de vetores/índice), ~90% mais barato. NÃO combine com hierarchical chunking |
| Neptune Analytics | GraphRAG: quer similaridade vetorial + grafo de entidades/relações e perguntas multi-hop |
| Pinecone | Já padronizou no Pinecone; quer o managed vector DB dele integrado ao Bedrock |
| MongoDB Atlas | Seus dados já vivem no Atlas e você quer vector search no mesmo lugar |
| Redis Enterprise | Latência baixíssima de retrieval e você já roda Redis Enterprise |
O que exatamente a Knowledge Base gerencia por você num pipeline de RAG?
GraphRAG e text-to-SQL: além do vetor puro
GraphRAG (Neptune Analytics, GA em mar/2025)
GraphRAG vai além da similaridade vetorial: na ingestão, o Bedrock usa um FM para extrair entidades e relações e montar um grafo de conhecimento junto com os embeddings. No retrieval, combina busca vetorial com traversal do grafo. Resultado: respostas melhores em fontes interconectadas e perguntas multi-hop ('quais projetos do time X dependem do serviço Y que o time Z mantém?'), onde o RAG puramente vetorial se perde. Você o ativa escolhendo Neptune Analytics como vector store ao criar a KB.
Structured data retrieval (text-to-SQL)
Nem todo dado é documento. O structured data retrieval traz RAG para dados estruturados: em vez de vetores, a Knowledge Base traduz a pergunta em linguagem natural para SQL automaticamente e roda a query sobre Amazon Redshift ou SageMaker Lakehouse. Ideal para 'quantos pedidos acima de R$500 fechamos no último trimestre?', que um índice vetorial nunca responderia com precisão. Sem embeddings, sem chunking — é geração de SQL sobre o seu schema.
Reranking, filtros e as duas APIs de retrieval
Antes de mandar os chunks para o modelo gerar, vale reordená-los por relevância real — é o que faz o reranking. O Bedrock expõe a Rerank API com dois modelos: Amazon Rerank 1.0 e Cohere Rerank 3.5 (100+ idiomas). Você liga o reranking via setting nas APIs Retrieve e RetrieveAndGenerate; ele reordena o top-k recuperado e corta para os N melhores antes da geração. Sobre a geração em si, há duas APIs, e a escolha define quem controla o quê — ambas suportam metadata filtering, reranking e integração com Guardrails:
| Aspecto | Retrieve | RetrieveAndGenerate |
|---|---|---|
| O que retorna | Só os chunks relevantes (trechos + score + fonte) | Resposta em linguagem natural já gerada |
| Quem gera a resposta | Você (monta o prompt e chama o FM como quiser) | O Bedrock, num único call |
| Citações | Você constrói a partir das fontes retornadas | Vêm prontas, ligando cada trecho ao chunk-fonte |
| Quando usar | Precisa de controle total: reranking custom, orquestração própria, formatação especial | Quer a resposta com citações no menor esforço possível |
import boto3
# RAG data plane: bedrock-agent-runtime (NÃO bedrock-runtime)
client = boto3.client("bedrock-agent-runtime", region_name="us-east-1")
resp = client.retrieve_and_generate(
input={"text": "Qual é a política de reembolso para clientes enterprise?"},
retrieveAndGenerateConfiguration={
"type": "KNOWLEDGE_BASE",
"knowledgeBaseConfiguration": {
"knowledgeBaseId": "KB1234ABCD",
"modelArn": (
"arn:aws:bedrock:us-east-1::foundation-model/"
"anthropic.claude-3-5-sonnet-20241022-v2:0"
),
"retrievalConfiguration": {
"vectorSearchConfiguration": {
"numberOfResults": 10,
# Filtro por metadata do documento (multi-tenant, tier, etc.)
"filter": {"equals": {"key": "tier", "value": "enterprise"}},
# Reordena os 10 recuperados e mantém os 5 melhores
"rerankingConfiguration": {
"type": "BEDROCK_RERANKING_MODEL",
"bedrockRerankingConfiguration": {
"numberOfRerankedResults": 5,
"modelConfiguration": {
"modelArn": (
"arn:aws:bedrock:us-east-1::foundation-model/"
"amazon.rerank-v1:0"
)
},
},
},
}
},
},
},
)
print(resp["output"]["text"])
# Citações: cada trecho gerado aponta o chunk-fonte (rastreabilidade)
for citation in resp["citations"]:
for ref in citation["retrievedReferences"]:
print(ref["location"], "->", ref["content"]["text"][:80])
Você quer usar o retrieval gerenciado do Bedrock, mas montar o prompt e chamar o modelo você mesmo (para aplicar sua própria lógica antes de gerar). Qual API usar?
Custo: o vilão é o vector store, não o modelo
Aqui está o erro de custo mais comum em RAG na AWS, e ele não tem nada a ver com tokens do modelo. O modelo cobra por consulta; o vector store cobra por estar de pé. Numa KB com pouco tráfego, a maior parte da fatura vem de infra ligada 24/7 sem ninguém usando.
OpenSearch Serverless ocioso + a coleção órfã
O OpenSearch Serverless cobra por OCU-hora e mantém um MÍNIMO de OCUs ligadas 24/7: são da ordem de US$350–700/mês mesmo com ZERO consultas (verifique o valor exato no pricing/console). Pior: deletar a Knowledge Base NÃO deleta a coleção OpenSearch subjacente — a cobrança continua indefinidamente na coleção órfã. Delete a coleção manualmente no console do OpenSearch. Para cargas pequenas/intermitentes, prefira Aurora Serverless v2 + pgvector, Amazon S3 Vectors, ou OpenSearch Serverless NextGen (escala a zero após ~10 min de ociosidade) — costumam ser ~90% mais baratos.
📋 KB pequena (alguns milhares de documentos), tráfego intermitente: picos em horário comercial, quase nada à noite e nos fins de semana.
Você paga por armazenamento/uso em vez de manter OCUs do OpenSearch Serverless ligadas 24/7. Para volume baixo e intermitente, isso corta a conta em torno de ~90% sem perder a integração nativa com Knowledge Bases nem as citações.
Alt: OpenSearch Serverless (clássico) — Mínimo de OCUs rodando 24/7: caro (~US$350–700/mês) mesmo com zero tráfego. Overkill para KB pequena.
Alt: OpenSearch Serverless NextGen — Escala a zero após ~10 min de ociosidade — boa alternativa também, mas confirme disponibilidade na sua região.
Alt: S3 Vectors + hierarchical chunking — Combinação não suportada: se escolher S3 Vectors, use fixed-size ou semantic chunking.
Depois de um POC, o time deletou a Knowledge Base que usava OpenSearch Serverless. No mês seguinte, a fatura continuou alta. Por quê?
Próximo passo
Você já sabe montar RAG gerenciado de ponta a ponta, escolher chunking e vector store, e evitar a armadilha de custo do OpenSearch ocioso. O passo natural é dar autonomia a esse conhecimento: deixar o modelo decidir quando buscar, quando chamar uma ferramenta e como encadear passos. É o próximo módulo — Agents e AgentCore: agents de IA em produção.
Perguntas frequentes
❓ Knowledge Bases substitui montar o RAG na mão?
❓ Como controlar quem pode ver o que num RAG gerenciado?
❓ Qual estratégia de corte usar no Knowledge Bases?
Terminou de ler?
Marcar como concluído registra o XP, mantém sua sequência e coloca 3 cartas deste módulo na fila de revisão espaçada.
Próximos passos sugeridos
Temas deste módulo
Discussão
Carregando comentários…