Cómo funciona la IA

Qué es un intent en NLP: la pregunta que todo asistente de voz tiene que responder primero

Antes de que Alexa ponga tu canción favorita, antes de que el chatbot del banco te diga tu saldo, hay una pregunta que el sistema tiene que responder sí o sí: ¿qué quiere hacer esta persona? Eso es detectar el intent. Y si el sistema falla en ese punto, todo lo demás da igual.

D
Equipo Día a día IA
Publicado
8 min lectura · Nivel: intermedio

¿Qué es un intent?

Un intent es la intención que hay detrás de una frase. No lo que dice literalmente, sino lo que quiere conseguir quien la dice. En procesamiento del lenguaje natural (NLP), detectar el intent es el primer paso para que un sistema pueda hacer algo útil con el texto que recibe.

Fíjate en estas tres frases:

Tres formas de decir lo mismo
→ Intent: SetAlarm
Pon una alarma para las 7
Despiértame mañana a las siete de la mañana
Que suene el despertador a las 7:00

Son frases distintas. Distintas palabras, distinta estructura. Pero el intent es idéntico en los tres casos: el usuario quiere programar una alarma. Un sistema bien construido tiene que ser capaz de llegar a esa conclusión sin importar cómo se lo digas.

Eso es, resumido, lo que hace la detección de intents: tomar una frase en lenguaje natural y clasificarla dentro de una de las acciones que el sistema sabe ejecutar.

El nombre en inglés

En la documentación técnica y en las herramientas del sector verás casi siempre el término en inglés: intent o intent detection. En español se habla de «intención» o «reconocimiento de intenciones», pero en la práctica todo el mundo usa el anglicismo directamente. No hay por qué evitarlo.

Utterances: lo que el usuario realmente dice

En NLP, cada frase que puede lanzar un usuario se llama utterance. Y aquí está uno de los retos más gordos del trabajo real: para un mismo intent puede haber cientos de utterances distintas.

En mi experiencia trabajando en Amazon Alexa, esto es lo que más tiempo consume y lo que más errores genera si no se hace bien. No basta con definir el intent. Hay que anticipar todas las formas en que alguien puede pedirte eso mismo, y cubrirlas con ejemplos de entrenamiento suficientes.

Un intent, muchas utterances posibles
→ Intent: GetWeather
¿Qué tiempo hace hoy?
¿Va a llover mañana en Madrid?
Dime el tiempo para este fin de semana
¿Necesito paraguas?
¿Cuántos grados hay ahora mismo?
Pronóstico para el jueves

La última de esa lista, «¿Necesito paraguas?», es la que suele fallar primero. Es una pregunta indirecta: no menciona el tiempo, no pregunta por la temperatura ni por la lluvia. Pero la intención es exactamente la misma. Un sistema que solo reconoce formas directas de preguntar deja fuera una parte importante de cómo habla la gente de verdad.

El problema de la cobertura

Lo que he visto en proyectos reales es que los equipos suelen entrenar bien las utterances «de manual» y se olvidan de las formas coloquiales, las preguntas indirectas y las formulaciones con errores tipográficos. Esos huecos son exactamente donde los usuarios se frustran.

Cómo detecta el sistema el intent

Un clasificador de texto

Por debajo, la detección de intents es un problema de clasificación de texto. El sistema tiene que leer una frase y decidir a cuál de las categorías predefinidas pertenece. Cada categoría es un intent.

Para entrenarlo, hace falta un conjunto de datos etiquetados: miles de utterances, cada una marcada con su intent correcto. El modelo aprende los patrones que relacionan ciertos tipos de frases con ciertos intents y, cuando recibe texto nuevo, predice la categoría más probable.

Utterance de entrada: "ponme un recordatorio para el lunes a las 9"

Predicciones del modelo (probabilidad por intent):
  SetReminder   →  0.91  ← ganador
  SetAlarm      →  0.06
  CreateCalendarEvent →  0.02
  Otros         →  0.01

El sistema no devuelve un sí o un no: devuelve una distribución de probabilidades. El intent con mayor puntuación gana, pero el umbral mínimo de confianza también importa. Si ningún intent supera cierto nivel de certeza, el sistema puede pedir confirmación al usuario en lugar de lanzarse a ejecutar algo que quizás no es lo que quería.

El umbral de confianza

Este parámetro es más importante de lo que parece. Si lo pones demasiado bajo, el sistema actúa cuando no debería y ejecuta acciones equivocadas. Si lo pones demasiado alto, el asistente pide confirmación constantemente y resulta desesperante.

❌ Umbral demasiado bajo
Usuario: «dile a Ana que llego tarde»
Sistema: ¿Quieres llamar a Ana? [ejecuta llamada sin confirmar]
→ El usuario quería enviar un mensaje, no llamar
✅ Umbral calibrado
Usuario: «dile a Ana que llego tarde»
Sistema: Voy a enviarle un mensaje a Ana. ¿Lo confirmas?
→ Detecta la ambigüedad y pide confirmación antes de actuar

Diseñar una taxonomía de intents

Aquí es donde se gana o se pierde el partido antes de escribir una sola línea de código. La taxonomía de intents es la lista de todas las acciones que el sistema puede reconocer. Diseñarla bien requiere entender a fondo qué hace el sistema y cómo hablan los usuarios reales.

Intents demasiado genéricos

Si defines un intent llamado Información que engloba «cuánto cuesta», «dónde estáis», «cuáles son vuestros horarios» y «qué productos tenéis», estás poniendo cuatro acciones completamente distintas en el mismo cajón. El modelo no sabrá qué responder porque el intent no le dice nada útil.

Intents demasiado específicos

