Por qué esta arquitectura te debería importar
¡Hola Devs! Mira, hay un montón de tutoriales de RAG que funcionan en el notebook y mueren cuando llega el primer cliente enterprise. La diferencia entre "metí mis PDFs en un vector DB" y "lo puse en producción para miles de organizaciones con TTFB por debajo de 1 segundo" es ENORME — y ahí es exactamente donde se atora la mayoría de los equipos.
El caso de Gallup está bueno porque no inventaron nada exótico. Agarraron primitivas administradas y aburridas — Amazon Bedrock, Knowledge Bases, Kendra, Lambda, ElastiCache Serverless — y las armaron con disciplina. Resultado: producción en semanas, sin contratar equipo de MLOps, y el volumen de prompts subió ~7x desde junio de 2024.
Vamos a destripar esta arquitectura, las decisiones no obvias y dónde te va a morder si la copias sin pensar. 🚀
근거자료: AWS Architecture Blog — Gallup delivers real-time workplace coaching

La arquitectura, decodificada
En el fondo, es un pipeline de RAG con doble recuperación detrás de una API de streaming, con guardrails y observabilidad alrededor. Sigamos el camino de la petición.
1. Ingesta: dos fuentes, dos índices
# Flujo simplificado de ingesta
# Pipeline: investigación histórica + crawl del sitio en tiempo real
sources = {
"historico": "s3://gallup-research-archive/", # 90 años de estudios
"live": "https://www.gallup.com/insights/", # crawl diario
}
# Archivo estático → Bedrock Knowledge Bases (vector store administrado)
bedrock_kb.ingest(sources["historico"])
# Sitio en vivo → Kendra (híbrido: keyword + semántico)
kendra.index_crawl(sources["live"], refresh="diario")
¿Por qué dos índices y no uno solo? Porque la investigación histórica y las publicaciones recientes tienen características de recuperación distintas. El archivo es estable, denso, y se beneficia de similitud por embeddings. El sitio cambia todos los días y se beneficia del ranking híbrido de Kendra. Este es un patrón que vale la pena copiar. 😉
2. En el momento de la query: puntuar, filtrar, consolidar
# Procesamiento de la petición: búsqueda en ambos índices → filtro por confianza → consolidación
def responder(query_usuario: str, contexto_usuario: dict):
# Recupera de ambas fuentes en paralelo
hits_kb = bedrock_kb.retrieve(query_usuario, top_k=10)
hits_kendra = kendra.query(query_usuario, top_k=10)
# Filtra por threshold de confianza — este es el filtro clave
candidatos = [
h for h in (hits_kb + hits_kendra)
if h.confidence >= THRESHOLD_CONFIANZA
]
# Consolida y deduplica antes de mandar al LLM
contexto = consolidar(candidatos)
# Streaming vía Claude en Bedrock con guardrails aplicados
return bedrock.invoke_stream(
model="anthropic.claude",
prompt=armar_prompt(query_usuario, contexto, contexto_usuario),
guardrail_id=GUARDRAIL_ID,
)
El filtro por THRESHOLD_CONFIANZA hace un trabajo pesado aquí. Sin él, inundas la ventana de contexto con chunks marginalmente relevantes y el modelo empieza a alucinar conexiones. Con él, cambias recall por precisión — que es el tradeoff correcto para un asistente de coaching, donde una respuesta equivocada destruye la confianza.
3. La columna vertebral serverless
| Capa | Servicio | Por qué |
|---|---|---|
| Compute | AWS Lambda + FastAPI | Streaming en tiempo real sin administrar servidores |
| Cache de sesión | ElastiCache Serverless | Historial de conversación en sub-ms |
| Store durable | RDS for MySQL | Fuente de la verdad para prompts/respuestas/citas |
| KV rápido | DynamoDB | Insights contextuales por usuario |
| Métricas | Data Firehose → S3 | Tokens, TTFB, stop reasons para ajustar costo |
| Config | SSM Parameter Store | Cambiar modelo/política sin redeploy |
El SSM Parameter Store como hub de config es el movimiento subestimado. Poder cambiar versión de modelo o apretar guardrails sin deploy es lo que permite a un equipo pequeño operar esto a escala.

