La plataforma de Contoso Airlines ya está modernizada, y eso deja a la vista un montón de trabajo que sigue haciéndose a mano porque hasta ahora no había alternativa. El equipo de atención al pasajero clasifica cada día cientos de reclamaciones escritas en texto libre para decidir a quién van. En el check-in, un agente teclea los datos del pasaporte mirando el documento. Los avisos de embarque se dan en dos idiomas porque no hay locutores para más. Y el portal solo se entiende bien en español.

Nada de eso requiere entrenar un modelo: son capacidades que Azure ofrece como servicios listos para consumir. Esta lección recorre Azure AI Services, implementa cuatro casos reales de Contoso, explica Azure OpenAI Service y la generación aumentada por recuperación, y dedica un apartado completo —no un párrafo de cortesía— a lo que aquí no es opcional: sesgos, alucinaciones, privacidad, supervisión humana y revisión legal antes de que nada llegue a producción.

Contenido

  1. El catálogo de Azure AI Services
  2. El modelo de consumo: recurso, punto de conexión y autenticación
  3. Azure AI Language: clasificar las reclamaciones
  4. Document Intelligence, Speech y Translator
  5. Azure OpenAI Service y Azure AI Foundry
  6. Generación aumentada por recuperación (RAG)
  7. Azure Machine Learning: el ámbito propio
  8. IA responsable: la parte que no es opcional
  9. Coste por token y por transacción
  10. Errores Comunes y Consejos
  11. Ejercicios
  12. Conclusión

  1. El catálogo de Azure AI Services

Familia Servicio Qué hace Caso típico
Visión AI Vision Describe imágenes, lee texto (OCR), detecta objetos Verificar el estado del equipaje en fotos
Visión Face Detecta y compara rostros (acceso restringido) Embarque biométrico, con aprobación previa
Lenguaje AI Language Sentimiento, entidades, clasificación, resumen, preguntas Reclamaciones de pasajeros
Lenguaje Translator Traduce texto y documentos entre más de 100 idiomas Portal multilingüe
Habla AI Speech Voz a texto, texto a voz, traducción hablada Avisos de embarque
Documentos Document Intelligence Extrae campos estructurados de documentos Pasaporte en el check-in
Búsqueda AI Search Índice con búsqueda por texto, vectorial e híbrida Base del RAG del apartado 6
Decisión Content Safety Detecta contenido dañino en texto e imagen Filtrar entradas y salidas del asistente
Generativo Azure OpenAI Modelos de lenguaje y de incrustaciones Asistente de atención al pasajero

Todos comparten el mismo patrón de consumo: una API REST con SDK oficiales, facturación por transacción o por token, y ningún modelo que entrenar para empezar.

  1. El modelo de consumo: recurso, punto de conexión y autenticación

Se crea un recurso, que expone un punto de conexión y unas claves. El recurso multiservicio de Azure AI Services agrupa varias capacidades bajo un único punto de conexión, una sola facturación y un solo conjunto de permisos, y es lo que Contoso usa para no gestionar seis recursos sueltos:

az cognitiveservices account create \
  -g rg-contoso-reservas-pro -n ai-contoso-pro \
  --kind CognitiveServices --sku S0 --location westeurope \
  --custom-domain ai-contoso-pro \
  --assign-identity \
  --tags entorno=produccion proyecto=contoso-reservas \
         centro-coste=CC-1042 [email protected]

# Deshabilitar el acceso por clave: solo Entra ID
az cognitiveservices account update -g rg-contoso-reservas-pro -n ai-contoso-pro \
  --custom-properties '{"disableLocalAuth": true}'

# La identidad de la aplicacion, con su rol
az role assignment create --role "Cognitive Services User" \
  --assignee-object-id $(az identity show -g rg-contoso-seguridad-pro \
      -n id-contoso-api-pro --query principalId -o tsv) \
  --assignee-principal-type ServicePrincipal \
  --scope $(az cognitiveservices account show -g rg-contoso-reservas-pro \
      -n ai-contoso-pro --query id -o tsv)