El extremo contrario también es un problema. Si creas PreguntarPrecioProductoA, PreguntarPrecioProductoB y PreguntarPrecioProductoC como intents separados, el modelo tiene que aprender a distinguir entre frases casi idénticas. Los datos de entrenamiento se fragmentan, la precisión cae y el sistema resulta imposible de mantener.

Lo que funciona es encontrar el nivel de granularidad correcto: intents que representan una acción clara y diferenciada, con suficientes ejemplos de entrenamiento para cubrirla bien.

Intent Utterances típicas Acción resultante
SetAlarm «Pon una alarma», «Despiértame a las 8» Programar alarma con fecha/hora
GetWeather «¿Qué tiempo hace?», «¿Va a llover?» Consultar API meteorológica
PlayMusic «Pon música», «Reproduce algo de Sabina» Lanzar reproducción de audio
SendMessage «Manda un mensaje a papá», «Escríbele a Juan» Componer y enviar mensaje
FallbackIntent Cualquier cosa que no encaje en los anteriores Pedir reformulación o escalar

Ese último de la tabla, el FallbackIntent, es el más importante y el más ignorado. Siempre hay frases que el sistema no reconoce. Necesitas un intent de captura que gestione esos casos con gracia en lugar de dejar al usuario colgado.

Intent y slot: no son lo mismo, pero van juntos

Si has leído el artículo sobre slot tagging, ya sabes por dónde va esto. El intent y el slot son las dos piezas que forman el núcleo de cualquier sistema NLU.

El intent responde a «¿qué quiere hacer el usuario?». El slot responde a «¿con qué datos?». Puedes tener el intent perfectamente detectado y el sistema seguir sin poder ejecutar nada porque le faltan los parámetros.

Intent detectado — slots pendientes
Intent: SetAlarm
hora: no detectada ← falta
fecha: no detectada ← falta

Frase: «Pon una alarma» — ¿Para cuándo? El sistema necesita preguntar.

Cuando el intent está claro pero falta algún slot obligatorio, un buen sistema de gestión de diálogo lanza una pregunta de relleno: «¿A qué hora quieres que suene?». No adivina, no asume valores por defecto sin avisar. Pregunta lo que necesita y sigue adelante.

¿Qué pasa con los LLMs? ¿Usan intents?

Los modelos de lenguaje grandes como GPT o Claude no trabajan con una taxonomía fija de intents. No tienen una lista de acciones posibles a las que clasificar cada frase. En su lugar, entienden el contexto de forma más libre y generan una respuesta directamente.

Esto les da una flexibilidad enorme para conversaciones abiertas. Pero también significa que son más difíciles de controlar cuando necesitas que el sistema ejecute acciones concretas y predecibles. «Cancela mi pedido» en un LLM sin instrucciones claras puede generar una respuesta amable explicando que no puede hacer eso. En un sistema clásico con intent CancelOrder bien definido, lanza directamente el flujo de cancelación.

La tendencia actual

Lo que se está haciendo mucho ahora es usar un LLM como capa de comprensión que extrae el intent y los slots en formato estructurado (JSON), y luego pasar ese resultado a la lógica de negocio clásica. Combinas la flexibilidad del LLM con la fiabilidad del sistema de reglas. No es o uno o lo otro.

Prompt al LLM:
"Analiza esta frase y devuelve el intent y los slots en JSON.
Intents disponibles: SetAlarm, GetWeather, PlayMusic, SendMessage, Other.
Frase: 'Manda un WhatsApp a María diciéndole que llego en 10 minutos'

Respuesta:
{
  'intent': 'SendMessage',
  'slots': {
    'contacto': 'María',
    'plataforma': 'WhatsApp',
    'mensaje': 'Que llego en 10 minutos'
  }
}"

Este enfoque tiene sus limitaciones — los LLMs no siempre son consistentes con la taxonomía que les das — pero en muchos casos ofrece lo mejor de los dos mundos. Y personalmente creo que es hacia donde va la mayoría de sistemas en producción en los próximos años.


Preguntas frecuentes

¿Qué es un intent en NLP?

La intención que hay detrás de una frase. En procesamiento del lenguaje natural, detectar el intent significa identificar qué acción quiere ejecutar el usuario, independientemente de cómo lo haya formulado.

¿Cuál es la diferencia entre intent y slot?

El intent es el qué: lo que el usuario quiere hacer. El slot es el con qué: los datos concretos necesarios para completar esa acción. Son complementarios. Sin intent no sabes qué ejecutar; sin slots no tienes los parámetros para hacerlo.

¿Cómo detecta el sistema el intent?

Con un clasificador de texto entrenado con miles de utterances etiquetadas. El modelo aprende que frases completamente distintas comparten el mismo intent y generaliza eso a frases nuevas que nunca ha visto.

¿Qué pasa si el sistema no detecta bien el intent?

Ejecuta la acción equivocada o pide confirmación innecesaria. Es uno de los fallos más frustrantes para el usuario y uno de los más difíciles de diagnosticar porque no hay un error visible: el sistema simplemente hace algo que no esperabas.

¿Los LLMs como ChatGPT usan intent detection?

No de forma explícita. Infieren la intención del contexto de la conversación sin una taxonomía fija. Pero se pueden usar para extraer intents de forma estructurada mediante prompting, y muchos sistemas en producción lo hacen exactamente así.


El intent es el punto de partida de cualquier sistema conversacional. Si ese primer paso falla, nada de lo que venga después importa. No hay slot tagging, ni gestión de diálogo, ni respuesta bien construida que salve una mala detección de la intención. En mi experiencia, es donde más merece la pena invertir tiempo cuando diseñas un sistema de este tipo — y donde más se nota cuando no se ha hecho bien.

¿Te ha sido útil? Compártelo: