Por que essa arquitetura merece sua atenção
Olha só, tem muito tutorial de RAG por aí que funciona no notebook e morre no primeiro cliente enterprise. A diferença entre "coloquei meus PDFs num vector DB" e "coloquei em produção pra milhares de organizações com TTFB abaixo de 1 segundo" é ENORME — e é exatamente aí que a maioria dos times trava.
O caso da Gallup é interessante porque eles não inventaram nada exótico. Pegaram primitivas gerenciadas e chatas — Amazon Bedrock, Knowledge Bases, Kendra, Lambda, ElastiCache Serverless — e montaram com disciplina. Resultado: produção em semanas, sem contratar time de MLOps, e volume de prompts subiu ~7x desde junho de 2024.
Bora destrinchar essa arquitetura, as decisões não-óbvias e onde isso vai te morder se você copiar sem pensar. 🚀
근거자료: AWS Architecture Blog — Gallup delivers real-time workplace coaching

A arquitetura na prática
No fundo, é um pipeline de RAG com dupla recuperação atrás de uma API de streaming, com guardrails e observabilidade em volta. Vamos seguir o caminho da requisição.
1. Ingestão: duas fontes, dois índices
# Fluxo simplificado de ingestão
# Pipeline: pesquisa histórica + crawl do site em tempo real
sources = {
"historico": "s3://gallup-research-archive/", # 90 anos de estudos
"live": "https://www.gallup.com/insights/", # crawl diário
}
# Arquivo estático → Bedrock Knowledge Bases (vector store gerenciado)
bedrock_kb.ingest(sources["historico"])
# Site ao vivo → Kendra (híbrido: keyword + semântico)
kendra.index_crawl(sources["live"], refresh="diario")
Por que dois índices e não um só? Porque pesquisa histórica e publicações recentes têm características de recuperação diferentes. O arquivo é estável, denso, e se beneficia de similaridade por embeddings. O site muda todo dia e se beneficia do ranking híbrido do Kendra. Esse é um padrão que vale roubar. 😉
2. Na hora da query: pontuar, filtrar, consolidar
# Processamento da requisição: busca nos dois índices → filtro por confiança → consolidação
def responder(query_usuario: str, contexto_usuario: dict):
# Recupera das duas fontes em paralelo
hits_kb = bedrock_kb.retrieve(query_usuario, top_k=10)
hits_kendra = kendra.query(query_usuario, top_k=10)
# Filtra por threshold de confiança — esse é o filtro chave
candidatos = [
h for h in (hits_kb + hits_kendra)
if h.confidence >= THRESHOLD_CONFIANCA
]
# Consolida e deduplica antes de mandar pro LLM
contexto = consolidar(candidatos)
# Streaming via Claude no Bedrock com guardrails aplicados
return bedrock.invoke_stream(
model="anthropic.claude",
prompt=montar_prompt(query_usuario, contexto, contexto_usuario),
guardrail_id=GUARDRAIL_ID,
)
O filtro por THRESHOLD_CONFIANCA faz um trabalho pesado aqui. Sem ele, você inunda a janela de contexto com chunks marginalmente relevantes e o modelo começa a alucinar conexões. Com ele, você troca recall por precisão — o que é a troca certa pra um assistente de coaching, onde resposta errada destrói confiança.
3. A espinha dorsal serverless
| Camada | Serviço | Por quê |
|---|---|---|
| Compute | AWS Lambda + FastAPI | Streaming em tempo real sem gerenciar servidor |
| Cache de sessão | ElastiCache Serverless | Histórico de conversa em sub-ms |
| Store durável | RDS for MySQL | Fonte da verdade pra prompts/respostas/citações |
| KV rápido | DynamoDB | Insights contextuais por usuário |
| Métricas | Data Firehose → S3 | Tokens, TTFB, stop reasons pra ajustar custo |
| Config | SSM Parameter Store | Mudar modelo/política sem redeploy |
O SSM Parameter Store como hub de config é o movimento subestimado. Conseguir trocar versão de modelo ou apertar guardrails sem deploy é o que permite um time pequeno operar isso em escala.