Claves frente a Entra ID. El portal muestra dos claves y es tentador copiarlas. No lo hagas: son credenciales compartidas, no trazables, que acaban en un fichero de configuración y de ahí en un repositorio. La opción correcta es la de siempre en este curso: identidad administrada y DefaultAzureCredential, con disableLocalAuth para que las claves ni siquiera funcionen. Requiere un dominio personalizado en el recurso, por eso está --custom-domain.

  1. Azure AI Language: clasificar las reclamaciones

Contoso recibe reclamaciones en texto libre. Hoy alguien las lee y las reparte; con AI Language se clasifican, se les mide el sentimiento y se les extrae el número de vuelo automáticamente.

var cliente = new TextAnalyticsClient(
    new Uri("https://ai-contoso-pro.cognitiveservices.azure.com/"),
    new DefaultAzureCredential());          // sin claves

var reclamacion = "Mi vuelo CA-1187 se retraso 4 horas y perdi la conexion en Paris. " +
                  "Nadie del mostrador supo darme informacion. Exijo una compensacion.";

// 1. Sentimiento, con opiniones sobre aspectos concretos
var opciones = new AnalyzeSentimentOptions { IncludeOpinionMining = true };
DocumentSentiment sent = await cliente.AnalyzeSentimentAsync(reclamacion, "es", opciones);

// 2. Entidades: de aqui sale el numero de vuelo y el lugar
var entidades = await cliente.RecognizeEntitiesAsync(reclamacion, "es");
var vuelo = entidades.Value
    .FirstOrDefault(e => e.Category == "Event" || e.Text.StartsWith("CA-"))?.Text;

Console.WriteLine($"{sent.Sentiment} {sent.ConfidenceScores.Negative} {vuelo}");

La respuesta, resumida:

{
  "sentiment": "negative",
  "confidenceScores": { "positive": 0.01, "neutral": 0.04, "negative": 0.95 },
  "sentences": [{
    "targets": [ { "text": "mostrador", "sentiment": "negative" } ],
    "assessments": [ { "text": "nadie supo darme informacion", "sentiment": "negative" } ]
  }],
  "entities": [
    { "text": "CA-1187", "category": "Event", "confidenceScore": 0.88 },
    { "text": "4 horas", "category": "Quantity", "subcategory": "Duration" },
    { "text": "Paris",   "category": "Location", "confidenceScore": 0.99 }
  ]
}

Tres cosas que leer bien. confidenceScores no es una probabilidad de verdad, es la confianza del modelo, y un 0,95 negativo no equivale a certeza. La extracción de opiniones identifica sobre qué es negativo el pasajero —el mostrador—, que es lo accionable. Y confidenceScore: 0.88 en el vuelo significa que uno de cada ocho casos puede fallar: por eso el flujo de Contoso no rechaza una reclamación sin número de vuelo, la deriva a revisión humana.

La clasificación por departamento se hace con clasificación personalizada: se etiquetan unos cientos de reclamaciones históricas por categoría —equipaje, retrasos, atención, reembolsos— y el servicio entrena un modelo propio sobre el catálogo de Contoso. Ahí sí hay entrenamiento, pero de un clasificador ligero, no de un modelo de lenguaje. El resultado alimenta el flujo de 06-04, que enruta cada reclamación a su equipo.

  1. Document Intelligence, Speech y Translator

Document Intelligence en el check-in en línea. El modelo preconstruido de documentos de identidad lee un pasaporte y devuelve campos estructurados con su nivel de confianza:

var di = new DocumentIntelligenceClient(
    new Uri("https://ai-contoso-pro.cognitiveservices.azure.com/"),
    new DefaultAzureCredential());

var operacion = await di.AnalyzeDocumentAsync(
    WaitUntil.Completed, "prebuilt-idDocument", BinaryData.FromStream(imagenPasaporte));
var doc = operacion.Value.Documents[0];

foreach (var campo in new[] { "FirstName", "LastName", "DocumentNumber", "DateOfExpiration" })
{
    var valor = doc.Fields[campo];
    // Umbral de negocio: por debajo de 0,85 el dato lo confirma una persona
    var requiereRevision = valor.Confidence < 0.85;
    Console.WriteLine($"{campo}: {valor.Content} ({valor.Confidence:P0}) revision={requiereRevision}");
}

