🏗️ Arquitectura - ¿Quién quiere ser Millonario?
graph TD
classDef gold fill:#FFD700,stroke:#FF8C00,stroke-width:2px,color:#1a0533;
classDef cloudflare fill:#f38020,stroke:#fff,stroke-width:2px,color:#fff;
classDef db fill:#1a0533,stroke:#FFD700,stroke-width:2px,color:#FFD700;
User["👤 Jugador"] -->|HTTPS + Turnstile| CF["☁️ Cloudflare Network"]
CF -->|Routing| Worker["⚙️ Worker millonario
Hono.js"]
subgraph "¿Quién quiere ser Millonario? App"
Worker -->|Static Assets| Assets["📂 HTML/CSS
Imágenes"]
Worker -->|SQL Query| D1["🛢️ D1 Database
Preguntas Quiz"]
Worker -->|Validación| TS["🛡️ Turnstile
Bot Protection"]
Worker -->|1· embedding de la pregunta| EMB["🔢 bge-m3
multilingüe ES/EN/CA"]
EMB -->|vector 1024d| VEC["🧭 Vectorize
millonario-knowledge
48 fragmentos"]
VEC -->|2· top-4 filtrado por idioma| Worker
Worker -.->|respaldo si Vectorize falla| KV["🗄️ KV Store
fallback"]
Worker -->|3a· caché ON| GW["🔀 AI Gateway
millonario-gw · caché 300s
respuesta entera"]
GW -->|inferencia| AI["🧠 Workers AI
modelo seleccionable"]
Worker -->|3b· caché OFF: directo| AI
AI -->|SSE token a token| Worker
end
CF -->|snippets embebidos| AS["🔎 AI Search gestionado
instancia millonario"]
AS -->|indexa solo| R2["🪣 R2
millonario-knowledge-docs
48 documentos"]
class User gold;
class CF,Worker,AI,GW,EMB,AS cloudflare;
class D1,KV,VEC,R2 db;
class TS gold;
Què mirar a la demo
- Recuperació real. La pregunta es converteix en vector amb bge-m3 i es compara amb 48 fragments a Vectorize, filtrats per idioma. La barra de mètriques mostra quants fragments han alimentat la resposta.
- Streaming. Els tokens es pinten a mesura que arriben per SSE, així es veu el temps fins al primer token, no només el total.
- Cau contra streaming. Els dos tiren en direccions oposades, i l'interruptor del xat ho ensenya. Amb cau: la crida passa per l'AI Gateway, que ha d'acumular la resposta sencera per desar-la, així que no hi ha streaming — però repeteix la pregunta i la segona resposta torna en desenes de mil·lisegons. Sense cau: el Worker crida el model directament i el primer token arriba cap als 700 ms.
- Canvi de model. El selector canvia el model en calent entre quatre proveïdors. El servidor el valida contra una llista blanca.
- RAG fet a mà contra producte gestionat. Dos assistents conviuen a propòsit. El de l'esquerra del joc és el nostre: hi hem escrit el codi d'embeddings, recuperació i prompt. El de la dreta és Cloudflare AI Search, que indexa un bucket R2 pel seu compte i serveix xat i cerca sense codi de recuperació nostre. Mateix corpus, mateixa pregunta: compara les respostes i l'esforç que ha costat cadascuna.
← Enrere