Lo que realmente movió la aguja
Desde junio de 2024, según los números publicados por Gallup:
| Métrica | Crecimiento |
|---|---|
| Prompts | ~7x |
| Conversaciones | ~4.5x |
| Usuarios activos | ~5.5x |
| Prompts por conversación | ~55% ↑ |
| TTFB (streaming) | Sub-segundo |
| Recuperación de sesión | Sub-milisegundo |
El aumento del 55% en prompts por conversación es el número más interesante. Eso muestra que los usuarios no están solo probando — están teniendo sesiones de coaching multi-turn. Eso es señal de product-market fit, no solo de tech.
Dónde este patrón te va a morder
Algunas advertencias honestas antes de que copies esta arquitectura:
- Mantener dos índices sí es trabajo. Sincronizar el crawl de Kendra con los embeddings de Knowledge Bases no es gratis. Si tu contenido no tiene una división clara estático/dinámico, usa un solo índice.
- Guardrails mid-stream son complicados. Intervenir después de que los tokens ya se enviaron al cliente significa que la UI debe manejar la retractación con elegancia. Diseña el frontend pensando en esto.
- ElastiCache Serverless escala con el uso. Sub-ms es genial hasta que tu volumen de conversaciones se multiplica por 10. Modela los costos antes de comprometerte.
- El threshold de confianza depende del modelo. Un threshold calibrado para Claude 3.5 se va a comportar mal cuando cambies a un modelo más nuevo. Versiona tus thresholds junto con los model IDs en SSM.
- Kendra no es barato. Para corpora más chicos, pgvector u OpenSearch Serverless pueden ser más económicos.
La señal del roadmap: agentes vienen en camino
Gallup está construyendo sobre Amazon Bedrock AgentCore — pasando de un asistente user-facing a una capa programática que otros sistemas pueden llamar. Este es el patrón a vigilar en 2025: los asistentes RAG se están volviendo la puerta de entrada, y la orquestación agéntica se está volviendo el back office.
Si quieres ver cómo otra hyperscaler maneja la capa de ruteo de inferencia ML a escala extrema, la arquitectura de model serving de Netflix es un gran contrapunto: How Netflix Routes 1M+ ML Inference Requests Per Second.
Y si le mueves al frontend de estos productos de IA, el roundup semanal de CSS cubriendo técnicas modernas como SVG favicons y morphing con anchor-interpolation vale la pena: CSS Weekly Roundup.

Qué llevarte a casa
El build de Gallup no es proyecto de investigación — es patrón operativo. Las tres decisiones que más importan:
- Administrado en vez de custom. Bedrock + Knowledge Bases + Kendra significó cero contratación de MLOps. Si tu equipo es chico, compra las primitivas.
- La UX de streaming no es negociable. TTFB por debajo de 1s es la diferencia entre una herramienta que la gente usa y una que abandonan.
- Ancla en datos verificados, no en vibes. El enfoque de doble indexación mantiene las respuestas ancladas en investigación en vez de dejar al LLM volar.
Próximos pasos
Si estás construyendo algo parecido:
- Empieza con Amazon Bedrock Knowledge Bases y un solo corpus. Haz que el loop de RAG funcione end-to-end antes de agregar Kendra.
- Instrumenta TTFB y tokens por respuesta desde el día 1. La sorpresa de costo mata estos proyectos.
- Lee la guía prescriptiva de AWS sobre buenas prácticas de escritura para aplicaciones RAG para evitar las trampas comunes de retrieval.
- Cuando estés listo para ir más allá del chat, mira Bedrock AgentCore para exponer tu conocimiento programáticamente.
La vara para IA enterprise cambió. Ya no es "¿puedes hacer un demo de RAG?" — es "¿puedes entregar un asistente anclado, observable y con costo controlado en el que miles de usuarios confíen?" El stack de Gallup es un blueprint sólido para responder que sí. 💪