El umbral de confianza es una decisión de negocio, no técnica. Contoso lo fija en 0,85 para los campos que van al sistema de reservas, y por debajo el dato se presenta al pasajero para que lo confirme. Un pasaporte mal leído significa un pasajero que no embarca.

AI Speech para los avisos de embarque. La síntesis de voz neuronal genera el audio en varios idiomas a partir de un texto, y se controla finamente con SSML —velocidad, pausas y, sobre todo, la pronunciación correcta de los códigos de vuelo y las puertas, que es donde la voz sintética suele fallar—. Contoso genera el audio una vez por combinación de vuelo, puerta e idioma y lo cachea en sttarjetascontosopro: los avisos se repiten, y regenerarlos cada vez sería pagar lo mismo mil veces.

Translator para el portal. Traduce el contenido dinámico —descripciones de tarifas, avisos, condiciones— a varios idiomas de una sola llamada. Dos precauciones: el contenido legal y las condiciones de transporte no se publican con traducción automática sin revisión, y los términos propios de Contoso se fijan con un diccionario personalizado, para que «Contoso Millas» no acabe traducido como «Contoso Miles» en la mitad de las páginas.

  1. Azure OpenAI Service y Azure AI Foundry

Azure OpenAI Service ofrece los modelos de OpenAI dentro de Azure, con lo que eso implica: tus datos permanecen en tu recurso y en tu región, no se usan para entrenar los modelos, y se aplican RBAC, redes privadas y registros como a cualquier otro recurso. Azure AI Foundry es el portal y el SDK unificados desde donde se exploran modelos, se despliegan, se prueban con un patio de juegos, se evalúan y se supervisan.

az cognitiveservices account create -g rg-contoso-reservas-pro -n oai-contoso-pro \
  --kind OpenAI --sku S0 --location swedencentral --custom-domain oai-contoso-pro \
  --tags entorno=produccion proyecto=contoso-reservas centro-coste=CC-1042 \
         [email protected]

# Un despliegue = un modelo con su capacidad asignada
az cognitiveservices account deployment create -g rg-contoso-reservas-pro \
  -n oai-contoso-pro --deployment-name asistente-pasajero \
  --model-name <modelo> --model-version <version> --model-format OpenAI \
  --sku-name Standard --sku-capacity 30

Fíjate en que el modelo y la versión van entre marcadores a propósito. El catálogo de modelos disponibles cambia constantemente: aparecen versiones nuevas, otras se retiran con fecha de fin de vida, y la disponibilidad varía por región y por tipo de despliegue. Consulta siempre la documentación oficial antes de fijar un modelo, y fija la versión explícitamente en producción en lugar de dejar que se actualice sola, porque un cambio de modelo puede alterar el comportamiento del asistente de un día para otro. La sku-capacity se expresa en miles de tokens por minuto y es tu límite de rendimiento: superarlo devuelve 429.

  1. Generación aumentada por recuperación (RAG)

Contoso quiere un asistente que responda a los pasajeros sobre equipaje, tarifas, mascotas y cambios de billete. La primera idea de todo el mundo es «entrenar el modelo con nuestros documentos». No se hace así, y por cuatro razones sólidas: es caro y lento, hay que repetirlo cada vez que cambian las condiciones, el modelo resultante no sabe citar la fuente de lo que dice, y no hay forma de aplicar permisos —un modelo entrenado con documentos internos los revela a quien pregunte bien—.

La solución es RAG: no se cambia el modelo, se le da el contexto adecuado en cada pregunta.

graph LR
  DOC["Condiciones de transporte,<br/>tarifas, politicas de equipaje"] --> IDX["Indexacion:<br/>trocear + incrustar"]
  IDX --> AIS["Azure AI Search<br/>srch-contoso-conocimiento-pro<br/>indice hibrido + vectorial"]
  P["Pasajero:<br/>Puedo llevar mi gato en cabina?"] --> EMB["Incrustar la pregunta"]
  EMB --> AIS
  AIS -->|"3-5 fragmentos<br/>mas relevantes"| PR["Construir el mensaje:<br/>instrucciones + fragmentos + pregunta"]
  PR --> LLM["Azure OpenAI<br/>asistente-pasajero"]
  LLM --> R["Respuesta con<br/>cita de la fuente"]
  R --> CS["Content Safety<br/>+ revision de umbral"]

El flujo, paso a paso:

  1. Indexación (fuera de línea): los documentos se trocean en fragmentos de unos cientos de palabras con solapamiento, cada fragmento se convierte en un vector de incrustación y se guarda en el índice junto al texto original y sus metadatos.
  2. Recuperación: la pregunta del pasajero se incrusta con el mismo modelo y se buscan los fragmentos más cercanos. La búsqueda híbrida —vectorial más palabras clave, con reordenación semántica— funciona claramente mejor que cualquiera de las dos por separado, porque lo vectorial capta el significado y lo léxico acierta con los términos exactos como «CA-1187» o «23 kg».
  3. Generación: se construye el mensaje con instrucciones estrictas —«responde solo con la información proporcionada; si no está, dilo y ofrece contacto humano»—, los fragmentos recuperados y la pregunta.
  4. Respuesta con cita: el modelo indica de qué fragmento sale cada afirmación, y ahí está la diferencia clave con el reentrenamiento: la respuesta es verificable.

La pieza de recuperación es Azure AI Search (srch-contoso-conocimiento-pro), con búsqueda vectorial e híbrida y filtros de seguridad para que un pasajero nunca recupere fragmentos internos. Pero hay una alternativa que Contoso ya tiene en casa: la extensión pgvector de psql-contoso-tripulaciones-pro, mencionada en 03-05, permite guardar incrustaciones y buscar por similitud en la misma base de datos donde ya viven los datos de tripulaciones. La decisión:

Azure AI Search pgvector en PostgreSQL
Búsqueda híbrida y reordenación semántica Sí, integradas Manual
Ingesta e indexación automáticas Sí, con indexadores Tú la construyes
Los datos ya están ahí No: hay que copiarlos Sí
Filtros junto a datos relacionales Limitados Consulta SQL completa
Coste Servicio aparte Incluido en la base de datos

Regla práctica: si el conocimiento son documentos, AI Search; si son filas que ya están en tu base de datos y el volumen es moderado, pgvector. Contoso usa AI Search para las condiciones de transporte, y pgvector para la búsqueda por similitud de perfiles de tripulación, donde el filtro relacional —certificaciones vigentes, base operativa, horas disponibles— es tan importante como la similitud.

  1. Azure Machine Learning: el ámbito propio

Cuando el problema no tiene un servicio listo, toca entrenar. Contoso quiere predecir la demanda de asientos por ruta y fecha para ajustar tarifas, y eso depende de sus datos históricos: nadie vende un servicio que lo sepa.

Azure Machine Learning cubre ese ciclo completo —cuadernos, experimentos, entrenamiento distribuido en clústeres de cómputo, registro de modelos y conjuntos de datos, puntos de conexión gestionados para inferencia y supervisión de la deriva del modelo—, y encaja con lo que ya sabes: los datos salen de stlagocontosopro, el entrenamiento se lanza desde un pipeline y el modelo se registra con versión. Es un mundo propio, con su propia curva, y aquí solo hay que retener el criterio: servicios listos para capacidades genéricas, Azure ML cuando el valor está en tus datos. Su mayor coste, además, es el cómputo del entrenamiento: apaga los clústeres o configúralos para escalar a cero nodos, porque un clúster de GPU olvidado encendido es de las facturas más caras que se pueden generar en Azure.

  1. IA responsable: la parte que no es opcional

Todo lo anterior tiene una condición previa. Contoso no puede poner un asistente a responder a pasajeros ni un clasificador a decidir sobre reclamaciones sin haber resuelto esto, y no por burocracia: porque los riesgos son reales y afectan a personas.

Sesgos. Los modelos aprenden de datos históricos y reproducen sus desigualdades. Un clasificador de reclamaciones entrenado con decisiones pasadas hereda los sesgos de quienes las tomaron; un reconocimiento de voz funciona peor con acentos poco representados en el entrenamiento, y en un aeropuerto eso significa peor servicio a parte de los pasajeros. Hay que medir el rendimiento por segmentos, no solo la precisión global, porque una media buena puede esconder un grupo mal atendido.

Alucinaciones. Un modelo generativo produce texto plausible, no verdadero. Si el asistente afirma con total seguridad que un pasajero puede llevar 32 kg cuando el límite son 23, ese pasajero llega al mostrador con un problema y una captura de pantalla. Por eso RAG con instrucciones estrictas, citas obligatorias, respuesta explícita de «no lo sé» y nunca una afirmación sobre dinero, derechos o documentación sin fuente verificable.

Privacidad y residencia de los datos. Todo lo que se envía a un servicio de IA sale de tu aplicación. Los pasaportes, las reclamaciones y las conversaciones contienen datos personales y, a veces, datos de categoría especial —salud, en una reclamación por asistencia médica—. Las obligaciones concretas: fijar la región del recurso conforme a la política de residencia; minimizar y anonimizar antes de enviar, quitando lo que no hace falta para la tarea; entender el registro de la plataforma y solicitar la exención de supervisión humana de contenidos cuando el caso lo justifique y se apruebe; no enviar datos de menores ni de categoría especial sin base legal explícita; y fijar la retención, sabiendo que los datos indexados en AI Search son una copia que también hay que gobernar y borrar cuando toque.

Filtro de contenido. Azure OpenAI aplica filtrado de contenido dañino en entrada y salida por defecto, con niveles configurables, y Content Safety permite añadir comprobaciones propias. No lo desactives: es la última barrera ante un intento de manipulación del asistente o una respuesta inadecuada a un pasajero alterado.

Supervisión humana. En toda decisión que afecte a una persona, el sistema propone y una persona decide. Denegar una compensación, rechazar una identificación en el check-in o clasificar una reclamación como improcedente no pueden ser decisiones automáticas y finales. El diseño correcto es: la IA prioriza y prerrellena, el agente confirma, y siempre hay un camino para hablar con un humano.

Marco y cumplimiento. El marco de IA responsable de Microsoft —equidad, fiabilidad y seguridad, privacidad, inclusión, transparencia y responsabilidad— se traduce en artefactos concretos: evaluación de impacto, notas de transparencia del servicio, pruebas adversarias antes de publicar y supervisión continua. En el plano legal, el RGPD exige base jurídica, información al interesado, minimización y respuesta a los derechos de acceso y supresión; y el Reglamento Europeo de IA clasifica los sistemas por riesgo, con obligaciones reforzadas para los de alto riesgo y, para todo sistema que interactúa con personas, la obligación de informar de que se está hablando con una IA. El uso de reconocimiento facial en el embarque es precisamente el caso que entra en la categoría más exigente.

La regla operativa de Contoso, y la que debe salir de esta lección: nada que use IA llega a producción sin la revisión previa del equipo legal y de compliance, con documentación de qué datos se envían, a qué servicio, en qué región, con qué retención, qué decisiones toma el sistema y cuáles son las de una persona. No es un trámite: es la diferencia entre un proyecto que sobrevive a la primera auditoría y uno que hay que apagar.

  1. Coste por token y por transacción

Dos modelos de facturación conviven. Los servicios de AI Services cobran por transacción —por documento, por imagen, por millón de caracteres, por hora de audio—, con un nivel gratuito limitado. Azure OpenAI cobra por token, contando tanto la entrada como la salida, con precios distintos para cada una.

Lo que dispara la factura sin que nadie lo vea venir es casi siempre lo mismo. En RAG, el contexto: si en cada pregunta se envían diez fragmentos largos más un historial de conversación de veinte turnos, cada pregunta cuesta lo que veinte preguntas simples. Los bucles de reintento sobre un modelo caro. La regeneración de lo que no ha cambiado, como sintetizar el mismo aviso de embarque mil veces. Y los clústeres de entrenamiento de Azure ML encendidos.

