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

Enterprise AI assistant chat interface powered by Amazon Bedrock delivering personalized workplace coaching System Abstract Visual

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

CamadaServiçoPor quê
ComputeAWS Lambda + FastAPIStreaming em tempo real sem gerenciar servidor
Cache de sessãoElastiCache ServerlessHistórico de conversa em sub-ms
Store durávelRDS for MySQLFonte da verdade pra prompts/respostas/citações
KV rápidoDynamoDBInsights contextuais por usuário
MétricasData Firehose → S3Tokens, TTFB, stop reasons pra ajustar custo
ConfigSSM Parameter StoreMudar 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.

Serverless AWS architecture diagram with Lambda, Bedrock Knowledge Bases, and Kendra for RAG pipeline Technical Structure Concept

O que realmente moveu a agulha

Desde junho de 2024, segundo os números publicados pela Gallup:

MétricaCrescimento
Prompts~7x
Conversas~4.5x
Usuários ativos~5.5x
Prompts por conversa~55% ↑
TTFB (streaming)Sub-segundo
Recuperação de sessãoSub-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:

  1. 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ó.
  2. 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.
  3. ElastiCache Serverless escala com uso. Sub-ms é ótimo até seu volume de conversas multiplicar por 10. Modele os custos antes de commitar.
  4. 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.
  5. 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.

Cloud infrastructure dashboard showing token metrics, TTFB latency, and Firehose streaming to S3 Programming Illustration

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:

  1. Comece com Amazon Bedrock Knowledge Bases e um único corpus. Faça o loop de RAG funcionar end-to-end antes de adicionar Kendra.
  2. Instrumente TTFB e tokens por resposta desde o dia 1. Surpresa de custo mata esses projetos.
  3. Leia o guia prescritivo da AWS sobre boas práticas de escrita pra aplicações RAG pra evitar as armadilhas comuns de retrieval.
  4. 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. 💪

Este conteúdo foi elaborado com o auxílio de ferramentas de IA, com base em fontes confiáveis, e revisado pela nossa equipe editorial antes da publicação. Não substitui o aconselhamento de um profissional especializado.