Construye tu Chatbot con IA
Un chatbot con IA tiene una ilusión de memoria, pero en realidad los LLMs son "sin estado" —no recuerdan nada entre llamadas. La memoria se simula enviando el historial completo de conversación en cada request: imagina que cada vez que hablas con alguien, tienes que mostrarle toda la conversación anterior como recordatorio.
Esto funciona bien, pero tiene un límite: la ventana de contexto del modelo. Por eso debes mantener el historial acotado.
Este patrón —clase con historial + system prompt + limit de mensajes— es literalmente la base de ChatGPT, Claude.ai, y cualquier chatbot de IA que hayas usado. El system prompt define la personalidad del bot: si dices "eres un asistente amable de soporte técnico que responde en español con paciencia", el modelo actuará así consistentemente. Cuanto más específico sea el system prompt (tono, restricciones, formato), más predecible y útil será el chatbot.
// Chatbot con memoria de conversación
import OpenAI from "openai";
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY });
class ChatbotIA {
constructor(sistemaPrompt, maxHistorial = 20) {
this.sistemaPrompt = sistemaPrompt;
this.historial = [];
this.maxHistorial = maxHistorial;
}
async enviar(mensajeUsuario) {
// Agregar al historial
this.historial.push({
role: "user",
content: mensajeUsuario
});
// Mantener historial acotado (evita exceder contexto)
if (this.historial.length > this.maxHistorial) {
this.historial = this.historial.slice(-this.maxHistorial);
}
const respuesta = await openai.chat.completions.create({
model: "gpt-4o-mini",
messages: [
{ role: "system", content: this.sistemaPrompt },
...this.historial
],
temperature: 0.7,
});
const respuestaIA = respuesta.choices[0].message.content;
this.historial.push({ role: "assistant", content: respuestaIA });
return respuestaIA;
}
limpiar() { this.historial = []; }
}
// Chatbot de soporte técnico
const soporte = new ChatbotIA(`
Eres un asistente de soporte técnico de una app de aprendizaje.
Ayudas con: errores de código, conceptos de programación, y problemas técnicos.
Eres amable, paciente y explicas con ejemplos.
Si no sabes algo, lo dices honestamente.
Responde SIEMPRE en español.
`);
async function main() {
const r1 = await soporte.enviar("¿Cómo funciona async/await en JavaScript?");
console.log("Bot:", r1);
const r2 = await soporte.enviar("Dame un ejemplo práctico"); // Recuerda el contexto
console.log("Bot:", r2);
}
Practica esta lección
Resuelve los ejercicios del curso de IA para Devs en la app, gratis y con corrección automática.
Empezar a practicar