Cómo controlarlo: cachear agresivamente lo determinista (avisos de voz, traducciones de contenido estable); limitar el número de fragmentos y resumir el historial en lugar de arrastrarlo entero; usar un modelo pequeño para las tareas simples y reservar el grande para lo que lo necesita; fijar max_tokens en la salida; aplicar cuotas por despliegue y alertas de presupuesto en rg-contoso-reservas-pro (módulo 8); y en desarrollo, usar el nivel gratuito y eliminar los recursos al terminar. Un recurso de AI Services sin uso apenas cuesta, pero un despliegue de Azure OpenAI con rendimiento aprovisionado factura por capacidad reservada, se use o no.

Errores Comunes y Consejos

  • Usar claves en lugar de Entra ID. Acaban en un repositorio. disableLocalAuth y DefaultAzureCredential.
  • Tratar la confianza del modelo como una certeza. Fija umbrales de negocio y deriva a revisión humana por debajo.
  • Intentar «entrenar el modelo con nuestros datos» cuando lo que se necesita es RAG. Caro, lento, sin citas y sin permisos.
  • Enviar datos personales sin minimizar ni comprobar la región. Es un incidente de protección de datos, no un error técnico.
  • Fijar el modelo sin versión y descubrir que el asistente cambia de comportamiento solo.
  • Arrastrar todo el historial de conversación en cada llamada. El coste crece cuadráticamente con la conversación.
  • Desactivar el filtro de contenido para «que no moleste». Es la última barrera.
  • Dejar encendido un clúster de entrenamiento de Azure ML. Escalado a cero nodos, siempre.
  • Consejo: guarda las preguntas sin respuesta del asistente. Son la mejor lista de qué falta en la base de conocimiento.
  • Consejo: mide la calidad con un conjunto de preguntas de referencia y respuestas correctas, y vuelve a pasarlo en cada cambio de modelo o de mensaje del sistema. Sin eso, «funciona mejor» es una opinión.

Ejercicios

Ejercicio 1. Contoso Millas quiere un asistente que responda a los socios sobre su saldo de millas, las condiciones del programa y cómo canjear premios.

  1. Diseña la arquitectura indicando qué parte es RAG, qué parte es consulta a datos y por qué no se resuelven igual.
  2. Elige entre Azure AI Search y pgvector para cada tipo de contenido y justifícalo.
  3. Enumera cinco requisitos de IA responsable que impondrías antes de publicarlo, y las etiquetas del recurso.

Ejercicio 2. El clasificador de reclamaciones lleva un mes en producción. La precisión global es del 91 %, pero el equipo de equipaje se queja de recibir reclamaciones que no le corresponden, y una auditoría detecta que las reclamaciones escritas en catalán se clasifican peor que las escritas en español.

  1. ¿Por qué la precisión global del 91 % no contradice ninguna de las dos quejas?
  2. Propón cómo diagnosticar cada problema y cómo corregirlo.
  3. ¿Qué salvaguarda de diseño debería haber existido desde el principio?

Ejercicio 3. El asistente de atención al pasajero responde a un pasajero que tiene derecho a 600 € de compensación por su retraso. La cifra es incorrecta: le corresponden 250 €.

  1. Explica los dos fallos técnicos posibles.
  2. Da tres medidas concretas para que esa respuesta nunca se hubiera emitido.
  3. ¿Qué consecuencias legales y de compliance tiene, y quién debía haberlo revisado?

Soluciones

Solución 1:

  1. Son dos problemas distintos. El saldo de millas es un dato concreto de un socio identificado: se resuelve con una llamada a la API de Contoso Millas, autenticada como ese socio, y el modelo solo redacta la respuesta con el dato que recibe. Jamás debe salir de un índice ni de la memoria del modelo, porque sería un dato personal recuperable por otros y probablemente desactualizado. Las condiciones del programa y el canje de premios son documentación estable: eso sí es RAG, con fragmentos citables. La arquitectura es un asistente con dos caminos: uso de herramienta para el dato personal, recuperación para el conocimiento general.
  2. Azure AI Search para las condiciones y el catálogo de premios: son documentos, se benefician de la búsqueda híbrida y la reordenación semántica, y hay indexadores que los mantienen actualizados. pgvector si se añadiera una búsqueda por similitud sobre datos que ya viven en una base relacional —por ejemplo, encontrar premios parecidos a uno agotado combinando similitud con filtros de disponibilidad y categoría—, porque ahí la consulta SQL junto al vector es lo que hace el trabajo.
  3. (a) Informar explícitamente de que se habla con una IA, exigido por el Reglamento Europeo de IA. (b) Citar la fuente en toda afirmación sobre condiciones o derechos, y responder «no lo sé» con derivación a un agente cuando no haya fragmento que la respalde. (c) Filtro de contenido activo en entrada y salida. (d) Ninguna decisión final automática sobre canjes o reclamaciones: la IA propone y una persona confirma. (e) Minimización de datos: no enviar al modelo más datos personales que los imprescindibles, con la región fijada y una retención definida y documentada. Todo ello revisado por legal y compliance antes de publicar. Etiquetas: entorno, proyecto=contoso-millas, centro-coste=CC-2077 y propietario.

