Chatbot tradicional vs LLM: diferencias que realmente importan
Cómo funciona un chatbot con clasificación de intents, cómo funciona uno basado en LLM, y cuándo elegir cada enfoque con ejemplos concretos.
Colaboradores: Esther Aznar
Para seguir este post necesitas saber Python básico. Los ejemplos de código son cortos y están comentados, pero ayuda reconocer la sintaxis.
Si alguna vez has escrito “quiero hablar con una persona” en el chat de soporte de una web y el bot ha respondido “No he entendido. Elige una opción: 1. Pedidos 2. Devoluciones”, ya sabes de primera mano lo que es un chatbot tradicional. Esa rigidez no es un error de diseño. Es exactamente cómo funcionan.
Cómo funciona un chatbot tradicional
Un chatbot tradicional funciona como un libro con respuestas fijas. Primero, defines todos los temas (llamados intents, o “temas” en español) que el chatbot puede entender. Por ejemplo:
-
Tema 1: El usuario quiere saber su saldo
-
Tema 2: El usuario quiere bloquear la tarjeta
Cuando el usuario escribe algo, el chatbot busca a cuál de estos temas se parece más. Si lo reconoce y tiene confianza de que es ese tema, ejecuta la respuesta ya preparada. Si no lo entiende, dice “No te he entendido”.
INTENTS = {
"consultar_saldo": {
# Frases que activan este intent
"ejemplos": ["ver mi saldo", "cuánto dinero tengo"],
"respuesta": "Tu saldo actual es de 340€."
},
"bloquear_tarjeta": {
"ejemplos": ["bloquear tarjeta", "me han robado la tarjeta"],
"respuesta": "Llama al 900 123 456 para bloquear tu tarjeta."
}
}
def procesar_mensaje(mensaje):
for nombre_intent, datos in INTENTS.items():
for frase in datos["ejemplos"]:
if frase in mensaje.lower(): # Busca coincidencia exacta
return datos["respuesta"]
return "No te he entendido. Elige: 1. Saldo 2. Tarjeta"
Además de reconocer temas, el chatbot también extrae datos específicos del mensaje. Si dices “bloquea mi tarjeta Visa”, el tema es “bloquear tarjeta” y el dato específico es “Visa”. El sistema sabe entonces cuál de tus tarjetas quieres bloquear.
El problema grande con este tipo de chatbot es que tienes que enseñarle todas las formas posibles en que los usuarios pueden pedir lo mismo. Si alguien dice “mi tarjeta no funciona” pero solo le enseñaste frases como “bloquear tarjeta” o “cancelar tarjeta”, el chatbot no lo entiende. Tienes que pensar en todas las formas posibles de pedir cada cosa, o dejar que una herramienta automática aprenda de tus ejemplos.
¿Cuándo funciona bien este enfoque? Cuando el usuario escribe exactamente lo que el sistema espera. Estas dos preguntas las gestiona sin problemas:
-
“¿Cuál es el horario de la tienda?” → intent
horario, respuesta fija. -
“Quiero hacer un pedido” → intent
nuevo_pedido, abre el flujo de compra.
Pero si el usuario escribe “me han cobrado algo raro esta semana y no sé si es de la suscripción o de otro lado”, el chatbot no tiene un intent para eso. No puede razonar sobre la ambigüedad. Devuelve “no te he entendido” y la conversación termina ahí.
Cómo funciona un chatbot con LLM
Un LLM (Large Language Model, o “modelo de lenguaje grande”) es una inteligencia artificial que ha leído millones de textos. No busca respuestas en una lista predefinida, sino que entiende el significado de lo que escribes y genera una respuesta nueva.
La diferencia es como si compares un empleado que solo conoce 20 respuestas memorizadas, con otro que ha estudiado miles de documentos sobre el tema y puede razonar y responder cualquier pregunta que le hagas de forma diferente cada vez.
Para crear un chatbot con LLM, lo primero que haces es darle instrucciones escritas. Le dices qué rol tiene (por ejemplo, “eres el asistente de un banco”), cómo debe hablar y qué cosas no puede hacer (por ejemplo, “no inventes datos de clientes”). El modelo lee estas instrucciones antes de responder cualquier pregunta del usuario.
import anthropic
client = anthropic.Anthropic() # Requiere ANTHROPIC_API_KEY como variable de entorno
# El system prompt define el rol y los límites del chatbot
SYSTEM_PROMPT = """Eres el asistente del Banco Ejemplo.
Nunca inventes saldos ni datos del cliente."""
def responder(pregunta):
# Enviamos la pregunta al modelo junto con las instrucciones
respuesta = client.messages.create(
model="claude-opus-4-6", # Para pruebas, claude-haiku-4-5-20251001 es más barato
max_tokens=500,
system=SYSTEM_PROMPT,
messages=[{"role": "user", "content": pregunta}]
)
return respuesta.content[0].text # El texto generado por el modelo
Si el chatbot maneja datos reales de usuarios, revisa los requisitos legales antes de enviarlos a un proveedor externo.
Ese chatbot responde “me han cobrado algo raro esta semana y no sé si es de la suscripción o de otro lado” sin problema. No hay ningún intent configurado para eso. El modelo entiende la pregunta y genera una respuesta útil.
Además, el modelo recuerda lo que pasó antes en la conversación. Si el usuario dijo “tengo dos tarjetas” y después pregunta “¿cuál debo cancelar?”, el modelo recuerda las dos tarjetas. Esto funciona porque el modelo tiene una “memoria” de la conversación. Aunque esta memoria tiene límites (no puede recordar conversaciones infinitamente largas).
El riesgo principal del LLM es la alucinación: el modelo puede generar una respuesta que suena correcta pero es inventada. Si le preguntas “¿cuánto saldo tengo?”, un LLM sin acceso a datos reales puede fabricar una cifra plausible. Por eso el system prompt del ejemplo incluye “nunca inventes saldos ni datos del cliente”. No elimina el riesgo del todo, pero lo reduce.
Cuándo usar cada uno
Chatbot tradicional: Úsalo cuando las preguntas siempre siguen el mismo patrón. Por ejemplo, un menú de soporte con opciones fijas: “¿Qué necesitas? 1. Ver saldo 2. Bloquear tarjeta 3. Horarios”.
Chatbot con LLM: Úsalo cuando los usuarios pueden preguntar de formas inesperadas. Por ejemplo, preguntas complejas o que mezclen varios temas.
| Aspecto | Chatbot tradicional | Chatbot con LLM |
|---|---|---|
| Configuración inicial | Alta: defines cada intent a mano | Baja: escribes el system prompt |
| Coste por conversación | Muy bajo | Depende del modelo y la longitud |
| Preguntas fuera del guión | No puede responder | Responde con flexibilidad |
| Respuestas predecibles | Sí, siempre la misma respuesta fija | No, varían según el contexto |
| Riesgo de inventar datos | No (respuestas hardcodeadas) | Sí, hay que controlarlo |
| Mantenimiento | Añadir y editar intents | Ajustar el system prompt y probar |
Elige chatbot tradicional si:
- Las respuestas son siempre iguales (estado de pedidos, horarios, preguntas frecuentes).
- El usuario sigue un menú o pasos predefinidos.
- Quieres ahorrar costes y máxima previsibilidad.
Elige chatbot con LLM si:
- Los usuarios hacen preguntas variadas o complejas.
- Un problema puede describirse de muchas formas distintas.
- Necesitas flexibilidad en las respuestas.
Ejemplos:
-
Pregunta simple: “¿A qué hora cierra?” → Chatbot tradicional. Tiene una respuesta fija.
-
Pregunta compleja: “Compré un producto que no funciona bien. ¿Puedo devolverlo si solo tengo la mitad del embalaje?” → LLM. Es una situación específica que necesita análisis.
Patrón híbrido: También puedes combinar los dos. El chatbot intenta responder con intents. Si no puede, pasa la pregunta al LLM. Esto es común en producción porque ahorras costes: el LLM solo interviene cuando lo necesitas.
El inconveniente es que tienes que mantener dos sistemas en paralelo y sincronizar cuándo pasar de uno a otro.
Si quieres profundizar en cómo escribir instrucciones efectivas para el LLM, el post sobre prompt engineering para desarrolladores cubre los patrones que más se usan en proyectos reales.
Preguntas Frecuentes
¿Un chatbot con LLM siempre es mejor que uno tradicional?
No. Para flujos cerrados y repetibles, el chatbot tradicional es más controlable y más barato de operar. Añadir un LLM donde no hace falta solo suma coste y complejidad.
¿Puede el LLM inventarse respuestas?
Sí, y es el riesgo principal. Las alucinaciones ocurren cuando el modelo genera texto que suena plausible pero no corresponde a la realidad. La forma de mitigarlo es ser explícito en el system prompt sobre qué datos puede y no puede proporcionar el modelo. Si necesitas precisión real, tienes que conectar el chatbot a fuentes de datos externas en lugar de confiar en lo que el modelo recuerde de su entrenamiento.
¿Puedo usar los dos enfoques juntos?
Sí. El patrón más habitual es usar un clasificador de intents para las preguntas frecuentes y el LLM como fallback para todo lo demás. Consigues velocidad y coste bajo para lo predecible, y flexibilidad para lo que no.
¿Qué pasa si el usuario hace preguntas en varios idiomas?
El chatbot tradicional solo funciona bien en los idiomas para los que hayas definido frases de ejemplo en cada intent. El LLM entiende directamente múltiples idiomas sin configuración adicional, aunque conviene indicar en el system prompt en qué idioma debe responder el modelo.