Producto Xelsus · Asistente de IA para sitios web
Sin RAG, a propósito: un asistente para sitios web construido en tres días y empaquetado para volver a desplegarse
Alfred responde a los visitantes en español o inglés usando solo el contenido del propio sitio. Lo interesante es todo lo que rodea al modelo: contexto en caché en lugar de infraestructura de búsqueda, ataques bloqueados antes de costar un token, pruebas que nunca llaman al modelo y una skill de agente que lo instala completo en otro sitio.
Probar Alfred en vivo ↗~3 días
Del primer commit a un asistente bilingüe en vivo y una skill de agente reutilizable
0 tokens
Gastados en intentos de inyección de prompt bloqueados. Un filtro previo responde antes de llamar al modelo
32
Pruebas de punta a punta en el navegador, contra un stream simulado para no llamar nunca al modelo
1 comando
Para instalar el asistente en otro sitio Next.js, mediante una skill de agente de código de IA
01
El problema
El sitio de un consultor era un portafolio estático. Los visitantes no podían preguntar “¿hacen esto?” y recibir una respuesta basada en los servicios, casos y artículos reales, en su propio idioma.
Las restricciones eran las de cualquier negocio pequeño: costo de operación cercano a cero, nada de afirmaciones inventadas sobre el negocio, nada de filtrar las instrucciones del asistente, y un endpoint público que iba a atraer abusos desde el primer día.
02
Por qué era difícil
- Un endpoint público invita a la inyección de prompts, a intentos de extraer las instrucciones y al spam de siempre.
- El asistente nunca debe inventar servicios, precios ni afirmaciones sobre el negocio que representa.
- El costo de operación tenía que mantenerse cerca de cero para un sitio personal.
- Las interfaces de chat con streaming son difíciles de probar, y las pruebas que llaman a un modelo real son lentas, inestables y se cobran.
- En hosting serverless, el trabajo programado después de una respuesta en streaming puede perderse sin aviso.
03
Qué construimos
Un widget de chat que acompaña al visitante entre páginas, una API con streaming y protecciones en capas, el contenido del sitio resumido y guardado en la caché del proveedor del modelo, y analítica de conversaciones. Después, todo se convirtió en una skill de agente que hace unas pocas preguntas de configuración e instala el asistente en otro sitio.
04
Dónde está la innovación
01
Sin RAG, a propósito
Una vez resumido, el sitio completo cabe en el contexto del modelo. Así que en lugar de una base vectorial y un pipeline de búsqueda que mantener, el contenido se sube una vez por idioma a la caché de contexto del proveedor y se renueva antes de que venza. El contexto en caché se cobra a una fracción de los tokens normales, y no hay nada extra que mantener sincronizado.
02
Ataques que cuestan cero tokens
Los mensajes que coinciden con patrones conocidos de inyección nunca llegan al modelo. El servidor los responde por su cuenta, en el mismo formato de streaming que una respuesta real, así que el visitante ve una respuesta amable y fiel al personaje y no se gasta un solo token. Es una capa entre varias: instrucciones reforzadas, un alcance acotado, una ventana corta de historial, un límite de respuesta y un límite de frecuencia.
03
Enlaces anclados, en el idioma del visitante
El asistente solo puede enlazar a una lista aprobada de páginas, debe usar el idioma de la conversación y no puede inventar anclas. Ante preguntas vagas pide aclaración en lugar de adivinar, y nunca cita precios.
04
Falla con elegancia
Si la caché de contexto no se puede crear, las mismas instrucciones van en línea y el visitante no nota nada. Cuando resultó que el hosting descartaba el trabajo programado después del streaming, el registro de conversaciones pasó al navegador, una vez completa la respuesta.
05
Pruebas que nunca llaman al modelo
Un fixture de pruebas reproduce exactamente el formato de streaming del AI SDK, así que 32 pruebas de punta a punta en el navegador cubren el comportamiento real del widget sin llamar al modelo, sin clave de API y sin cuenta que pagar.
06
Un desarrollo, una entrega repetible
Toda la implementación está empaquetada como una skill para agentes de código de IA. Hace unas pocas preguntas de configuración, detecta cómo está construido el sitio de destino, genera los archivos, crea las tablas de analítica con seguridad a nivel de fila cuando las herramientas de base de datos están conectadas, actualiza la política de seguridad y verifica el endpoint antes de terminar.
05
Dónde estuvo la ingeniería
Un asistente para sitios web es fácil de mostrar en una demo y difícil de operar en público. La mayor parte del trabajo estuvo en lo que el visitante nunca ve: qué le pasa a un mensaje antes del modelo, y qué pasa cuando algo falla.
Qué le pasa a un mensaje
Los controles que cada mensaje debe pasar antes de poder llegar al modelo.
Ruta de la solicitud
Cuatro controles antes del modelo
- Frecuencia
- Límite por dirección
- Filtro previo
- Patrones de inyección conocidos
- Historial
- Últimos 10 mensajes
- Respuesta
- Largo acotado
Si un control falla
- El visitante recibe una respuesta amable, fiel al personaje
- El modelo nunca se llama
- No se gasta ningún token
06
Resultados
- En vivo en el sitio de un consultor, respondiendo en español e inglés a partir de los servicios, casos y artículos del propio sitio.
- Construido en cerca de tres días, del primer commit a la skill de agente empaquetada.
- Los intentos de inyección que coinciden con patrones conocidos se responden sin llamar al modelo, sin gastar tokens.
- 32 pruebas de punta a punta cubren el widget contra un stream simulado, sin llamadas al modelo ni cuenta de API.
- Cada conversación queda registrada para analítica, así que el siguiente paso es medir qué preguntan realmente los visitantes y sumar un pequeño set de evaluación con preguntas fuera de alcance e intentos de inyección.
- El mismo asistente ya se puede instalar en otro sitio Next.js mediante una skill de agente guiada.
07
Lo que aprendimos en el camino
No todo asistente necesita RAG
RAG suele ser el reflejo automático. Cuando el contenido cabe en el contexto, guardarlo en caché es más simple, más barato y tiene menos piezas móviles. La búsqueda vale la pena cuando el contenido supera el contexto, no antes.
En serverless, el trabajo termina cuando termina el stream
El registro que corría después de la respuesta en streaming se perdía sin aviso en el hosting. Moverlo al navegador, una vez completa la respuesta, lo resolvió sin agregar infraestructura.
Un filtro es una capa, no un muro
El reconocimiento de patrones frena los ataques conocidos a bajo costo, pero nunca va a detectarlo todo. La protección real es el conjunto: alcance acotado, instrucciones reforzadas, contexto corto, respuestas limitadas y límites de frecuencia.
Stack
- Next.js
- React
- Vercel AI SDK
- Gemini 3 Flash
- Caché de contexto de Gemini
- Supabase (Postgres, seguridad por fila)
- GSAP
- Playwright
- Netlify
- Skills de Claude Code
- MCP
¿Quiere un asistente que solo diga lo que su sitio puede respaldar?
Construimos y desplegamos asistentes anclados al contenido de su sitio, con protecciones, analítica y pruebas desde el primer día.
Agende su discovery sessionAlfred funciona en vivo en el sitio de su autor. Las cifras de uso se agregarán cuando haya datos suficientes para reportarlas con honestidad.