Solución 2:

  1. Porque la precisión global es una media que oculta la distribución. Un 91 % general es compatible con un 97 % en las categorías mayoritarias y un 60 % en equipaje si esa categoría es minoritaria; y es compatible con un 93 % en español y un 70 % en catalán si el catalán es una fracción pequeña del volumen. Una media buena puede esconder un grupo sistemáticamente mal atendido, y ese es exactamente el mecanismo por el que un sesgo pasa desapercibido.
  2. Diagnóstico: matriz de confusión por categoría para ver con qué se confunde equipaje, y métricas segmentadas por idioma sobre un conjunto de evaluación equilibrado. Corrección del primer problema: revisar los ejemplos de entrenamiento de equipaje —probablemente pocos o mal etiquetados—, añadir casos representativos, especialmente los fronterizos con retrasos, y reentrenar. Corrección del segundo: incorporar reclamaciones reales en catalán al conjunto de entrenamiento, evaluar la detección de idioma previa, y valorar un modelo por idioma o la traducción previa si el volumen no da para entrenar bien.
  3. Métricas segmentadas desde el primer día, con un conjunto de evaluación que represente todos los idiomas y categorías, y un umbral mínimo por segmento —no solo global— como criterio de publicación. Y, en paralelo, una vía de retorno: que el equipo receptor pueda marcar una reclamación como mal clasificada, generando datos de mejora en lugar de quejas.

Solución 3:

  1. (a) Alucinación: la recuperación no encontró el fragmento correcto y el modelo completó con conocimiento general —el reglamento europeo prevé 600 € para ciertos tramos— sin base en la documentación de Contoso. (b) Recuperación incorrecta: se recuperó el fragmento equivocado, por ejemplo el de vuelos de largo radio en lugar del que aplica a esa distancia, y el modelo respondió correctamente sobre una fuente errónea. La segunda es más frecuente y más peligrosa, porque la respuesta viene con cita y parece verificada.
  2. (a) Sacar el cálculo del modelo: la compensación se calcula con la función CalcularCompensacion de 06-03, que aplica las reglas de forma determinista, y el modelo solo redacta el resultado. Un importe legal nunca debe ser generado por un modelo de lenguaje. (b) Instrucción explícita de no dar cifras de compensación y derivar siempre a esa herramienta o a un agente. (c) Detección de patrones sensibles —importes, derechos, documentación— en la salida, que fuerce revisión humana antes de enviarla, con el aviso de que la respuesta es informativa y no vinculante.
  3. Consecuencias: se ha creado una expectativa legítima en el pasajero, con riesgo de reclamación y de sanción por información engañosa; en términos de protección al consumidor y del Reglamento Europeo de IA, es un sistema que informa incorrectamente sobre derechos, con obligaciones de transparencia y supervisión que no se han cumplido. Debía haberlo revisado el equipo legal y de compliance antes de la publicación, definiendo qué preguntas puede responder el asistente y cuáles derivan obligatoriamente a un humano; y el equipo de producto debía haber ejecutado pruebas adversarias con casos límite de compensación antes de exponerlo a pasajeros reales.

Conclusión

