Cómo crear un asistente de IA Agentic RAG de coste $0 desde cero utilizando Cloudflare
Si todavía pagas $20 al mes por una base de datos vectorial gestionada y alojas tu chatbot de IA en funciones sin servidor con arranque en frío, lo estás haciendo mal.
Cuando decidí añadir un asistente de IA a mi portafolio, tenía dos requisitos estrictos: debe tener latencia cero, y debe costarme exactamente $0 ejecutarlo.
Logré ambos trasladando toda la arquitectura de IA al borde (edge). En este tutorial, te mostraré exactamente cómo construir un sistema Agentic RAG (Retrieval-Augmented Generation) con estado desde cero utilizando la plataforma de desarrollo de Cloudflare.
La arquitectura del stack de $0
Para mantener los costes en cero mientras mantenemos un rendimiento de nivel empresarial, dependemos completamente de los niveles gratuitos de Cloudflare:
- Cloudflare Workers: El tiempo de ejecución computacional en el borde. (Gratis hasta 100.000 peticiones/día).
- Cloudflare Vectorize: Nuestra base de datos vectorial para búsqueda semántica. (Gratis hasta 30 millones de dimensiones consultadas/mes).
- Cloudflare D1: Nuestra base de datos SQLite sin servidor para el historial de chat. (Gratis hasta 5 millones de filas leídas/día).
- Cloudflare AI Gateway: Para almacenar en caché las peticiones LLM y prevenir límites de tasa.
En lugar de un sistema RAG pasivo que simplemente mete documentos en un prompt, estamos construyendo un sistema Agentic. Esto significa que la IA se ejecuta en un bucle "ReAct" (Razonamiento y Acción), equipada con herramientas personalizadas que puede invocar dinámicamente basándose en la entrada del usuario.
Paso 1: Inicializando el Worker Edge
Primero, necesitamos poner en marcha un Cloudflare Worker. Este servirá como el cerebro de nuestra operación.
npm create cloudflare@latest agentic-assistant
cd agentic-assistant
Abre tu archivo wrangler.toml. Aquí es donde ocurre la magia. Necesitamos vincular nuestra base de datos D1 y nuestro índice Vectorize directamente al entorno del worker para que se ejecuten con una latencia cercana a cero.
name = "agentic-assistant"
main = "src/index.ts"
compatibility_date = "2026-05-01"
[[d1_databases]]
binding = "DB"
database_name = "chat_history"
database_id = "your-d1-id"
[[vectorize]]
binding = "KNOWLEDGE_BASE"
index_name = "rag-index"
Paso 2: Ingestionando la Base de Conocimientos
Antes de que nuestro agente pueda responder preguntas, necesita datos. Creé un archivo simple rag-data.ts que contiene mi experiencia profesional, servicios y precios.
Para incrustar estos datos en Cloudflare Vectorize, usamos los modelos nativos de incrustación de texto (embeddings) de Cloudflare Workers AI. Esto es mucho más barato (y rápido) que llamar a la API de embeddings de OpenAI.
import { Ai } from '@cloudflare/ai';
export default {
async fetch(request, env) {
const ai = new Ai(env.AI);
// 1. Generar la incrustación vectorial en el borde
const { data } = await ai.run('@cf/baai/bge-small-en-v1.5', {
text: "Elvis Li es un Desarrollador Full-Stack Solo especializado en IA."
});
// 2. Insertar directamente en Vectorize
await env.KNOWLEDGE_BASE.upsert([{
id: "bio-1",
values: data[0],
metadata: { category: "background" }
}]);
return new Response("Knowledge Base updated!");
}
}
Paso 3: Construyendo el Bucle ReAct de Invocación de Herramientas
Esto es lo que hace que el sistema sea Agentic. El RAG estándar simplemente busca en la base de datos vectorial a ciegas. Nuestro sistema le pide al LLM que decida si necesita buscar.
Utilizo Gemini 1.5 Pro a través de Cloudflare AI Gateway. Proporcionamos a Gemini un esquema JSON de las herramientas disponibles.
const tools = [
{
name: "query_knowledge_base",
description: "Usa esto para buscar en la base de datos vectorial hechos sobre Elvis.",
parameters: {
type: "object",
properties: {
query: { type: "string" }
},
required: ["query"]
}
}
];
Cuando el usuario pregunta, "¿Qué tipo de sistemas de IA construyes?", el worker intercepta la petición y desencadena el bucle del agente:
- La Petición (The Request): El worker envía el mensaje del usuario y la lista de herramientas a Gemini.
- El Pensamiento (The Thought): Gemini se da cuenta de que no conoce la respuesta, pero sabe que la herramienta
query_knowledge_basesí. Devuelve una respuestatool_call. - La Acción (The Action - RAG): El worker intercepta la llamada a la herramienta, toma la consulta de búsqueda generada por Gemini, la incrusta a través de Workers AI y consulta Cloudflare Vectorize.
- La Resolución (The Resolution): El worker devuelve los resultados de la búsqueda vectorial a Gemini, que luego sintetiza una respuesta natural y humana.
Todo esto ocurre dentro de un solo nodo periférico (edge node) ubicado físicamente cerca del usuario, resultando en tiempos de respuesta increíblemente rápidos.
Paso 4: Persistiendo el Estado con Cloudflare D1
Una IA es inútil si sufre de amnesia. Para hacer que el chatbot sea conversacional, debemos retener el historial de mensajes.
En lugar de configurar una instancia externa de PostgreSQL, utilizamos Cloudflare D1. Es SQLite construido sobre Objetos Duraderos (Durable Objects), lo que significa que se ejecuta en el borde junto con nuestro worker.
// Guardar la conversación localmente en el borde
await env.DB.prepare(`
INSERT INTO messages (session_id, role, content)
VALUES (?, ?, ?)
`).bind(sessionId, 'user', userQuery).run();
En cada petición entrante, el worker simplemente ejecuta SELECT * FROM messages WHERE session_id = ? para reconstruir el historial de chat antes de consultar al LLM. Dado que D1 es sin servidor y distribuido, esta consulta añade casi cero sobrecarga.
El Resultado: Nivel Empresarial, Coste Cero
Al aprovechar Cloudflare Workers, Vectorize y D1, eliminas la necesidad de bases de datos vectoriales gestionadas y costosas, Lambdas de arranque en frío y servidores de bases de datos dedicados.
El resultado es un sistema Agentic RAG completamente autónomo y con estado que cuesta $0 operar y responde más rápido que casi cualquier alternativa comercial. Si estás construyendo portafolios personales, páginas de inicio de startups o herramientas internas, esta es la arquitectura definitiva de 2026.