O que realmente moveu a agulha
Desde junho de 2024, segundo os números publicados pela Gallup:
| Métrica | Crescimento |
|---|---|
| Prompts | ~7x |
| Conversas | ~4.5x |
| Usuários ativos | ~5.5x |
| Prompts por conversa | ~55% ↑ |
| TTFB (streaming) | Sub-segundo |
| Recuperação de sessão | Sub-milissegundo |
O aumento de 55% em prompts por conversa é o número mais interessante. Isso mostra que os usuários não estão só testando — estão tendo sessões de coaching multi-turn. Isso é sinal de product-market fit, não só de tech.
Onde esse padrão vai te morder
Alguns avisos honestos antes de você copiar essa arquitetura:
- Manter dois índices dá trabalho. Sincronizar o crawl do Kendra com os embeddings do Knowledge Bases não é de graça. Se seu conteúdo não tem uma divisão clara estático/dinâmico, usa um índice só.
- Guardrails mid-stream são complicados. Intervir depois que tokens já foram enviados pro cliente significa que a UI precisa lidar com retratação com elegância. Projete o frontend pensando nisso.
- ElastiCache Serverless escala com uso. Sub-ms é ótimo até seu volume de conversas multiplicar por 10. Modele os custos antes de commitar.
- Threshold de confiança depende do modelo. Um threshold calibrado pro Claude 3.5 vai se comportar mal quando você trocar pra um modelo mais novo. Versione seus thresholds junto com os model IDs no SSM.
- Kendra não é barato. Pra corpora menores, pgvector ou OpenSearch Serverless podem ser mais econômicos.
O sinal do roadmap: agentes vindo aí
A Gallup está construindo em cima do Amazon Bedrock AgentCore — saindo de um assistente user-facing pra uma camada programática que outros sistemas podem chamar. Esse é o padrão pra ficar de olho em 2025: assistentes RAG virando a porta de entrada, e orquestração agêntica virando o back office.
Se você quer ver como outra hyperscaler lida com a camada de roteamento de inferência ML em escala extrema, a arquitetura de model serving da Netflix é um ótimo contraponto: How Netflix Routes 1M+ ML Inference Requests Per Second.
E se você mexe no frontend desses produtos de IA, o roundup semanal de CSS cobrindo técnicas modernas como SVG favicons e morphing com anchor-interpolation vale a leitura: CSS Weekly Roundup.

O que levar pra casa
O build da Gallup não é projeto de pesquisa — é padrão operacional. As três decisões que mais importam:
- Gerenciado em vez de custom. Bedrock + Knowledge Bases + Kendra significou zero contratação de MLOps. Se seu time é pequeno, compre as primitivas.
- UX de streaming não é negociável. TTFB abaixo de 1s é a diferença entre uma ferramenta que as pessoas usam e uma que abandonam.
- Ancore em dados verificados, não em vibes. A abordagem de dupla indexação mantém as respostas ancoradas em pesquisa em vez de deixar o LLM viajar.
Próximos passos
Se você tá construindo algo parecido:
- Comece com Amazon Bedrock Knowledge Bases e um único corpus. Faça o loop de RAG funcionar end-to-end antes de adicionar Kendra.
- Instrumente TTFB e tokens por resposta desde o dia 1. Surpresa de custo mata esses projetos.
- Leia o guia prescritivo da AWS sobre boas práticas de escrita pra aplicações RAG pra evitar as armadilhas comuns de retrieval.
- Quando estiver pronto pra ir além do chat, olhe o Bedrock AgentCore pra expor seu conhecimento programaticamente.
A régua pra IA enterprise mudou. Não é mais "você consegue fazer um demo de RAG?" — é "você consegue entregar um assistente ancorado, observável e com custo controlado que milhares de usuários confiam?" A stack da Gallup é um blueprint sólido pra responder sim. 💪