Ya conoces el catálogo de Azure AI Services y cómo se organiza —visión, habla, lenguaje, documentos, búsqueda y decisión—, y el modelo de consumo común: un recurso multiservicio como ai-contoso-pro con su punto de conexión, y la elección que no admite atajos, autenticación con Entra ID e identidad administrada en lugar de claves, con disableLocalAuth para cerrar la puerta del todo. Has implementado los cuatro casos de Contoso: AI Language clasificando reclamaciones, midiendo sentimiento y extrayendo el número de vuelo, con la lectura crítica de los niveles de confianza; Document Intelligence leyendo el pasaporte en el check-in con un umbral de negocio que deriva a revisión humana; AI Speech generando avisos de embarque multilingües cacheados; y Translator con sus dos precauciones, el contenido legal y el diccionario de términos propios.

Sabes qué es Azure OpenAI Service y Azure AI Foundry, cómo se despliega un modelo con su capacidad, y que el catálogo cambia constantemente: consulta la documentación y fija la versión en producción. Entiendes bien la generación aumentada por recuperación: por qué no se reentrena un modelo con los datos de la empresa —coste, actualización, ausencia de citas y de permisos—, cómo funciona el ciclo de indexar, recuperar, generar y citar, por qué la búsqueda híbrida gana, y cuándo usar Azure AI Search frente a pgvector en psql-contoso-tripulaciones-pro. Y sitúas Azure Machine Learning en su ámbito: entrenar modelos a medida cuando el valor está en tus datos, como la predicción de demanda de asientos, con sus clústeres apagados. Todo ello con la advertencia de IA responsable que atraviesa la lección —sesgos que una media oculta, alucinaciones que se convierten en promesas a un pasajero, privacidad y residencia de los datos que se envían, filtro de contenido, supervisión humana en toda decisión que afecte a personas, el marco de Microsoft, el RGPD y el Reglamento Europeo de IA— y su regla operativa: nada llega a producción sin la revisión previa de legal y compliance. Más el coste por token y por transacción, y lo que lo dispara.

Con esto se cierra el módulo 6, y merece la pena mirar atrás. Contoso Airlines entró con un motor de disponibilidad atrapado en una máquina virtual y sale con una plataforma irreconocible: ese motor empaquetado en un contenedor, publicado en acrcontosopro y ejecutándose en Container Apps con escalado a cero; una plataforma de operaciones de vuelo sobre AKS con identidad de carga de trabajo y sin un solo secreto; la emisión de tarjetas y la sincronización de tarifas resueltas con Azure Functions dirigidas por eventos y protegidas por idempotencia; las integraciones con correo, mensajería, Teams y el sistema de incidencias montadas como flujos de Logic Apps que el equipo de operaciones entiende; una arquitectura de mensajes y eventos con Service Bus, Event Grid y Event Hubs que ha desacoplado la compra de todo lo accesorio; y capacidades de IA que hace un módulo eran imposibles. La plataforma hace ahora muchas más cosas, y las hace en muchas más piezas.

Y ahí está justamente el problema que abre lo siguiente. Un sistema tan distribuido —revisiones de contenedores, pods, funciones efímeras, flujos de trabajo, colas, temas, particiones y llamadas a servicios de IA— es imposible de operar a ciegas. Cuando un pasajero diga «he pagado y no me ha llegado la tarjeta de embarque», nadie podrá responder mirando un servidor: habrá que seguir el rastro de esa reserva a través de seis componentes. El módulo 7, Monitoreo y gestión, se ocupa exactamente de eso: métricas, alertas y paneles con Azure Monitor, consultas KQL sobre log-contoso-pro, trazas de extremo a extremo con Application Insights, automatización de las tareas operativas con Azure Automation y, por último, copias de seguridad y recuperación ante desastres, porque una plataforma que no se puede restaurar no está terminada.

Curso de Azure

Módulo 1: Introducción a Azure

Módulo 2: Servicios principales de Azure

Módulo 3: Bases de datos de Azure

Módulo 4: Seguridad en Azure

Módulo 5: Azure DevOps

Módulo 6: Servicios avanzados de Azure

Módulo 7: Monitoreo y gestión

Módulo 8: Gestión y optimización de costos

Módulo 9: Estudios de caso y mejores prácticas

© Copyright 2026. Todos los derechos reservados