Por Año
Microsoft Azure portal: consola unificada para operar Azure con criterio
El Azure portal es la consola web unificada de Microsoft para crear, administrar y supervisar recursos de Azure desde una interfaz gráfica. No sustituye a la automatización con ARM templates, Bicep, Terraform, Azure CLI o Azure PowerShell, pero sí es una superficie operativa clave para descubrir servicios, revisar estado, diagnosticar incidencias, analizar costes y aplicar cambios controlados.
Para un perfil técnico intermedio o avanzado, el valor del portal no está solo en “hacer clic para crear una máquina virtual”. Está en entender cómo Azure organiza sus conceptos fundamentales: tenants, suscripciones, grupos de recursos, identidades, roles, regiones, métricas, diagnósticos, políticas y costes. En la práctica, el portal es una representación visual del modelo de administración de Azure Resource Manager.
Qué es realmente el Azure portal
Según la documentación oficial, el Azure portal es una consola web unificada que permite crear y administrar recursos de Azure mediante una interfaz gráfica. Se puede utilizar como alternativa a herramientas de línea de comandos para muchas tareas de administración, y permite construir, administrar y monitorizar desde aplicaciones web sencillas hasta despliegues cloud complejos.
El portal se accede desde https://portal.azure.com con una identidad asociada a Microsoft Entra ID. Desde ahí se pueden administrar suscripciones, crear recursos, revisar métricas, consultar registros de actividad, configurar acceso, abrir solicitudes de soporte y personalizar paneles de trabajo.
Es importante entender que el portal no es una capa mágica separada del resto de Azure. La mayoría de las operaciones administrativas que se ejecutan desde la interfaz gráfica terminan actuando sobre el plano de control de Azure, el mismo modelo conceptual que usan Azure Resource Manager, Azure CLI, Azure PowerShell o las plantillas de infraestructura como código.
Plano de control y plano de datos
Azure distingue entre plano de control y plano de datos.
El plano de control gestiona recursos: crear, modificar, eliminar, configurar o consultar propiedades administrativas. Por ejemplo, crear una cuenta de almacenamiento, cambiar el tamaño de una máquina virtual o asignar un rol RBAC son operaciones de administración.
El plano de datos opera sobre el contenido o la funcionalidad interna del servicio. Leer blobs, consultar una base de datos, enviar mensajes a una cola o ejecutar una operación sobre un endpoint de aplicación pertenecen a este ámbito.
Esta diferencia es crítica en seguridad. Tener permisos para administrar un recurso no implica necesariamente tener acceso a todos sus datos. Del mismo modo, una identidad puede tener permisos para leer datos de un servicio sin poder modificar la configuración del recurso en Azure.
El portal puede exponer opciones de ambos planos según el servicio, pero conviene no asumir equivalencias. En entornos regulados, de datos o de IA, esta separación debe revisarse de forma explícita.
Tenant, suscripción y grupo de recursos
Antes de usar el portal con soltura hay que entender tres niveles que aparecen constantemente: tenant, suscripción y grupo de recursos.
El tenant representa una instancia de Microsoft Entra ID. Es el límite de identidad donde viven usuarios, grupos, aplicaciones empresariales, service principals, identidades administradas y configuraciones de acceso. Cuando inicias sesión en el portal, lo haces con una identidad perteneciente a uno o varios tenants. En escenarios de consultoría, grupos empresariales o entornos multiempresa, cambiar de directorio es una operación habitual.
La suscripción es el contenedor de facturación, administración y gobierno donde se despliegan recursos. Una organización puede tener varias suscripciones para separar entornos, unidades de negocio, workloads regulados, plataformas compartidas o laboratorios. Es frecuente encontrar suscripciones distintas para dev, test, prod, seguridad, conectividad o datos.
El grupo de recursos es una agrupación lógica dentro de una suscripción. Su función principal es facilitar la administración conjunta de recursos que comparten ciclo de vida. Una aplicación web puede tener en el mismo grupo de recursos un App Service, un plan de App Service, una cuenta de almacenamiento, Application Insights y Key Vault. Si todos esos componentes se despliegan, etiquetan, monitorizan y eliminan juntos, tiene sentido que vivan en el mismo grupo.
Nota: Un grupo de recursos no es una frontera fuerte de seguridad por sí mismo. La seguridad efectiva se define combinando Microsoft Entra ID, Azure RBAC, políticas, redes, identidades administradas y configuración específica de cada servicio.
Navegación eficiente en el portal
El portal ofrece un buscador global en la parte superior que suele ser más rápido que navegar por menús. Permite localizar servicios, recursos concretos, documentación integrada y opciones de configuración. Para equipos que trabajan con muchas suscripciones, combinar el buscador con filtros por directorio y suscripción ayuda a evitar errores de contexto.
Los recursos de Azure se presentan mediante paneles o vistas sucesivas. En ellos se accede a propiedades, métricas, control de acceso, diagnósticos, configuración de red, claves, registros, automatización y operaciones específicas del servicio. La navegación puede parecer densa al principio, pero mantiene una lógica bastante consistente: información general, actividad, control de acceso, etiquetas, diagnóstico, propiedades y configuración propia del recurso.
Una buena práctica es personalizar la experiencia inicial. El portal permite crear dashboards con métricas, accesos directos y recursos frecuentes. Esto es útil para equipos de operaciones que necesitan una vista rápida de un entorno. Para observabilidad avanzada, sin embargo, conviene apoyarse en Azure Monitor, Log Analytics, alertas y workbooks diseñados para cada workload.
Crear recursos desde el portal sin perder trazabilidad
Crear recursos desde el portal es cómodo, especialmente durante exploración, aprendizaje o diseño inicial. El problema aparece cuando los entornos crecen y nadie sabe con exactitud qué se creó, con qué configuración, para qué aplicación y bajo qué criterio de coste o seguridad.
Cuando se crea un recurso, Azure suele pedir datos como suscripción, grupo de recursos, región, nombre, SKU, red, seguridad, etiquetas y opciones de diagnóstico. Estos campos no son detalles administrativos: definen coste, disponibilidad, latencia, cumplimiento, exposición pública y capacidad operativa.
Las etiquetas merecen atención especial. Un esquema mínimo de tagging suele incluir propietario, entorno, aplicación, centro de coste y criticidad. Sin etiquetas consistentes, el análisis de costes y las operaciones de gobierno se vuelven más manuales y menos fiables.
Este ejemplo muestra una forma equivalente de crear un grupo de recursos con Azure CLI. Aunque el portal permite hacerlo visualmente, expresar la operación como comando ayuda a entender qué datos mínimos necesita Azure Resource Manager.
az group create \
--name rg-demo-portal-weu \
--location westeurope \
--tags environment=demo owner=platform-team workload=portal-foundation
El comando crea un grupo de recursos en la región westeurope y añade etiquetas desde el primer momento. Lo importante no es memorizar la sintaxis, sino reconocer que el portal y la CLI están actuando sobre el mismo modelo de recursos. La diferencia principal está en la interfaz.
Azure Resource Manager como modelo mental
Azure Resource Manager, habitualmente abreviado como ARM, es el modelo de administración sobre el que se organizan los recursos de Azure. Cada recurso tiene un tipo, un proveedor, una ubicación, propiedades y un identificador único.
Un identificador de recurso suele tener una estructura parecida a esta:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}
Ese formato permite entender jerarquía y pertenencia. Un recurso pertenece a una suscripción y normalmente a un grupo de recursos. Además, está gestionado por un proveedor como Microsoft.Storage, Microsoft.Compute, Microsoft.Web o Microsoft.Network. Esta estructura aparece en registros, políticas, plantillas de infraestructura como código y asignaciones de permisos.
Advertencia: No conviene copiar identificadores reales de recursos en documentación pública, incidencias externas o capturas compartidas. Aunque el identificador no sea una credencial, puede revelar estructura interna, nombres de workloads y patrones de despliegue.
En algunos recursos, el portal permite exportar plantillas ARM. Esta función puede servir para aprender cómo se representa un recurso como JSON, pero no debe tratarse automáticamente como una plantilla lista para producción. Las plantillas exportadas suelen requerir limpieza, parametrización, revisión de dependencias y validación de seguridad.
Seguridad: RBAC, identidades y control de acceso
Uno de los errores más comunes al empezar con Azure portal es tratarlo como una consola donde “si veo el recurso, puedo administrarlo”. Azure RBAC introduce un modelo más granular. Los permisos se asignan a usuarios, grupos, service principals o identidades administradas en un ámbito concreto: grupo de administración, suscripción, grupo de recursos o recurso individual.
El panel Access control (IAM) de cada recurso es una de las zonas más importantes del portal. Desde ahí se revisan asignaciones de rol, se comprueba el acceso y se otorgan permisos. En entornos maduros, los permisos directos a usuarios deberían ser la excepción. Es preferible asignar roles a grupos de Microsoft Entra ID y gestionar la membresía de esos grupos mediante procesos de identidad.
Los roles integrados como Owner, Contributor y Reader son conocidos, pero no siempre son adecuados para todos los casos:
- Owner puede administrar recursos y conceder acceso a otros usuarios.
- Contributor puede administrar recursos, pero no conceder acceso.
- Reader puede consultar recursos, pero no modificarlos.
Para operaciones específicas, los roles más acotados suelen ser más seguros. Una identidad que solo necesita leer secretos de Key Vault, consultar métricas o escribir en una cola no debería tener permisos amplios sobre toda la suscripción.
En workloads de datos, automatización e IA, esta disciplina es especialmente importante. Una mala asignación de permisos puede exponer índices, documentos, endpoints, claves o configuraciones sensibles.
Costes y optimización desde el portal
Azure portal integra experiencias de Cost Management, presupuestos, análisis de coste y recomendaciones. Esta es una de las áreas donde la consola aporta mucho valor visual, porque permite detectar picos, filtrar por etiquetas, comparar periodos y revisar servicios con mayor consumo.
La optimización de costes no empieza cuando la factura ya ha crecido. Empieza en el momento de elegir región, SKU, redundancia, escalado, retención de logs y arquitectura. El portal puede mostrar estimaciones durante la creación de algunos recursos, pero esos cálculos no sustituyen una revisión de coste completa. Servicios con bajo coste base pueden crecer rápidamente por volumen de operaciones, tráfico, almacenamiento, indexación, retención o cómputo asociado.
Azure Advisor complementa esta visión con recomendaciones relacionadas con coste, seguridad, fiabilidad, excelencia operativa y rendimiento. Conviene revisarlo de forma periódica, pero con criterio. No toda recomendación debe aplicarse automáticamente. Reducir el tamaño de una máquina virtual puede ahorrar dinero, pero también degradar un workload si no se han revisado métricas reales.
Una práctica útil es combinar etiquetas obligatorias con presupuestos por suscripción o grupo de recursos. El portal permite configurar alertas de presupuesto que avisan antes de superar determinados umbrales. Esto no impide el gasto por sí mismo, pero reduce sorpresas y facilita conversaciones entre plataforma, producto y finanzas.
Monitorización, actividad y diagnóstico
Cada recurso en Azure portal suele incluir secciones de actividad y métricas. El Activity Log responde a la pregunta: qué operación de administración ocurrió, cuándo y quién la ejecutó. Es especialmente útil para investigar cambios de configuración, eliminaciones accidentales, despliegues fallidos o asignaciones de permisos.
Las métricas responden a otra pregunta: cómo se está comportando el recurso. Dependiendo del servicio, pueden incluir CPU, memoria, latencia, errores, throughput, conexiones, capacidad o número de operaciones. El portal permite visualizar estas métricas rápidamente y crear alertas, pero los entornos críticos deberían centralizar observabilidad en Azure Monitor, Log Analytics y workbooks específicos.
Application Insights, cuando aplica, añade telemetría de aplicación: peticiones, dependencias, excepciones, trazas y rendimiento. La combinación de métricas de plataforma con telemetría de aplicación permite diferenciar problemas de infraestructura de errores en el código o en dependencias externas.
Nota: La disponibilidad exacta de métricas, logs diagnósticos y categorías de logging depende de cada servicio de Azure. Antes de diseñar una estrategia de observabilidad, conviene revisar la documentación específica del recurso que se va a operar.
Portal, automatización e infraestructura como código
El portal es muy útil para exploración, diagnóstico y operaciones puntuales, pero no debería ser el mecanismo principal de despliegue en producción. A medida que un entorno madura, la configuración estable debe moverse a infraestructura como código. Esto reduce deriva, facilita revisiones, permite reproducir entornos y deja trazabilidad en control de versiones.
La relación sana entre portal y automatización no es excluyente. El portal ayuda a descubrir opciones, validar servicios y revisar estado. Después, la configuración estable se codifica con Bicep, Terraform, ARM templates o módulos internos. En el día a día, el portal sigue siendo útil para consultar logs, verificar despliegues, inspeccionar permisos o responder a incidentes.
Un flujo habitual para equipos de plataforma sería el siguiente:
- Explorar el servicio en el portal para entender parámetros, dependencias y límites.
- Crear un prototipo no productivo con nombres y etiquetas coherentes.
- Revisar la representación ARM o la documentación del proveedor.
- Codificar el despliegue en Bicep, Terraform o ARM templates.
- Aplicar políticas, RBAC y diagnósticos desde el pipeline.
- Usar el portal para validación, monitorización y soporte operativo.
Este enfoque evita convertir el portal en una fuente de cambios invisibles. Cada clic manual en producción debería ser excepcional, justificado y, si corresponde, replicado después en la definición declarativa del entorno.
Azure portal y la consola serie de máquinas virtuales
Conviene no confundir el Azure portal con la consola serie de Azure. El portal es la consola web general para administrar Azure. La consola serie es una funcionalidad específica que proporciona acceso basado en texto a máquinas virtuales y a instancias de conjuntos de escalado, conectándose al puerto serie de la VM.
La consola serie puede ser útil en escenarios de recuperación o diagnóstico cuando hay problemas de red o de sistema operativo que impiden acceder por los métodos habituales. Según la documentación oficial, su acceso se realiza desde el portal y requiere permisos adecuados sobre la máquina virtual.
Esta distinción es importante: el portal es la superficie de administración; la consola serie es una herramienta concreta dentro de esa superficie para diagnosticar determinados problemas de máquinas virtuales.
Azure portal en escenarios de datos e IA
Aunque el portal es transversal a todo Azure, resulta especialmente útil cuando se trabaja con servicios de datos, búsqueda e inteligencia artificial, porque estos sistemas suelen combinar varios elementos: identidad, red, almacenamiento, cómputo, modelos, índices, claves, endpoints y observabilidad.
Un sistema conversacional empresarial, por ejemplo, puede requerir almacenamiento documental, un servicio de búsqueda, componentes de aplicación, servicios de IA, secretos, identidades administradas y monitorización. El portal permite revisar rápidamente si los recursos están en la región adecuada, si tienen red pública habilitada, si existen identidades administradas, si las métricas muestran errores o si los costes se concentran en almacenamiento, indexación, inferencia o tráfico.
La operación de estos sistemas no se limita a desplegar recursos. También exige entender cómo fluyen los datos desde fuentes empresariales hasta índices, aplicaciones y respuestas al usuario. El portal no diseña la arquitectura por ti, pero sí ofrece una superficie común para comprobar que las piezas existen, están configuradas con seguridad razonable y generan señales operativas suficientes.
Buenas prácticas para trabajar con Azure portal
La primera buena práctica es filtrar el contexto. Si tienes acceso a varias suscripciones y tenants, confirma siempre el directorio y la suscripción antes de crear o modificar recursos. Muchos errores operativos empiezan con una acción correcta en el entorno equivocado.
La segunda es usar grupos de recursos con intención. Agrupar por aplicación y ciclo de vida suele ser mejor que agrupar por tipo de recurso. Un grupo llamado rg-prod-storage puede parecer ordenado, pero quizá mezcla almacenamiento de aplicaciones con dueños, criticidades y necesidades de retención diferentes.
La tercera es aplicar etiquetas desde el inicio. Etiquetar a posteriori suele ser incompleto y reactivo. Si las etiquetas forman parte del proceso de creación, Cost Management, políticas y automatización ganan consistencia.
La cuarta es revisar IAM con regularidad. El portal facilita ver quién tiene acceso, pero la revisión debe ser un proceso. Los permisos acumulados son una fuente habitual de riesgo, especialmente en suscripciones antiguas, laboratorios que se vuelven productivos o equipos con alta rotación.
La quinta es no confundir “funciona” con “está listo para producción”. Un recurso creado desde el portal puede estar operativo, pero carecer de diagnósticos, backup, redundancia, restricciones de red, alertas, etiquetas o límites de coste. La consola hace fácil crear; la arquitectura exige decidir.
Limitaciones del portal
Azure portal no es ideal para cambios masivos, despliegues repetibles o auditorías completas de configuración. Tampoco es el mejor lugar para revisar diferencias entre entornos o garantizar que producción coincide con preproducción. Para esos casos, la infraestructura como código, Azure Policy, pipelines y herramientas de inventario son más adecuadas.
También hay que tener en cuenta que el portal evoluciona continuamente. Microsoft actualiza vistas, nombres de menús, asistentes de creación y experiencias integradas. Esto es positivo para la plataforma, pero hace que las guías basadas exclusivamente en capturas de pantalla envejezcan rápido. Por eso conviene aprender los conceptos subyacentes: suscripción, grupo de recursos, proveedor, identidad, rol, métrica, log y coste.
Advertencia: Si una operación crítica solo está documentada como una secuencia de clics en el portal, existe riesgo operativo. Siempre que sea posible, documenta también el equivalente en CLI, PowerShell, Bicep, Terraform, ARM templates o API.
Un ejemplo práctico de lectura operativa
Imagina una aplicación interna que usa un backend en App Service, una cuenta de almacenamiento para documentos y un servicio de búsqueda para recuperación de contexto. Desde el portal, un operador puede empezar revisando el grupo de recursos para confirmar que todos los componentes esperados existen y comparten etiquetas. Después puede comprobar IAM para verificar que la aplicación usa una identidad administrada en lugar de claves compartidas.
A continuación, puede revisar métricas de App Service para detectar errores HTTP, latencia o saturación. En la cuenta de almacenamiento, puede comprobar capacidad, operaciones y configuración de red. En el servicio de búsqueda, puede revisar uso, errores de consulta e indexación. Si el sistema implementa un patrón de recuperación aumentada, esta lectura operativa conecta infraestructura con experiencia de usuario: si la recuperación falla, las respuestas pueden degradarse aunque otros endpoints sigan disponibles.
Esta forma de trabajar convierte el portal en una herramienta de diagnóstico transversal. No reemplaza logs de aplicación ni trazas distribuidas, pero ayuda a formular mejores hipótesis rápidamente.
Conclusión
Microsoft Azure portal es la puerta de entrada visual al modelo operativo de Azure. Su valor no está únicamente en simplificar la creación de recursos, sino en hacer visible cómo se relacionan identidad, suscripciones, grupos de recursos, permisos, métricas, costes y configuración.
Para equipos intermedios y senior, el portal debe usarse como consola de exploración, gobierno y diagnóstico, no como sustituto de la automatización. La madurez llega cuando las decisiones descubiertas en el portal se convierten en infraestructura como código, políticas, alertas y procesos repetibles.
Entender bien el portal ayuda a entender Azure Resource Manager. Y entender Azure Resource Manager es una base sólida para operar con criterio cualquier workload moderno sobre Azure, desde aplicaciones web tradicionales hasta plataformas de datos, búsqueda semántica y sistemas de IA empresarial.
Azure Developer CLI en mayo y junio de 2026: azd exec, extensiones y aprovisionamiento más seguro
Azure Developer CLI sigue avanzando hacia un objetivo muy concreto: reducir la fricción entre el repositorio de una aplicación y un entorno Azure reproducible. La actualización combinada de mayo y junio de 2026 no destaca por un único anuncio aislado, sino por una acumulación de cambios relevantes para equipos que ya trabajan con infraestructura como código, despliegues automatizados, entornos locales y pipelines de CI/CD.
Según el anuncio oficial de Microsoft, entre mayo y junio se publicaron nueve versiones de azd: 1.24.3, 1.25.0, 1.25.1, 1.25.2, 1.25.3, 1.25.4, 1.25.5, 1.25.6 y 1.26.0. Las novedades más destacadas incluyen el nuevo grupo de comandos azd tool, el comando azd exec, mejoras en aprovisionamiento multicapa, un comportamiento más seguro al interrumpir despliegues con Ctrl+C, soporte de Go para servicios de Azure Functions en azd up, bundles de extensiones autocontenidos y varias correcciones en despliegues paralelos sobre Azure Container Apps.
La lectura para arquitectos y responsables técnicos es clara: azd no pretende sustituir a Bicep, Terraform, Azure CLI o los pipelines existentes. Su papel es actuar como una capa de experiencia de desarrollador que conecta plantillas, configuración de entorno, aprovisionamiento, despliegue y tareas repetibles del proyecto.
Azure Developer CLI como interfaz de flujo de trabajo
Azure Developer CLI (azd) es una herramienta open source orientada a acelerar el aprovisionamiento y despliegue de aplicaciones en Azure. Su modelo se apoya en plantillas que pueden incluir infraestructura como código, código de aplicación, configuración de despliegue y, opcionalmente, flujos de CI/CD.
Durante sus primeras adopciones, muchas organizaciones lo han usado principalmente para ejecutar azd up y desplegar una aplicación de ejemplo o un entorno inicial. Esa aproximación es útil, pero se queda corta en equipos que mantienen varios servicios, entornos efímeros, pipelines y flujos locales distintos entre Windows, macOS y Linux.
Las novedades de mayo y junio apuntan a una dirección más madura: convertir azd en una interfaz consistente para operaciones habituales del ciclo de vida de una aplicación en Azure. Eso incluye ejecutar tareas del proyecto, gestionar herramientas auxiliares, definir dependencias explícitas entre capas de aprovisionamiento y mejorar el comportamiento en despliegues concurrentes.
Nuevo grupo de comandos azd tool
Una de las incorporaciones destacadas es el nuevo grupo de comandos azd tool. Microsoft lo describe como una forma de descubrir, instalar, comprobar y actualizar herramientas de desarrollo relacionadas con Azure.
El valor de esta capacidad está en ordenar una zona que en muchos repositorios acaba dispersa entre instrucciones de README, scripts de instalación, tareas de CI y documentación interna. En proyectos reales, el entorno de desarrollo no depende solo del lenguaje principal de la aplicación. También puede requerir herramientas de infraestructura, linters, generadores, validadores, runtimes o utilidades específicas.
Centralizar parte de esa experiencia bajo azd tool puede ayudar a reducir pasos manuales y diferencias entre máquinas de desarrollo, siempre que se use con criterio. No conviene tratarlo como una caja negra para ocultar dependencias: las herramientas requeridas por un proyecto deben seguir estando documentadas, versionadas cuando proceda y alineadas con los pipelines.
La recomendación práctica es revisar la documentación de la versión concreta de azd antes de incorporar cualquier subcomando de azd tool en automatizaciones críticas. La existencia del grupo está anunciada oficialmente, pero los equipos deben validar los detalles operativos y el comportamiento exacto en la versión que vayan a adoptar.
azd exec: ejecución cross-platform con contexto de azd
La novedad más interesante para equipos de ingeniería es azd exec. Microsoft lo presenta como un nuevo runner cross-platform para comandos y scripts que hereda el entorno completo de azd, incluida la resolución de secretos desde Azure Key Vault.
Esto resuelve un problema habitual: muchos proyectos acaban dependiendo de scripts locales con diferencias entre shells, sistemas operativos y entornos de CI. Un comando que funciona en Bash puede fallar en PowerShell por el tratamiento de comillas, rutas, expansión de variables o códigos de salida. Incluso cuando se usan contenedores de desarrollo, parte del flujo de trabajo suele ejecutarse todavía en el host.
azd exec introduce un punto de entrada común para ejecutar tareas del proyecto dentro del contexto que ya conoce azd. Ese contexto puede incluir variables de entorno, configuración del entorno seleccionado y secretos resueltos desde Key Vault cuando corresponda. Para equipos que buscan reproducibilidad, este detalle es importante: reduce la distancia entre “lo que dice el README”, “lo que ejecuta una persona en local” y “lo que ejecuta un pipeline”.
Ahora bien, azd exec no elimina la necesidad de diseñar bien los comandos internos. Si una tarea ejecuta scripts del repositorio, esos scripts deben revisarse en pull request, tener dependencias explícitas y ser comprensibles para el equipo. De lo contrario, solo se cambia el punto de entrada, pero no se reduce la complejidad operativa.
También conviene tratar con especial cuidado la resolución de secretos. Que azd exec pueda heredar el entorno de azd y resolver secretos desde Key Vault no significa que todos los comandos deban tener acceso indiscriminado a ellos. Las tareas que usen credenciales o valores sensibles deben estar justificadas, auditadas y diseñadas para no imprimir secretos en logs.
Aprovisionamiento multicapa más seguro y dependsOn en azure.yaml
Otra mejora relevante afecta al aprovisionamiento multicapa. Microsoft destaca dos cambios: un análisis de dependencias más seguro y la incorporación de un campo explícito dependsOn en azure.yaml.
El aprovisionamiento por capas aparece cuando una solución separa responsabilidades: infraestructura base, recursos compartidos, servicios de aplicación, configuración de entorno, identidades o componentes opcionales. Esta separación suele ser una buena práctica, porque permite evolucionar partes de la solución sin redeplegar todo el conjunto. Pero también introduce riesgos: dependencias implícitas, orden de ejecución poco claro y estados intermedios difíciles de diagnosticar.
El campo dependsOn en azure.yaml apunta precisamente a ese problema. En lugar de confiar solo en convenciones o en el orden implícito de definición, el proyecto puede declarar dependencias de forma más explícita. Esto ayuda a que la orquestación del aprovisionamiento sea más predecible y reduce errores cuando una capa necesita que otra haya finalizado antes.
Aun así, “más seguro” no significa “transaccional”. Azure Resource Manager, Bicep, Terraform y las herramientas de despliegue tienen modelos de estado y límites conocidos. Si una operación falla a mitad de camino, pueden quedar recursos creados, permisos pendientes de propagación o configuraciones incompletas. Lo que aporta azd es una experiencia de orquestación más clara y menos propensa a errores evitables, no una garantía de reversión automática completa.
Para equipos que ya usan varias capas de infraestructura, esta actualización es una buena oportunidad para revisar tres aspectos:
- qué capa crea cada recurso;
- qué salidas se consideran contrato público entre capas;
- qué dependencias deben declararse de forma explícita en lugar de asumirse por convención.
Cuanto menos conocimiento implícito exista en el despliegue, más fácil será mantenerlo y depurarlo.
Confirmación interactiva al usar Ctrl+C
La actualización también incorpora un prompt interactivo al pulsar Ctrl+C durante azd provision y azd up. En lugar de cancelar de forma inmediata, la CLI permite elegir si se deja continuar el despliegue de Azure o si se cancela.
Puede parecer una mejora menor, pero tiene impacto operativo. Interrumpir un aprovisionamiento o despliegue en el momento equivocado puede dejar un entorno en estado parcial. Muchos equipos han aprendido a no cancelar comandos de infraestructura precisamente porque no siempre está claro qué se ha completado y qué queda pendiente.
Con esta confirmación interactiva, azd reduce el riesgo de cancelaciones accidentales. Es especialmente útil en operaciones largas, despliegues de contenedores o aprovisionamientos con varias capas. También ayuda en entornos compartidos, donde una interrupción puede afectar a otros desarrolladores o a una integración en curso.
La mejora no sustituye a una estrategia de rollback ni a una buena observabilidad del despliegue, pero introduce una barrera útil frente a errores humanos frecuentes.
Soporte de Go para Azure Functions en azd up
Microsoft también indica que Go pasa a estar soportado como lenguaje para servicios de Azure Functions en azd up.
La precisión aquí es importante: la novedad anunciada se refiere al soporte dentro del flujo de azd up para servicios de Azure Functions en Go. No debe interpretarse como un cambio general en todos los modelos de ejecución de Azure Functions ni como sustitución de las herramientas propias del ecosistema Go.
Para equipos que ya usan Go en APIs, workers, herramientas internas o componentes backend, esta mejora facilita integrar esos servicios en una experiencia de aprovisionamiento y despliegue más homogénea. El flujo habitual de desarrollo en Go —pruebas, validación, módulos y compilación— sigue siendo responsabilidad de las herramientas nativas del lenguaje. azd aporta la conexión con Azure y la automatización del entorno definido por el proyecto.
El beneficio práctico aparece cuando un repositorio combina varios servicios y lenguajes. En lugar de mantener caminos de despliegue completamente distintos para cada stack, azd puede ofrecer una experiencia más uniforme para aprovisionar y desplegar la solución.
Extensiones autocontenidas
La actualización incluye también bundles de extensiones autocontenidos. En una CLI extensible, la distribución de extensiones suele enfrentarse a problemas de dependencias, versiones y compatibilidad entre plataformas. Si una extensión requiere que cada usuario instale manualmente runtimes o binarios adicionales, la experiencia se vuelve frágil.
Los bundles autocontenidos buscan reducir esa fricción. Para organizaciones con portátiles gestionados, agentes de CI efímeros o restricciones de instalación, esta mejora puede facilitar una distribución más predecible de capacidades adicionales.
La extensibilidad de azd resulta especialmente interesante para equipos de plataforma. Puede servir para encapsular validaciones comunes, convenciones internas, integraciones con catálogos corporativos o tareas de bootstrap. Pero debe gobernarse como cualquier otra pieza de software: versionado claro, documentación, pruebas, compatibilidad declarada y un proceso de actualización controlado.
Una extensión autocontenida no debería convertirse en una caja negra. Si encapsula lógica crítica de despliegue o cumplimiento, el equipo consumidor debe entender qué hace, qué permisos requiere y cómo se comporta ante errores.
Correcciones en despliegues paralelos de Azure Container Apps
Aunque las nuevas capacidades suelen llamar más la atención, las correcciones incluidas en la release son igual de importantes. Microsoft menciona varias mejoras de concurrencia en despliegues paralelos de Azure Container Apps, incluida una corrección relacionada con contaminación cruzada de imágenes entre servicios en builds remotos sobre Azure Container Registry.
Este tipo de correcciones importa mucho en arquitecturas compuestas por varios servicios: APIs, workers, frontends, consumidores de eventos, jobs y componentes auxiliares. Desplegar en paralelo reduce tiempos, pero también expone condiciones de carrera si varios servicios comparten registros de contenedores, identidades, secretos o configuración.
Para equipos que usan Azure Container Apps con azd, la recomendación es tratar el paralelismo como una optimización, no como una premisa. Primero debe existir un despliegue correcto, observable y repetible. Después tiene sentido reducir tiempos mediante ejecución concurrente. Si se activa paralelismo sin entender dependencias entre servicios, los fallos suelen aparecer como errores intermitentes difíciles de reproducir.
La corrección mencionada por Microsoft refuerza la importancia de mantener actualizado azd cuando se usa para despliegues de contenedores en escenarios con varios servicios.
Qué debería revisar un equipo que ya usa azd
Si un equipo ya ha adoptado Azure Developer CLI, esta actualización merece una revisión en varios frentes.
El primero es la estandarización de tareas con azd exec. Cualquier comando que aparezca en documentación de onboarding, scripts de CI o runbooks puede ser candidato a integrarse en un flujo más consistente, siempre que el comportamiento quede claro y versionado.
El segundo es el aprovisionamiento multicapa. Si el repositorio ha crecido y el despliegue depende de orden implícito entre componentes, conviene evaluar el uso de dependsOn en azure.yaml y revisar las salidas entre capas. Las mejoras de azd ayudan, pero no sustituyen un diseño explícito de dependencias.
El tercero es la extensibilidad. Si existen scripts corporativos que se copian entre repositorios, las extensiones autocontenidas pueden ofrecer un modelo más mantenible. No todo debe convertirse en extensión: las tareas específicas de un repositorio pueden seguir viviendo como scripts versionados. Pero las capacidades transversales encajan mejor en mecanismos formales y gobernados.
El cuarto es la actualización en proyectos con Azure Container Apps. Si el equipo despliega varios servicios en paralelo, las correcciones de concurrencia justifican revisar la versión instalada de azd y validar los flujos de build y despliegue.
Qué cambia para quien todavía no usa azd
Para equipos que dependen exclusivamente de Azure CLI, scripts personalizados y pipelines propios, esta release refuerza el argumento de probar azd en un proyecto acotado. No es necesario migrar toda la plataforma. Un buen punto de partida puede ser una aplicación con infraestructura Bicep o Terraform, uno o dos servicios y un entorno de desarrollo reproducible.
La prueba no debería limitarse a comprobar si azd up funciona. Las preguntas relevantes son otras:
- cuánto tarda una persona nueva en levantar el entorno;
- cuántos pasos manuales se eliminan;
- si el flujo funciona de forma consistente entre sistemas operativos;
- si el pipeline puede reutilizar parte de la misma semántica que el entorno local;
- si las dependencias de aprovisionamiento quedan explícitas y mantenibles.
Si la respuesta es positiva, azd puede aportar valor como interfaz de experiencia de desarrollador, incluso aunque la organización siga usando Bicep, Terraform, GitHub Actions, Azure Pipelines o Azure CLI para otras partes de su plataforma.
Recomendaciones prácticas de adopción
La adopción de estas capacidades debería ser incremental.
Para azd exec, conviene empezar por tareas no destructivas: validaciones, pruebas, generación de artefactos o comprobaciones previas. Una vez que el equipo confía en el patrón, pueden incorporarse tareas más sensibles, siempre con revisión de código y control de permisos.
Para el aprovisionamiento multicapa, es recomendable documentar qué recursos crea cada capa, qué salidas expone y qué dependencias declara. Si una capa depende de nombres generados por otra sin una salida formal, hay fragilidad. Si el orden de despliegue solo lo conoce una persona, hay deuda operativa.
Para extensiones, debe aplicarse el mismo rigor que a cualquier dependencia de build o despliegue: versiones controladas, pruebas, documentación y proceso de actualización. Que una extensión sea autocontenida mejora su distribución, pero no elimina la necesidad de gobernanza.
Para Azure Container Apps, los equipos deberían validar los despliegues paralelos con la versión actualizada de azd, especialmente si usan builds remotos con Azure Container Registry y varios servicios en el mismo proyecto.
Una release de productividad y control
La actualización de mayo y junio de 2026 de Azure Developer CLI no cambia la arquitectura de Azure por sí sola. Lo que mejora es el camino entre el repositorio y Azure.
azd exec reduce variabilidad en la ejecución de tareas de proyecto. azd tool ordena la gestión de herramientas auxiliares. dependsOn en azure.yaml aporta más claridad al aprovisionamiento multicapa. La confirmación con Ctrl+C reduce cancelaciones accidentales en operaciones largas. El soporte de Go para Azure Functions en azd up amplía los stacks cubiertos. Y las correcciones en Azure Container Apps refuerzan la fiabilidad en despliegues con varios servicios.
La productividad del desarrollador no se mide solo por cuántos comandos se ahorran, sino por cuánta incertidumbre se elimina. En ese sentido, esta release apunta a una madurez importante de azd: menos pasos manuales, menos dependencias implícitas y más control sobre cómo una aplicación pasa del repositorio a Azure.
Protegiendo la cultura del gaming: Desafíos y soluciones en la nube
Introducción
El gaming ya no es solo entretenimiento: es una industria global que combina comunidades, identidades digitales, economías internas, retransmisiones en directo, servicios multijugador, marketplaces y operaciones 24/7. Esa escala convierte a las plataformas de gaming en un objetivo atractivo para actores maliciosos.
La seguridad en este contexto no se limita a proteger servidores. También implica preservar la confianza de los jugadores, mantener la disponibilidad de los servicios, reducir el fraude, proteger datos personales, defender las herramientas internas de desarrollo y responder con rapidez ante incidentes.
Microsoft abordó este enfoque en el artículo oficial Securing the gaming culture of cultures, publicado el 20 de mayo de 2026, donde se subraya que la seguridad en gaming debe contemplar tanto la infraestructura técnica como la cultura y las comunidades que la rodean.
En este artículo revisamos los principales desafíos y una arquitectura de referencia en Azure para equipos técnicos que diseñan, operan o modernizan plataformas de gaming en la nube.
Por qué el gaming tiene un perfil de riesgo particular
Las plataformas de gaming reúnen varias características que elevan su exposición:
- Alta concurrencia y sensibilidad a la latencia: una interrupción breve puede afectar partidas, torneos, retransmisiones o lanzamientos globales.
- Economías digitales: monedas virtuales, objetos cosméticos, pases de temporada y marketplaces pueden atraer fraude y abuso.
- Comunidades globales: chats, clanes, foros y sistemas sociales amplían la superficie de ataque y moderación.
- Identidades de alto valor: cuentas con historial, reputación, compras o inventario digital pueden ser objetivo de robo.
- Entornos híbridos de desarrollo y operación: estudios, proveedores, herramientas de CI/CD, telemetría, soporte y operaciones en vivo deben protegerse de forma coordinada.
- Picos impredecibles de tráfico: lanzamientos, eventos especiales o competiciones pueden generar patrones similares a ataques o amplificar el impacto de ataques reales.
Por ello, el diseño de seguridad debe tratar la plataforma como un ecosistema completo, no como una colección aislada de servicios.
Principales amenazas en plataformas de gaming
1. Ataques DDoS y degradación de disponibilidad
Los ataques de denegación de servicio distribuido siguen siendo una amenaza relevante para servicios multijugador, APIs públicas, portales web y backends de matchmaking. En gaming, el impacto no se mide solo en indisponibilidad: también puede traducirse en pérdida de partidas, abandono de usuarios, interrupción de torneos y daño reputacional.
En Azure, una estrategia habitual combina:
- Azure DDoS Protection para ayudar a mitigar ataques volumétricos y de red contra recursos protegidos en redes virtuales.
- Azure Front Door para entrada global, aceleración y distribución de tráfico HTTP/HTTPS.
- Azure Web Application Firewall, asociado a Azure Front Door o Application Gateway, para ayudar a reducir ataques comunes a aplicaciones web.
- Azure Monitor y telemetría de red para detectar cambios anómalos de tráfico, latencia o errores.
Nota técnica: DDoS Protection no sustituye al diseño resiliente de la aplicación. Es necesario complementar la mitigación de red con escalado, límites de tasa, colas, circuit breakers, observabilidad y procedimientos de respuesta.
2. Robo de cuentas e identidad
El robo de cuentas puede afectar a jugadores, administradores, equipos de soporte, desarrolladores y operadores de la plataforma. Las cuentas privilegiadas son especialmente críticas porque pueden dar acceso a paneles internos, herramientas de publicación, datos operativos o sistemas de soporte.
Para identidades corporativas y administrativas, Microsoft Entra ID permite aplicar controles como:
- Autenticación multifactor.
- Acceso condicional.
- Políticas basadas en riesgo.
- Separación de privilegios.
- Revisiones de acceso.
- Integración con registros de auditoría y herramientas de detección.
En el caso de identidades de jugadores, la arquitectura dependerá del proveedor de identidad y del modelo de cuenta utilizado por la plataforma. Aun así, los principios son los mismos: reducir el abuso automatizado, proteger sesiones, detectar inicios de sesión anómalos y ofrecer mecanismos de recuperación de cuenta seguros.
Buenas prácticas recomendadas:
- Exigir MFA o autenticación resistente al phishing para cuentas administrativas.
- Evitar cuentas compartidas en operaciones, soporte o desarrollo.
- Aplicar mínimo privilegio y acceso just-in-time cuando sea posible.
- Registrar acciones sensibles: cambios de inventario, reembolsos, baneos, modificaciones de precios o cambios en configuración de producción.
- Monitorizar patrones de inicio de sesión imposibles, inusuales o asociados a infraestructura sospechosa.
3. Fraude, abuso y manipulación de economías digitales
El fraude en gaming puede adoptar muchas formas:
- Compra fraudulenta de moneda virtual.
- Abuso de promociones.
- Reventa no autorizada de cuentas u objetos.
- Automatización con bots.
- Explotación de errores de lógica de negocio.
- Manipulación de rankings o recompensas.
- Lavado de valor mediante economías internas.
La mitigación no debe depender de un único modelo de machine learning. Normalmente requiere una combinación de:
- Reglas de negocio.
- Análisis de comportamiento.
- Detección de anomalías.
- Revisión humana en casos de alto impacto.
- Trazabilidad de transacciones.
- Limitación de operaciones sensibles.
- Señales de identidad, dispositivo, sesión y reputación.
Servicios como Azure Machine Learning pueden ayudar a construir modelos personalizados cuando existe suficiente volumen y calidad de datos. Sin embargo, la detección de fraude debe diseñarse como un sistema operativo continuo: los atacantes cambian de táctica y los modelos deben revisarse, validarse y monitorizarse para evitar falsos positivos o degradación.
4. Phishing y compromiso de equipos internos
Las campañas de phishing no solo buscan cuentas de jugadores. También pueden dirigirse a desarrolladores, community managers, equipos de soporte, moderadores, proveedores o administradores de infraestructura.
Los controles más importantes para reducir este riesgo son:
- MFA resistente al phishing en cuentas críticas.
- Acceso condicional para aplicaciones administrativas.
- Gestión segura de dispositivos corporativos.
- Protección del correo y colaboración.
- Formación específica para equipos con acceso a herramientas sensibles.
- Detección y respuesta centralizada ante señales de compromiso.
En entornos Microsoft, soluciones como Microsoft Entra ID, Microsoft Defender y Microsoft Sentinel pueden formar parte de una estrategia coordinada para proteger identidades, endpoints, cargas de trabajo y operaciones de seguridad.
5. Seguridad de la cadena de suministro y del ciclo de desarrollo
Los juegos modernos dependen de motores, SDKs, paquetes, pipelines CI/CD, servicios externos, sistemas de analítica y herramientas de colaboración. Cada dependencia puede introducir riesgo.
Algunas medidas clave:
- Firmado y validación de artefactos.
- Control estricto de secretos en pipelines.
- Revisión de permisos en repositorios y sistemas de build.
- Escaneo de dependencias y contenedores.
- Separación entre entornos de desarrollo, pruebas y producción.
- Auditoría de despliegues y cambios de configuración.
- Uso de identidades administradas cuando sea posible, evitando credenciales estáticas.
Azure Key Vault puede utilizarse para proteger secretos, claves y certificados. Microsoft Defender for Cloud puede ayudar a mejorar la postura de seguridad de cargas en Azure y entornos compatibles, además de aportar recomendaciones y detecciones relevantes para recursos cloud.
Arquitectura de referencia para gaming seguro en Azure
Una arquitectura segura debe adaptarse al tipo de juego, al modelo multijugador, a la latencia aceptable, al volumen de usuarios y a los requisitos regulatorios. Aun así, se pueden identificar componentes comunes.
Capa de entrada y protección perimetral
- Azure Front Door para entrada global HTTP/HTTPS, distribución de tráfico y mejora de disponibilidad.
- Azure Web Application Firewall para proteger aplicaciones web y APIs frente a patrones de ataque comunes.
- Azure DDoS Protection para ayudar a mitigar ataques de red contra recursos expuestos en redes virtuales.
- Rate limiting y validación de tráfico en APIs críticas, especialmente login, inventario, compras y matchmaking.
Capa de aplicación y servicios
- Servicios de backend desplegados en App Service, Azure Kubernetes Service, máquinas virtuales u otra plataforma adecuada al caso de uso.
- Separación de servicios críticos: autenticación, inventario, pagos, matchmaking, telemetría y operaciones internas.
- Uso de colas y mensajería para desacoplar procesos no interactivos.
- Estrategias de escalado automático basadas en métricas reales de carga y latencia.
Capa de datos
- Cifrado en reposo y en tránsito.
- Segmentación por sensibilidad de datos.
- Copias de seguridad y pruebas periódicas de restauración.
- Control de acceso basado en roles.
- Registro de operaciones sensibles sobre cuentas, compras, inventario y soporte.
Identidad, secretos y privilegios
- Microsoft Entra ID para identidades corporativas y administrativas.
- MFA y acceso condicional para herramientas internas.
- Azure Key Vault para secretos, claves y certificados.
- Identidades administradas para reducir el uso de credenciales embebidas.
- Separación de funciones entre desarrollo, operaciones, soporte y administración.
Observabilidad y respuesta
- Azure Monitor para métricas, logs y alertas operativas.
- Microsoft Sentinel como SIEM/SOAR para correlación, investigación y automatización de respuesta.
- Integración de señales de identidad, endpoint, red, aplicación y negocio.
- Playbooks de respuesta para DDoS, fraude, robo de cuentas, abuso de privilegios y fuga de secretos.
Controles recomendados por escenario
| Escenario | Riesgo principal | Controles recomendados |
|---|---|---|
| Lanzamiento global de un juego | Picos de tráfico, DDoS, degradación de APIs | Pruebas de carga, Azure Front Door, DDoS Protection, escalado automático, runbooks |
| Marketplace interno | Fraude, abuso de promociones, robo de inventario | Auditoría transaccional, detección de anomalías, límites por riesgo, revisión humana |
| Herramientas de soporte | Abuso de privilegios, cambios indebidos en cuentas | MFA, mínimo privilegio, registros detallados, aprobación para acciones sensibles |
| Paneles administrativos | Compromiso de cuentas internas | Entra ID, acceso condicional, dispositivos gestionados, segmentación de red |
| Pipeline de despliegue | Fuga de secretos, artefactos manipulados | Key Vault, revisiones de permisos, escaneo de dependencias, auditoría de despliegues |
| APIs públicas | Automatización, scraping, abuso de login | WAF, rate limiting, validación de sesión, protección contra bots según el diseño |
Métricas que conviene monitorizar
Para operar una plataforma de gaming segura no basta con saber si los servidores están activos. Es recomendable correlacionar métricas técnicas y de negocio:
- Tasa de errores por API.
- Latencia por región.
- Volumen de tráfico por origen y ruta.
- Intentos de inicio de sesión fallidos.
- Cambios anómalos en inventario o moneda virtual.
- Reembolsos y compras fallidas.
- Acciones administrativas sensibles.
- Creación masiva de cuentas.
- Cambios inusuales en rankings o recompensas.
- Alertas de seguridad en identidad, endpoint y cloud.
La clave está en distinguir entre un evento legítimo —por ejemplo, el lanzamiento de una temporada— y un patrón abusivo o malicioso.
Consideraciones para arquitectos y responsables técnicos
Al diseñar una estrategia de seguridad para gaming en la nube, conviene evitar dos errores frecuentes:
- Pensar solo en infraestructura. La seguridad también debe cubrir economía interna, moderación, soporte, identidad, desarrollo y operaciones.
- Depender de controles aislados. Un WAF, MFA o modelo antifraude no resuelve el problema por sí solo. La defensa debe ser multicapa.
Un enfoque maduro combina:
- Arquitectura Zero Trust.
- Seguridad desde el diseño.
- Automatización de controles.
- Observabilidad transversal.
- Respuesta a incidentes ensayada.
- Revisión continua de amenazas.
- Colaboración entre seguridad, desarrollo, operaciones, soporte y negocio.
Conclusión
Proteger la cultura del gaming requiere una visión integral. Las plataformas modernas combinan infraestructura cloud, comunidades globales, identidades digitales, economías internas y operaciones en tiempo real. Cada una de esas dimensiones introduce riesgos específicos.
Azure ofrece servicios que pueden formar parte de una estrategia sólida: protección DDoS, entrada global con Azure Front Door, controles de identidad con Microsoft Entra ID, gestión de secretos con Azure Key Vault, postura de seguridad con Microsoft Defender for Cloud y monitorización avanzada con Microsoft Sentinel. Pero la tecnología debe acompañarse de procesos, gobierno, observabilidad y respuesta operativa.
La seguridad en gaming no consiste únicamente en evitar ataques. Consiste en mantener la confianza de los jugadores, proteger la continuidad del servicio y preservar comunidades digitales que ya forman parte de la cultura global.
Fuente
- Microsoft Security Blog: Securing the gaming culture of cultures
Optimización de la gestión de políticas Git a escala en Azure DevOps
Introducción
Las políticas Git en Azure DevOps son una pieza importante de gobierno técnico: ayudan a proteger ramas, elevar la calidad del código y reducir cambios no deseados antes de que lleguen a repositorios críticos.
En Azure Repos, estas políticas pueden cubrir escenarios como:
- número mínimo de revisores;
- revisores requeridos para determinadas rutas o cambios;
- validaciones asociadas al flujo de pull request;
- reglas de protección y comprobaciones adicionales configuradas por la organización.
El reto aparece cuando estas políticas se gestionan a escala: muchas organizaciones no administran uno o dos repositorios, sino cientos o miles, con múltiples ramas protegidas y reglas distintas por proyecto, equipo o criticidad del código.
Microsoft ha publicado una mejora en la API REST de Azure DevOps orientada precisamente a este escenario. Según el equipo de Azure DevOps, la optimización reduce aproximadamente a la mitad el uso de CPU y mejora los tiempos de ejecución entre 10 y 15 veces en determinados flujos de gestión de políticas Git.
Qué se ha optimizado
La mejora afecta a la gestión de configuraciones de políticas Git mediante la API REST de Azure DevOps.
Es importante matizar algo: la mejora no debe interpretarse como la aparición de una API nueva para “crear políticas en lote” ni como un cambio funcional en el modelo de políticas. La publicación oficial la presenta como una optimización de rendimiento en la API existente para escenarios de gestión a gran escala.
En la práctica, esto beneficia especialmente a automatizaciones que:
- consultan configuraciones de políticas en Azure Repos;
- recorren muchos repositorios o ramas protegidas;
- comparan el estado real con una configuración esperada;
- aplican gobierno o cumplimiento de forma periódica;
- usan la API REST como base para auditar o mantener políticas.
La ganancia es más visible cuando las automatizaciones evitan patrones costosos, como listar todas las políticas de un proyecto para filtrarlas después localmente, y en su lugar usan filtros de la API siempre que sea posible.
Por qué importa en organizaciones grandes
En un entorno pequeño, listar y revisar políticas de forma relativamente amplia puede no suponer un problema. Pero en una organización grande, el coste se acumula rápidamente.
Imagina un escenario con:
- cientos de repositorios;
- varias ramas protegidas por repositorio;
- distintos tipos de políticas por rama;
- automatizaciones de cumplimiento que se ejecutan de forma recurrente.
Si cada ejecución consulta más datos de los necesarios, el impacto se multiplica: más CPU en el servicio, más tiempo de espera para la automatización y más complejidad operativa.
La mejora anunciada por Microsoft apunta a reducir ese coste. Para los equipos de plataforma, DevOps o ingeniería interna, esto puede traducirse en ejecuciones más rápidas de sus herramientas de gobierno sin tener que rediseñar por completo su modelo de políticas.
Buenas prácticas al consultar políticas mediante la API REST
Aunque la optimización está disponible en Azure DevOps, conviene revisar cómo están implementadas las automatizaciones existentes. La forma de consumir la API sigue siendo clave.
1. Filtrar lo máximo posible en la llamada
Cuando la automatización necesita políticas de un repositorio o una rama concreta, es preferible usar los filtros disponibles en la API en vez de recuperar todas las configuraciones y filtrarlas en cliente.
Ejemplo orientativo de consulta de configuraciones de política para un repositorio y una rama:
curl -sS \
-u ":${AZDO_PAT}" \
"https://dev.azure.com/${AZDO_ORG}/${AZDO_PROJECT}/_apis/policy/configurations?repositoryId=${AZDO_REPOSITORY_ID}&refName=refs/heads/main&api-version=7.1"
Donde:
AZDO_ORGes la organización de Azure DevOps;AZDO_PROJECTes el proyecto;AZDO_REPOSITORY_IDes el identificador del repositorio;AZDO_PATes un Personal Access Token con los permisos mínimos necesarios.
Si se usa autenticación mediante OAuth o Microsoft Entra ID, el esquema de autenticación puede ser distinto. Para PAT, el patrón habitual con
curles autenticación básica usando el token como contraseña.
2. Evitar listados globales innecesarios
Un antipatrón común en scripts de gobierno es:
- listar todas las políticas del proyecto;
- descargar una respuesta muy grande;
- filtrar por repositorio, rama o tipo de política en memoria;
- repetir el proceso para muchos repositorios.
Ese enfoque suele ser más simple de escribir al principio, pero escala peor.
Una alternativa más eficiente es invertir el patrón:
- determinar el repositorio o rama que se quiere evaluar;
- consultar solo las configuraciones relevantes;
- comparar contra el estado deseado;
- actualizar únicamente si hay diferencias.
3. Gestionar paginación y respuestas grandes
En escenarios con muchas políticas, la automatización debe estar preparada para respuestas paginadas o tokens de continuación si la API los devuelve.
Ejemplo en Python para consultar configuraciones de política de forma controlada:
import os
import requests
from requests.auth import HTTPBasicAuth
organization = os.environ["AZDO_ORG"]
project = os.environ["AZDO_PROJECT"]
repository_id = os.environ["AZDO_REPOSITORY_ID"]
pat = os.environ["AZDO_PAT"]
url = f"https://dev.azure.com/{organization}/{project}/_apis/policy/configurations"
params = {
"api-version": "7.1",
"repositoryId": repository_id,
"refName": "refs/heads/main",
}
policies = []
while True:
response = requests.get(
url,
params=params,
auth=HTTPBasicAuth("", pat),
timeout=30,
)
response.raise_for_status()
payload = response.json()
policies.extend(payload.get("value", []))
continuation_token = response.headers.get("x-ms-continuationtoken")
if not continuation_token:
break
params["continuationToken"] = continuation_token
print(f"Políticas encontradas: {len(policies)}")
Este ejemplo no crea ni modifica políticas. Su objetivo es mostrar un patrón de consulta más seguro para automatizaciones que auditan o comparan configuración.
4. Hacer actualizaciones idempotentes
Para herramientas de gobierno a escala, es recomendable evitar actualizaciones innecesarias.
Un flujo más robusto suele ser:
- leer la política actual;
- normalizar la configuración relevante;
- compararla con la configuración deseada;
- actualizar solo si hay cambios reales;
- registrar la operación.
Este enfoque reduce ruido, evita cambios repetitivos en auditoría y disminuye el número de llamadas de escritura.
Qué no cambia
La optimización de rendimiento no elimina la necesidad de diseñar bien el modelo de gobierno.
Siguen siendo importantes aspectos como:
- definir qué ramas deben estar protegidas;
- establecer excepciones de forma controlada;
- documentar quién puede modificar políticas;
- usar permisos mínimos para automatizaciones;
- auditar cambios en repositorios críticos;
- revisar periódicamente que las políticas aplicadas siguen respondiendo a las necesidades del equipo.
Tampoco conviene asumir que una única política sirve para todos los repositorios. En organizaciones grandes suele ser útil diferenciar entre plantillas base y excepciones justificadas.
Consideraciones de seguridad
La gestión de políticas Git suele requerir permisos sensibles. Por eso, cualquier automatización que interactúe con la API REST de Azure DevOps debería seguir algunas prácticas mínimas:
- Usar permisos mínimos: el token o identidad de servicio debe tener solo los permisos necesarios.
- Evitar secretos en código: los PAT y credenciales deben gestionarse mediante variables seguras, almacenes de secretos o mecanismos equivalentes.
- Registrar cambios: las modificaciones de políticas deberían quedar trazadas.
- Separar lectura y escritura: cuando sea posible, usar identidades distintas para auditoría y para cambios.
- Validar alcance: antes de actualizar una política, comprobar repositorio, rama y tipo de política.
- Probar en proyectos no críticos: validar scripts en un entorno controlado antes de aplicarlos de forma masiva.
Impacto para equipos DevOps y platform engineering
Para equipos responsables de plataformas internas, esta mejora es relevante porque reduce el coste de mantener gobierno continuo sobre Azure Repos.
Algunos casos típicos donde puede aportar valor:
- auditorías periódicas de ramas protegidas;
- comprobación de políticas mínimas por repositorio;
- detección de desviaciones respecto a una configuración estándar;
- generación de informes de cumplimiento;
- automatización de correcciones controladas;
- revisión de configuraciones tras crear nuevos repositorios.
El beneficio no está solo en que una llamada sea más rápida, sino en que los procesos de gobierno completos pueden ejecutarse con menos latencia y menor coste operativo.
Recomendaciones prácticas
Si ya tienes automatizaciones que gestionan políticas Git en Azure DevOps, merece la pena revisarlas con estas preguntas:
- ¿Estamos filtrando por repositorio, rama o tipo de política en la API?
- ¿Estamos descargando más configuraciones de las necesarias?
- ¿Tenemos lógica de paginación o continuación?
- ¿Las actualizaciones son idempotentes?
- ¿Se registran los cambios aplicados?
- ¿El token usado tiene permisos mínimos?
- ¿Podemos separar auditoría de remediación?
En muchos casos, no hará falta reescribir toda la herramienta. Puede bastar con ajustar el patrón de consulta y reducir listados globales.
Conclusión
La optimización anunciada para la API REST de Azure DevOps mejora de forma significativa los escenarios de gestión de políticas Git a escala. Según Microsoft, la mejora consigue aproximadamente un 50% menos de uso de CPU y ejecuciones entre 10 y 15 veces más rápidas en los flujos analizados.
La clave para aprovecharla bien es mantener automatizaciones eficientes: filtrar en origen, evitar listados innecesarios, gestionar paginación, aplicar cambios solo cuando proceda y proteger adecuadamente las credenciales.
Para organizaciones con muchos repositorios en Azure Repos, esta mejora puede reducir la fricción operativa de mantener políticas consistentes sin sacrificar control ni seguridad.
Fuente
- Microsoft Azure DevOps Blog: Optimizing Git policy management at scale
Dominando el monitoreo en Microsoft Fabric Data Warehouse
Introducción
El monitoreo de un Data Warehouse en Microsoft Fabric no consiste únicamente en saber si una consulta ha fallado. En un entorno analítico real, necesitas responder preguntas como:
- ¿Qué consultas están consumiendo más tiempo?
- ¿Qué usuarios o procesos generan más actividad?
- ¿Hay consultas recurrentes que conviene optimizar?
- ¿La capacidad de Fabric está mostrando señales de saturación?
- ¿Los tiempos de carga y transformación siguen siendo aceptables?
Microsoft Fabric Data Warehouse ofrece varias superficies de observabilidad que conviene entender de forma conjunta: vistas de actividad, vistas de sistema para análisis histórico, DMVs compatibles y métricas de capacidad. No todas resuelven el mismo problema, y esa distinción es clave para diseñar una estrategia de monitoreo útil.
Nota: Este artículo se centra en Microsoft Fabric Data Warehouse. Algunas recomendaciones pueden aplicar también al SQL analytics endpoint de un Lakehouse, pero las capacidades concretas deben validarse en cada tipo de elemento.
Qué significa monitorear un Data Warehouse en Fabric
En Fabric, el monitoreo de un Data Warehouse suele cubrir cuatro dimensiones principales:
- Actividad operativa: saber qué consultas se están ejecutando, cuáles han finalizado y cuáles han fallado.
- Rendimiento de consultas: identificar consultas lentas, frecuentes o candidatas a optimización.
- Consumo de capacidad: entender el impacto de las cargas de trabajo sobre la capacidad de Fabric.
- Confiabilidad de procesos: revisar cargas, transformaciones y operaciones recurrentes para detectar desviaciones.
Es importante no mezclar conceptos. Fabric Data Warehouse no debe tratarse como si fuera una instancia tradicional de SQL Server administrada por el cliente. La plataforma abstrae buena parte de la infraestructura, por lo que el foco del monitoreo se desplaza hacia la actividad SQL, el comportamiento de las consultas y el consumo de capacidad.
Superficies de monitoreo disponibles
1. Vista de actividad de consultas del Warehouse
Una de las formas más directas de revisar lo que ocurre en un Warehouse es utilizar las capacidades de actividad de consultas disponibles desde la experiencia de Fabric.
Esta vista resulta útil para tareas operativas como:
- Revisar consultas en ejecución.
- Consultar el estado de consultas recientes.
- Identificar consultas con errores.
- Analizar duraciones elevadas.
- Ver qué actividad está asociada a usuarios o procesos concretos, según la información disponible en el entorno.
Es una herramienta especialmente útil durante investigación de incidencias: por ejemplo, cuando un usuario reporta lentitud o cuando una carga programada tarda más de lo habitual.
2. Query Insights
Query Insights permite analizar el comportamiento histórico de las consultas en Fabric Data Warehouse mediante vistas de sistema. Es una de las capacidades más relevantes para pasar de un monitoreo reactivo a un análisis más sistemático.
Entre los casos de uso más habituales están:
- Encontrar consultas de larga duración.
- Detectar consultas ejecutadas con mucha frecuencia.
- Revisar historial de solicitudes SQL.
- Analizar patrones de rendimiento a lo largo del tiempo.
- Priorizar qué consultas optimizar primero.
Antes de crear consultas de análisis complejas, es recomendable inspeccionar las vistas y columnas disponibles en el entorno:
SELECT
TABLE_SCHEMA,
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'queryinsights'
ORDER BY TABLE_NAME;
Para revisar la estructura de una vista concreta:
SELECT
COLUMN_NAME,
DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'queryinsights'
AND TABLE_NAME = 'exec_requests_history'
ORDER BY ORDINAL_POSITION;
A partir de ahí, se pueden explorar las vistas de Query Insights:
SELECT TOP (100)
*
FROM queryinsights.exec_requests_history;
También puedes revisar las consultas de mayor duración si la vista está disponible en tu entorno:
SELECT TOP (50)
*
FROM queryinsights.long_running_queries;
Y analizar consultas frecuentes:
SELECT TOP (50)
*
FROM queryinsights.frequently_run_queries;
Recomendación: evita construir automatizaciones críticas basadas en nombres de columnas no verificados. Primero inspecciona el esquema disponible en tu tenant y después ajusta las consultas de monitoreo.
3. DMVs para actividad en curso
Fabric Data Warehouse expone determinadas vistas dinámicas de administración compatibles con T-SQL. Estas vistas ayudan a revisar actividad actual, sesiones y solicitudes.
Por ejemplo, para inspeccionar solicitudes activas:
SELECT TOP (50)
*
FROM sys.dm_exec_requests;
Para revisar sesiones:
SELECT TOP (50)
*
FROM sys.dm_exec_sessions;
Si necesitas relacionar sesiones y solicitudes, puedes partir de una consulta como esta y adaptarla a las columnas disponibles:
SELECT TOP (50)
r.session_id,
r.status,
r.command,
r.start_time,
r.total_elapsed_time,
s.login_name,
s.host_name
FROM sys.dm_exec_requests AS r
LEFT JOIN sys.dm_exec_sessions AS s
ON r.session_id = s.session_id
ORDER BY r.total_elapsed_time DESC;
Estas consultas son útiles para diagnóstico inmediato. Para análisis histórico, Query Insights suele ser más adecuado.
4. Métricas de capacidad de Fabric
El rendimiento percibido de un Warehouse no depende solo de una consulta individual. También influye el estado de la capacidad de Fabric donde se ejecuta la carga.
Para administradores de plataforma, la aplicación de métricas de capacidad de Microsoft Fabric es una pieza importante porque permite analizar aspectos como:
- Uso de capacidad.
- Tendencias de consumo.
- Operaciones interactivas y en segundo plano.
- Posibles señales de saturación o throttling.
- Distribución del consumo entre cargas de trabajo.
Este nivel de monitoreo es especialmente relevante cuando varios equipos comparten la misma capacidad o cuando conviven cargas de Power BI, Data Engineering, Data Factory y Data Warehouse.
Ejemplo práctico: investigar consultas lentas
Supongamos que varios usuarios indican que un informe basado en el Warehouse tarda más de lo habitual. Un enfoque razonable sería combinar revisión operativa e histórica.
Paso 1: comprobar actividad actual
Primero revisa si hay consultas activas que estén tardando demasiado:
SELECT TOP (50)
*
FROM sys.dm_exec_requests
ORDER BY total_elapsed_time DESC;
Si el problema está ocurriendo en ese momento, esta consulta puede ayudarte a detectar actividad anómala o solicitudes de larga duración.
Paso 2: revisar histórico de solicitudes
Después, consulta el historial disponible mediante Query Insights:
SELECT TOP (100)
*
FROM queryinsights.exec_requests_history;
A partir de las columnas disponibles en tu entorno, puedes filtrar por ventana temporal, estado, usuario, duración o texto de consulta si la vista expone esa información.
Paso 3: identificar consultas candidatas a optimización
Consulta las vistas agregadas para priorizar:
SELECT TOP (50)
*
FROM queryinsights.long_running_queries;
SELECT TOP (50)
*
FROM queryinsights.frequently_run_queries;
Una consulta que tarda mucho y se ejecuta pocas veces puede tener una prioridad distinta a una consulta moderadamente lenta que se ejecuta cientos de veces al día.
Paso 4: revisar el diseño y el patrón de acceso
Una vez identificadas las consultas problemáticas, revisa aspectos como:
- Predicados y filtros aplicados.
- Joins innecesarios o excesivamente amplios.
- Consultas que leen muchas más columnas de las necesarias.
- Transformaciones repetidas que podrían materializarse previamente.
- Modelado de tablas y granularidad de datos.
- Uso de objetos intermedios para simplificar consultas complejas.
En Fabric Data Warehouse, como en cualquier plataforma analítica, la optimización no consiste solo en “hacer más rápida una consulta”, sino en reducir trabajo innecesario y alinear el diseño del modelo con los patrones reales de consumo.
Monitoreo de cargas y procesos recurrentes
Además de las consultas interactivas, muchos Warehouses reciben datos mediante procesos programados: pipelines, notebooks, Dataflows Gen2 u otros mecanismos de ingesta y transformación.
Para estos escenarios conviene revisar:
- Duración de cargas.
- Frecuencia de fallos.
- Volumen cargado.
- Cambios bruscos en tiempos de ejecución.
- Dependencias entre procesos.
- Horarios de mayor concurrencia.
El monitoreo del Warehouse debe coordinarse con el monitoreo de los procesos que lo alimentan. Si una tabla llega tarde, incompleta o con un volumen inesperado, el problema puede aparecer en el Warehouse aunque su origen esté en una etapa previa del flujo de datos.
Calidad de datos: necesaria, pero no sustituye al monitoreo
La calidad de datos no debe confundirse con monitoreo de infraestructura o rendimiento. Fabric Data Warehouse puede ayudarte a observar actividad y rendimiento, pero la validación funcional de los datos requiere controles adicionales.
Algunos controles recomendables son:
- Recuentos de filas por lote.
- Validación de claves y duplicados.
- Comprobaciones de nulos en columnas críticas.
- Comparación de totales contra sistemas origen.
- Reglas de negocio sobre rangos, estados o fechas.
- Tablas de auditoría para cargas y transformaciones.
Por ejemplo, puedes mantener una tabla de auditoría de cargas:
CREATE TABLE dbo.LoadAudit
(
LoadId VARCHAR(100) NOT NULL,
ProcessName VARCHAR(200) NOT NULL,
StartTime DATETIME2(6) NOT NULL,
EndTime DATETIME2(6) NULL,
Status VARCHAR(50) NOT NULL,
RowsInserted BIGINT NULL,
RowsUpdated BIGINT NULL,
ErrorMessage VARCHAR(4000) NULL
);
Y consultar procesos fallidos o incompletos:
SELECT TOP (100)
*
FROM dbo.LoadAudit
WHERE Status <> 'Succeeded'
ORDER BY StartTime DESC;
Este tipo de auditoría complementa la observabilidad técnica y ayuda a responder una pregunta distinta: no solo si el sistema ejecutó una operación, sino si el resultado fue correcto desde el punto de vista del negocio.
Buenas prácticas para monitorear Fabric Data Warehouse
1. Separa monitoreo operativo y análisis histórico
Usa la actividad de consultas y las DMVs para diagnóstico inmediato. Usa Query Insights para análisis de tendencias, priorización de optimizaciones y revisión periódica.
2. Define umbrales realistas
No todas las consultas deben durar lo mismo. Una consulta exploratoria compleja puede tardar más que una consulta usada por un informe ejecutivo. Define umbrales por tipo de carga:
- Consultas interactivas.
- Informes recurrentes.
- Procesos de carga.
- Transformaciones pesadas.
- Consultas ad hoc de análisis.
3. Revisa la capacidad, no solo el Warehouse
Si varios equipos comparten capacidad, una degradación de rendimiento puede estar relacionada con otras cargas de trabajo. Incluye las métricas de capacidad en el diagnóstico.
4. Prioriza por impacto
No optimices únicamente la consulta más lenta. Prioriza combinando:
- Duración.
- Frecuencia.
- Usuarios afectados.
- Importancia del proceso.
- Ventana horaria.
- Consumo relativo de capacidad.
5. Mantén consultas de diagnóstico versionadas
Conviene disponer de un pequeño conjunto de consultas T-SQL revisadas y versionadas para diagnóstico. Por ejemplo:
- Actividad actual.
- Consultas históricas de larga duración.
- Consultas frecuentes.
- Sesiones activas.
- Auditoría de cargas.
- Procesos fallidos.
Esto reduce el tiempo de respuesta durante incidencias y evita improvisar consultas bajo presión.
6. Documenta patrones normales
El monitoreo solo es útil si puedes distinguir lo normal de lo anómalo. Documenta valores de referencia:
- Duración habitual de cargas.
- Horarios de mayor actividad.
- Consultas críticas.
- Procesos que no deben solaparse.
- Volúmenes esperados por día o por lote.
Errores comunes que conviene evitar
Asumir que existe una única consola de monitoreo para todo
Fabric proporciona distintas experiencias y vistas según el tipo de información que necesitas. No conviene reducirlo todo a una única pantalla.
Confundir métricas de capacidad con métricas de consulta
Las métricas de capacidad ayudan a entender el consumo global. Query Insights y las vistas de actividad ayudan a entender el comportamiento de consultas concretas. Ambas perspectivas son complementarias.
Automatizar sobre columnas no validadas
Antes de construir informes o alertas basadas en vistas de sistema, valida las columnas disponibles en tu entorno. Las consultas de diagnóstico deben ser explícitas y mantenibles.
Ignorar procesos de ingesta
Una parte importante de los problemas percibidos en un Warehouse se origina antes de que el dato llegue a las tablas finales. Monitorea también pipelines, transformaciones y controles de calidad.
Conclusión
Monitorear Microsoft Fabric Data Warehouse requiere combinar varias capas: actividad de consultas, Query Insights, DMVs, métricas de capacidad y controles propios de calidad y auditoría. Ninguna de estas piezas por sí sola ofrece una visión completa.
Una estrategia sólida debería permitirte:
- Detectar consultas lentas o fallidas.
- Analizar tendencias históricas.
- Priorizar optimizaciones por impacto.
- Entender la presión sobre la capacidad.
- Validar que los procesos de carga producen datos correctos.
El objetivo no es acumular dashboards, sino reducir el tiempo de diagnóstico y mejorar la confiabilidad de la plataforma analítica. En entornos Fabric con varios equipos y cargas de trabajo compartidas, esta disciplina marca la diferencia entre reaccionar ante incidencias y operar el Data Warehouse con control.
Foundry IQ en Vivo: Demo Completa del Knowledge Agent de Azure AI Search
Demo técnica — Este post documenta la sesión de demostración del 28 de febrero de 2026. El objetivo no es presentar un benchmark ni un contrato de API, sino enseñar cómo estructurar una capa de conocimiento compartida sobre Azure AI Search para que varios agentes puedan recuperar contexto de forma consistente, observable y gobernable.
Antes de empezar: qué es y qué no es esta demo
En esta serie hemos usado el nombre Foundry IQ para referirnos a una capa de conocimiento construida alrededor de Azure AI Search, Azure AI Foundry y modelos de lenguaje. En la práctica, el patrón combina:
- índices de Azure AI Search preparados para búsqueda léxica, semántica y/o vectorial;
- un componente de recuperación agéntica o planificada;
- agentes de aplicación que reutilizan la misma base documental;
- trazabilidad de consultas, fuentes y decisiones de recuperación.
Conviene separar dos cosas:
- Capacidades de plataforma: Azure AI Search, Azure AI Foundry, modelos desplegados y mecanismos de recuperación soportados por la versión de API vigente.
- Código de aplicación: perfiles de consulta, logs normalizados, reglas de negocio, selección de fuentes y políticas internas.
En este artículo, los ejemplos de código representan principalmente la capa de aplicación. Evitamos fijar nombres concretos de clases de SDK, endpoints o versiones de API preview porque esas superficies pueden cambiar y deben verificarse siempre contra la documentación oficial vigente en el momento de implementación.
¿Qué vamos a demostrar?
La demo se organiza en cinco bloques:
- Infraestructura: qué componentes intervienen y cómo se separan responsabilidades.
- Primera consulta: una pregunta sencilla y cómo leer la traza de recuperación.
- Consulta compleja: descomposición de la pregunta, varias pasadas de recuperación y evaluación de cobertura.
- Integración multi-agente: cómo varios agentes consumen la misma capa de conocimiento.
- Comparativa operativa: perfiles rápido, equilibrado y profundo, con sus implicaciones de latencia, coste y calidad.
1. Infraestructura: qué tenemos montado
El entorno de demo parte de una idea sencilla: los agentes no deberían mantener cada uno su propio índice, sus propios documentos y sus propias reglas de recuperación. En su lugar, comparten una capa común de conocimiento.
┌─────────────────────────────────────────────────────────────────────┐
│ Azure AI Foundry │
│ │
│ ┌─────────────────┐ ┌──────────────────────────────────┐ │
│ │ Modelos LLM │ │ Capa de recuperación │ │
│ │ │ │ │ │
│ │ Planificación │───────▶│ Azure AI Search │ │
│ │ Síntesis │ │ Índices: │ │
│ │ Evaluación │ │ • idx-posts │ │
│ └─────────────────┘ │ • idx-news │ │
│ │ │ │
│ │ Recuperación híbrida, semántica │ │
│ │ y/o vectorial según el índice │ │
│ └──────────────────────────────────┘ │
│ ▲ │
│ │ │
│ ┌──────────────────────────────────┼─────────────────┐ │
│ │ │ │ │
│ ┌─────┴─────┐ ┌──────────────┐ ┌──────┴──────┐ ┌───────┴──┐ │
│ │Discoverer │ │ Analyzer │ │ Writer │ │ Improver │ │
│ │Agent │ │ Agent │ │ Agent │ │ Agent │ │
│ └───────────┘ └──────────────┘ └─────────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────────────┘
Responsabilidades por capa
| Capa | Responsabilidad |
|---|---|
| Índices de Azure AI Search | Almacenar documentos, fragmentos, metadatos, campos filtrables y señales de ranking. |
| Recuperación | Buscar documentos relevantes mediante búsqueda textual, semántica, vectorial o híbrida, según el diseño del índice. |
| Planificación | Reformular o descomponer preguntas cuando la consulta lo requiere. |
| Síntesis | Construir una respuesta usando únicamente el contexto recuperado. |
| Observabilidad | Registrar qué se preguntó, qué fuentes se consultaron, cuántos resultados se usaron y qué señales de calidad se obtuvieron. |
| Agentes de aplicación | Usar la capa de conocimiento para tareas concretas: deduplicar, analizar, redactar o revisar contenido. |
Supuestos del entorno
Para que el patrón funcione de forma razonable, los índices deben estar diseñados antes de llegar al agente:
- documentos fragmentados en unidades recuperables;
- identificadores estables de documento y fragmento;
- campos de metadatos para fecha, categoría, idioma, autor, origen y permisos;
- configuración de búsqueda adecuada al caso de uso;
- estrategia clara de actualización e invalidación de contenido;
- trazabilidad entre respuesta generada y documentos usados.
La recuperación agéntica no compensa un índice mal modelado. Si los chunks son demasiado grandes, los metadatos son pobres o no hay filtros de seguridad, la calidad del sistema se degrada aunque el modelo sea muy bueno.
2. Primera consulta: pregunta sencilla y traza de recuperación
Empezamos con una consulta simple:
¿Qué es Foundry IQ y cuáles son sus principales ventajas frente a un RAG clásico?
En la aplicación de demo no exponemos directamente la llamada de bajo nivel. Usamos un cliente interno que encapsula el proveedor de recuperación. Esto permite cambiar de versión de API, SDK o estrategia sin modificar todos los agentes.
# knowledge_client.py
from dataclasses import dataclass
from typing import Literal, Protocol
RetrievalDepth = Literal["rapida", "equilibrada", "profunda"]
@dataclass(frozen=True)
class RetrievalProfile:
name: str
depth: RetrievalDepth
max_documents: int
allow_query_rewrite: bool
allow_second_pass: bool
timeout_seconds: int
BALANCED_PROFILE = RetrievalProfile(
name="balanced",
depth="equilibrada",
max_documents=8,
allow_query_rewrite=True,
allow_second_pass=False,
timeout_seconds=10,
)
class RetrievalProvider(Protocol):
def retrieve(self, *, messages: list[dict], profile: RetrievalProfile) -> dict:
...
class KnowledgeClient:
"""
Cliente de aplicación.
No acopla los agentes al detalle de una versión concreta de SDK o API.
El proveedor real puede usar Azure AI Search, una API preview vigente,
un wrapper REST interno o una combinación de búsqueda + síntesis.
"""
def __init__(self, provider: RetrievalProvider):
self._provider = provider
def ask(self, question: str, profile: RetrievalProfile = BALANCED_PROFILE) -> dict:
messages = [
{
"role": "system",
"content": (
"Responde en español, con precisión técnica y usando solo "
"el contexto recuperado. Si falta evidencia, indícalo."
),
},
{
"role": "user",
"content": question,
},
]
return self._provider.retrieve(messages=messages, profile=profile)
La llamada desde un agente queda así:
result = knowledge_client.ask(
"¿Qué es Foundry IQ y cuáles son sus principales ventajas frente a un RAG clásico?"
)
print(result["answer"])
for source in result["sources"]:
print(f"- {source['id']} ({source['index']}) score={source.get('score')}")
Respuesta observada en la demo
Foundry IQ, en el contexto de esta arquitectura, es una capa de conocimiento compartida
para agentes. Su objetivo es centralizar la recuperación de información sobre una base
documental común, en lugar de que cada agente mantenga su propio índice o sus propias
copias de contexto.
Frente a un RAG clásico punto a punto, aporta tres ventajas principales:
1. Reutilización: varios agentes consultan los mismos índices y aplican criterios
coherentes de recuperación.
2. Gobernanza: los filtros, metadatos, umbrales y reglas de acceso pueden gestionarse
en una capa común.
3. Observabilidad: la aplicación puede registrar consultas, documentos recuperados,
cobertura, latencia y señales de calidad para mejorar el sistema de forma iterativa.
La diferencia importante no es solo tecnológica, sino arquitectónica: la recuperación
pasa de ser una función embebida en cada agente a convertirse en una capacidad compartida
de la plataforma.
Traza normalizada
La siguiente traza no pretende representar un esquema oficial de Azure AI Search. Es el formato normalizado que usamos en la aplicación para observar qué ha ocurrido durante la recuperación.
{
"query": "¿Qué es Foundry IQ y cuáles son sus principales ventajas frente a un RAG clásico?",
"profile": "balanced",
"query_rewrite_enabled": true,
"rewritten_queries": [
"Foundry IQ capa de conocimiento compartida",
"ventajas de una capa RAG centralizada frente a RAG clásico",
"arquitectura multi-agente con Azure AI Search"
],
"indexes_queried": [
"idx-posts",
"idx-news"
],
"documents_returned": 6,
"documents_used_for_answer": 4,
"second_pass_executed": false,
"stop_reason": "sufficient_context",
"latency_ms": 1840
}
Qué podemos leer en la traza:
- La pregunta se reformuló en varias consultas más específicas.
- Se consultaron dos índices internos.
- No hizo falta una segunda pasada de recuperación.
- El sistema encontró contexto suficiente para responder.
- La latencia observada fue razonable para una consulta interactiva.
3. Consulta compleja: planificación y recuperación iterativa
Ahora lanzamos una pregunta más exigente:
Analiza la evolución del stack de RAG en Azurebrains desde noviembre de 2025 hasta ahora. ¿Qué cambios arquitectónicos se han producido? ¿Cómo ha evolucionado el uso de la capa de conocimiento? ¿Qué decisiones siguen abiertas?
Esta pregunta no es una búsqueda puntual. Mezcla cronología, arquitectura, comparación y análisis. Para estos casos usamos un perfil más profundo.
DEEP_PROFILE = RetrievalProfile(
name="deep",
depth="profunda",
max_documents=16,
allow_query_rewrite=True,
allow_second_pass=True,
timeout_seconds=30,
)
result = knowledge_client.ask(
question=(
"Analiza la evolución del stack de RAG en Azurebrains desde noviembre de 2025 "
"hasta ahora. ¿Qué cambios arquitectónicos se han producido? ¿Cómo ha "
"evolucionado el uso de la capa de conocimiento? ¿Qué decisiones siguen abiertas?"
),
profile=DEEP_PROFILE,
)
Traza observada
{
"query": "Analiza la evolución del stack de RAG en Azurebrains desde noviembre de 2025...",
"profile": "deep",
"query_rewrite_enabled": true,
"rewritten_queries": [
"RAG Azurebrains noviembre 2025 arquitectura inicial",
"Azurebrains capa de conocimiento agentes recuperación",
"evolución arquitectura RAG multi-agente",
"decisiones pendientes gobernanza observabilidad RAG",
"Azure AI Search búsqueda híbrida semantic reranking agentes"
],
"indexes_queried": [
"idx-posts",
"idx-news"
],
"first_pass": {
"documents_returned": 12,
"coverage": "partial",
"missing_aspects": [
"decisiones abiertas",
"comparación entre arquitectura inicial y arquitectura actual"
]
},
"second_pass": {
"executed": true,
"reason": "partial_coverage",
"additional_queries": [
"decisiones pendientes arquitectura RAG Azurebrains",
"observabilidad evaluación calidad recuperación agentes"
],
"documents_returned": 5
},
"documents_used_for_answer": 9,
"stop_reason": "sufficient_context",
"latency_ms": 11240
}
Qué aporta la segunda pasada
En consultas complejas, una única búsqueda puede recuperar documentos relevantes pero incompletos. La segunda pasada permite:
- buscar explícitamente aspectos que no aparecieron en la primera recuperación;
- mejorar cobertura cronológica;
- distinguir entre documentos centrales y documentos de apoyo;
- reducir respuestas demasiado genéricas;
- detectar que falta evidencia antes de sintetizar.
Esto no significa que todas las consultas deban usar recuperación profunda. En una aplicación real, el perfil debe elegirse según el tipo de operación, el SLA de latencia y el coste aceptable.
4. Integración multi-agente: el patrón del blog
El patrón más importante de la demo es que varios agentes consumen la misma capa de conocimiento.
# agent_profiles.py
from dataclasses import dataclass
from typing import Literal
AgentName = Literal["discoverer", "analyzer", "writer", "improver"]
@dataclass(frozen=True)
class AgentProfile:
name: AgentName
default_retrieval_profile: RetrievalProfile
system_prompt: str
AGENT_PROFILES: dict[AgentName, AgentProfile] = {
"discoverer": AgentProfile(
name="discoverer",
default_retrieval_profile=RetrievalProfile(
name="discovery-fast",
depth="rapida",
max_documents=5,
allow_query_rewrite=True,
allow_second_pass=False,
timeout_seconds=8,
),
system_prompt=(
"Eres un agente de descubrimiento. Evalúa si una noticia o tema "
"ya está cubierto en la base de conocimiento."
),
),
"analyzer": AgentProfile(
name="analyzer",
default_retrieval_profile=DEEP_PROFILE,
system_prompt=(
"Eres un analista técnico. Evalúa novedad, impacto, profundidad "
"y relación con contenido existente."
),
),
"writer": AgentProfile(
name="writer",
default_retrieval_profile=BALANCED_PROFILE,
system_prompt=(
"Eres un redactor técnico. Usa las fuentes recuperadas como grounding "
"y evita afirmaciones no respaldadas."
),
),
"improver": AgentProfile(
name="improver",
default_retrieval_profile=BALANCED_PROFILE,
system_prompt=(
"Eres un revisor técnico. Detecta afirmaciones ambiguas, obsoletas "
"o sin evidencia suficiente."
),
),
}
Y un cliente común para todos:
class AgentKnowledgeService:
def __init__(self, knowledge_client: KnowledgeClient):
self._knowledge_client = knowledge_client
def query(
self,
*,
agent: AgentName,
user_message: str,
conversation_history: list[dict] | None = None,
override_profile: RetrievalProfile | None = None,
) -> dict:
agent_profile = AGENT_PROFILES[agent]
retrieval_profile = override_profile or agent_profile.default_retrieval_profile
messages = [
{
"role": "system",
"content": agent_profile.system_prompt,
}
]
if conversation_history:
messages.extend(conversation_history)
messages.append(
{
"role": "user",
"content": user_message,
}
)
return self._knowledge_client._provider.retrieve(
messages=messages,
profile=retrieval_profile,
)
Ejemplo de uso desde el agente de análisis:
result = agent_knowledge_service.query(
agent="analyzer",
user_message=(
"Evalúa si este tema aporta novedad suficiente para un artículo técnico: "
"'uso de recuperación agéntica sobre Azure AI Search para agentes editoriales'"
),
)
print(result["answer"])
Ventajas del patrón
Este diseño tiene varias ventajas prácticas:
- Menos duplicación: los agentes no implementan su propia recuperación desde cero.
- Mejor control de calidad: todos pasan por la misma política de fuentes y trazabilidad.
- Cambio más seguro: si cambia la API subyacente, se modifica el proveedor, no todos los agentes.
- Auditoría más sencilla: las consultas quedan registradas con un formato común.
- Evolución incremental: se pueden ajustar perfiles sin reescribir la lógica de negocio.
5. Comparativa operativa: rápido, equilibrado y profundo
En lugar de hablar de niveles como si fueran propiedades universales del servicio, en la aplicación usamos tres perfiles operativos.
| Perfil | Objetivo | Reformulación | Segunda pasada | Documentos máximos | Latencia observada | Uso recomendado |
|---|---|---|---|---|---|---|
rapida |
Responder o decidir rápido | Opcional | No | 3–5 | < 1 s a pocos segundos | deduplicación, checks simples, tool calls |
equilibrada |
Buen balance calidad/latencia | Sí | No normalmente | 6–10 | pocos segundos | grounding general, redacción asistida, preguntas normales |
profunda |
Maximizar cobertura | Sí | Sí | 12–20 | varios segundos o más | análisis, investigación, comparación, revisión compleja |
Ejemplo de ejecución comparativa:
import time
PROFILES = [
RetrievalProfile(
name="fast",
depth="rapida",
max_documents=5,
allow_query_rewrite=True,
allow_second_pass=False,
timeout_seconds=8,
),
BALANCED_PROFILE,
DEEP_PROFILE,
]
query = "Explica cómo mejora la planificación de consultas la calidad de recuperación en un sistema RAG."
for profile in PROFILES:
start = time.perf_counter()
result = knowledge_client.ask(query, profile=profile)
elapsed_ms = int((time.perf_counter() - start) * 1000)
print(f"\nPerfil: {profile.name}")
print(f"Latencia cliente: {elapsed_ms} ms")
print(f"Documentos usados: {result['trace']['documents_used_for_answer']}")
print(f"Motivo de parada: {result['trace']['stop_reason']}")
print(result["answer"][:500])
Resultado resumido
Perfil: fast
Latencia cliente: 740 ms
Documentos usados: 3
Motivo de parada: sufficient_context
Respuesta breve, útil para una explicación rápida, pero con menos matices.
Perfil: balanced
Latencia cliente: 1910 ms
Documentos usados: 5
Motivo de parada: sufficient_context
Respuesta más estructurada, con mejor separación entre planificación, recuperación
y síntesis.
Perfil: deep
Latencia cliente: 10480 ms
Documentos usados: 9
Motivo de parada: sufficient_context
Respuesta más completa, con ejemplos, límites del patrón y consideraciones de
producción.
La conclusión práctica es clara: no existe un perfil óptimo para todo. La recuperación profunda mejora cobertura, pero no debería usarse para cada interacción si el usuario espera una respuesta inmediata.
Patrones de producción aprendidos
Patrón 1: elegir profundidad por operación, no por agente
Un error habitual es asignar un perfil fijo a cada agente. En producción suele funcionar mejor decidir por tipo de operación.
def profile_for_operation(operation: str) -> RetrievalProfile:
if operation in {
"deduplication_check",
"quick_grounding",
"simple_fact_lookup",
}:
return RetrievalProfile(
name="operation-fast",
depth="rapida",
max_documents=5,
allow_query_rewrite=True,
allow_second_pass=False,
timeout_seconds=8,
)
if operation in {
"article_grounding",
"technical_review",
"source_validation",
}:
return BALANCED_PROFILE
if operation in {
"novelty_analysis",
"comparative_research",
"architecture_review",
}:
return DEEP_PROFILE
return BALANCED_PROFILE
El mismo agente puede necesitar una recuperación rápida para una comprobación puntual y una recuperación profunda para un análisis de novedad.
Patrón 2: tratar la traza como señal de calidad
La observabilidad no debería limitarse a latencia y errores HTTP. Para sistemas RAG o agentic retrieval conviene registrar señales de calidad.
def summarize_retrieval_quality(result: dict, query_id: str) -> dict:
trace = result["trace"]
sources = result.get("sources", [])
scores = [
source["score"]
for source in sources
if isinstance(source.get("score"), int | float)
]
avg_score = sum(scores) / len(scores) if scores else None
return {
"query_id": query_id,
"profile": trace.get("profile"),
"documents_returned": trace.get("documents_returned"),
"documents_used_for_answer": trace.get("documents_used_for_answer"),
"second_pass_executed": trace.get("second_pass", {}).get("executed", False),
"stop_reason": trace.get("stop_reason"),
"latency_ms": trace.get("latency_ms"),
"avg_score": avg_score,
}
Señales útiles para alertas o revisión:
- demasiadas consultas terminan por timeout;
- muchas respuestas usan pocos documentos;
- baja puntuación media de recuperación;
- ausencia de fuentes en respuestas que deberían estar fundamentadas;
- incremento brusco de latencia;
- aumento de consultas sin cobertura suficiente.
Patrón 3: historial conversacional con límites
Para agentes como writer, pasar historial puede mejorar la coherencia. Pero no conviene enviar todo sin control.
def compact_history(history: list[dict], max_turns: int = 6) -> list[dict]:
"""
Mantiene los últimos turnos relevantes.
En producción puede combinarse con resumen conversacional y filtros de seguridad.
"""
return history[-max_turns:]
conversation: list[dict] = []
first = agent_knowledge_service.query(
agent="writer",
user_message="Explica qué es una capa de conocimiento compartida para agentes.",
)
conversation.append(
{
"role": "user",
"content": "Explica qué es una capa de conocimiento compartida para agentes.",
}
)
conversation.append(
{
"role": "assistant",
"content": first["answer"],
}
)
second = agent_knowledge_service.query(
agent="writer",
user_message="Compárala ahora con un RAG clásico embebido en cada aplicación.",
conversation_history=compact_history(conversation),
)
Recomendaciones:
- limitar longitud de historial;
- no reenviar datos sensibles innecesarios;
- resumir turnos antiguos;
- conservar referencias de fuentes usadas;
- separar memoria conversacional de base documental.
Patrón 4: filtros y permisos desde el diseño del índice
Si la base de conocimiento es multi-equipo o multi-cliente, la seguridad no puede depender solo del prompt.
Buenas prácticas:
- incluir campos filtrables de tenant, equipo, clasificación y visibilidad;
- aplicar filtros antes de la síntesis;
- no mostrar citas de documentos que el usuario no pueda ver;
- registrar el contexto de identidad usado en cada consulta;
- probar casos negativos: usuarios sin permiso, documentos mixtos y cambios de rol.
Patrón 5: degradación controlada
En sistemas con LLMs y recuperación, los fallos parciales son normales: timeouts, falta de cobertura, índices en actualización o límites de cuota.
La aplicación debería poder responder de forma controlada:
def safe_answer(result: dict) -> str:
trace = result.get("trace", {})
stop_reason = trace.get("stop_reason")
if stop_reason == "insufficient_context":
return (
"No tengo contexto suficiente en la base de conocimiento para responder "
"con precisión. Puedo darte una respuesta general, pero debería revisarse "
"contra fuentes adicionales."
)
if stop_reason == "timeout":
return (
"La búsqueda no ha terminado dentro del tiempo esperado. Prueba con una "
"pregunta más acotada o ejecuta un análisis profundo en segundo plano."
)
return result["answer"]
Checklist para llevar este patrón a producción
Antes de usar una arquitectura de este tipo en un flujo crítico, revisaría al menos estos puntos:
- Los índices tienen metadatos suficientes para filtrar, auditar y ordenar.
- Los documentos están fragmentados con una estrategia coherente.
- La aplicación registra fuentes usadas por cada respuesta.
- Existen perfiles de recuperación separados por operación.
- Los timeouts están definidos y probados.
- Hay pruebas con preguntas sin respuesta.
- Hay pruebas con documentos contradictorios.
- La seguridad se aplica antes de generar la respuesta.
- Las respuestas indican incertidumbre cuando falta evidencia.
- Las APIs preview están aisladas detrás de un adaptador interno.
- Hay métricas de latencia, cobertura, errores y coste.
- Existe un proceso de revisión para contenido generado automáticamente.
Próximos pasos
Las siguientes mejoras naturales de esta arquitectura son:
- calibración de ranking y umbrales: medir qué documentos se usan realmente y ajustar la recuperación con datos;
- evaluación automática: crear conjuntos de preguntas esperadas y comparar cobertura, citas y estabilidad;
- segmentación multi-tenant: aplicar filtros de seguridad y visibilidad desde el índice;
- observabilidad avanzada: correlacionar consulta, documentos recuperados, respuesta final y feedback humano;
- degradación por coste y latencia: decidir cuándo responder rápido, cuándo profundizar y cuándo ejecutar en background.
El código de integración debe mantenerse deliberadamente desacoplado de la API concreta. En tecnologías preview, esa separación es lo que permite evolucionar sin reescribir todos los agentes.
Este artículo es parte de la serie Azurebrains RAG Series:
GraphRAG: cuando las relaciones entre documentos importan más que el contenido
La pregunta que la búsqueda vectorial no puede responder bien
La búsqueda vectorial es muy eficaz para una familia concreta de preguntas: encontrar fragmentos de texto cuyo significado sea parecido al de una consulta. Es la herramienta natural para recuperar secciones de documentación, artículos relacionados con un tema o párrafos que explican una funcionalidad determinada.
Pero no todas las preguntas son preguntas de similitud semántica.
Por ejemplo:
“Dame los artículos que hablan de RAG, publicados después de enero de 2026, que enlazan documentación de Azure AI Search y que además comparten al menos dos etiquetas con el artículo actual”.
Esa consulta no pide “texto parecido”. Pide recorrer relaciones:
- artículo → etiquetas;
- artículo → recursos externos;
- artículo → fecha de publicación;
- artículo → otros artículos relacionados;
- artículo → autor o propietario.
Un índice vectorial puede ayudar a encontrar contenido semánticamente próximo, pero no es la estructura más adecuada para expresar filtros relacionales, caminos entre entidades o dependencias entre documentos. Para eso necesitamos otra representación: un grafo.
GraphRAG aparece precisamente en esa intersección: usar grafos para enriquecer la recuperación de información que alimenta a un modelo generativo.
Qué es GraphRAG
GraphRAG no debe entenderse simplemente como “RAG con una base de datos de grafos”. El enfoque descrito por Microsoft Research combina extracción de información desde texto, análisis de red, prompting con modelos de lenguaje y técnicas de resumen para construir una representación más rica de un corpus.
En términos prácticos, GraphRAG busca que el sistema no recupere solo fragmentos aislados, sino también entidades, relaciones, agrupaciones y contexto global del conjunto de documentos.
Un RAG clásico suele trabajar así:
- dividir documentos en fragmentos;
- generar embeddings;
- buscar los fragmentos más parecidos a la pregunta;
- pasarlos al modelo como contexto.
Un enfoque GraphRAG añade una capa adicional:
- identificar entidades, conceptos, documentos o recursos;
- representar relaciones entre ellos;
- analizar comunidades o grupos de entidades relacionadas;
- usar el grafo para guiar la recuperación;
- combinar el resultado estructural con texto relevante para generar la respuesta.
Esto permite responder mejor preguntas que dependen de relaciones, patrones globales o conexiones indirectas entre elementos del corpus.
GraphRAG aplicado a un blog técnico
En un blog técnico, muchas preguntas útiles no son puramente semánticas. Algunas dependen de la estructura editorial:
- qué artículos comparten etiquetas;
- qué posts enlazan a la misma documentación externa;
- qué contenidos pueden quedar obsoletos si cambia un servicio;
- qué artículos cubren el mismo producto desde ángulos distintos;
- qué temas están sobrerrepresentados o poco conectados;
- qué recursos externos aparecen como dependencias frecuentes.
En una implementación sencilla, el grafo puede incluir nodos como:
- Article: representa un artículo publicado o en borrador;
- Tag: representa una etiqueta temática;
- ExternalResource: representa una URL externa enlazada desde un artículo;
- Author: representa el autor o responsable del contenido;
- Product: representa un servicio, SDK, librería o plataforma mencionada.
Y relaciones como:
HAS_TAG: un artículo tiene una etiqueta;LINKS_TO: un artículo enlaza a un recurso externo;WRITTEN_BY: un artículo fue escrito por un autor;MENTIONS_PRODUCT: un artículo menciona un producto o servicio;RELATED_TO: dos artículos están relacionados por reglas editoriales o análisis del contenido.
La ventaja no está en sustituir el texto, sino en hacer explícitas conexiones que un índice vectorial no modela por sí solo.
Apache AGE sobre PostgreSQL
Una forma de implementar esta capa de grafo es usar Apache AGE, una extensión de PostgreSQL que añade capacidades de grafo y permite consultar con Cypher sobre datos almacenados en PostgreSQL.
En entornos Azure, esto puede ser interesante cuando ya existe una arquitectura basada en PostgreSQL y se quiere evitar desplegar una base de datos de grafos independiente. Aun así, conviene verificar siempre que la extensión está disponible y permitida en la versión concreta de Azure Database for PostgreSQL Flexible Server que se vaya a usar. No todas las extensiones están necesariamente habilitadas en todos los entornos, versiones o configuraciones.
Una inicialización básica con Apache AGE suele tener esta forma:
CREATE EXTENSION IF NOT EXISTS age;
LOAD 'age';
SET search_path = ag_catalog, "$user", public;
Después se crea el grafo lógico:
SELECT create_graph('azurebrains_blog');
A partir de ahí, se pueden crear nodos y relaciones mediante consultas Cypher ejecutadas desde PostgreSQL.
Ejemplo de creación de un artículo:
SELECT *
FROM cypher('azurebrains_blog', $$
CREATE (a:Article {
slug: 'rag-fundamentos-recuperacion-aumentada',
title: 'RAG: Retrieval Augmented Generation y por qué sigue siendo fundamental',
date: '2025-11-10',
word_count: 1800,
status: 'published'
})
RETURN a
$$) AS (a agtype);
Ejemplo de creación de una etiqueta:
SELECT *
FROM cypher('azurebrains_blog', $$
CREATE (t:Tag {
name: 'RAG',
category: 'AI'
})
RETURN t
$$) AS (t agtype);
Y ejemplo de relación entre artículo y etiqueta:
SELECT *
FROM cypher('azurebrains_blog', $$
MATCH (a:Article {slug: 'rag-fundamentos-recuperacion-aumentada'})
MATCH (t:Tag {name: 'RAG'})
CREATE (a)-[r:HAS_TAG]->(t)
RETURN r
$$) AS (r agtype);
Estos ejemplos son deliberadamente simples. En producción habría que añadir control de duplicados, estrategia de actualización, validación de metadatos y mecanismos de borrado o reconciliación cuando cambie el contenido original.
Consultas de grafo para reutilización editorial
Un caso útil para GraphRAG en un sistema editorial es ayudar a reutilizar conocimiento existente antes de generar o revisar un nuevo artículo.
Supongamos un agente encargado de detectar artículos relacionados, evitar redundancias y sugerir enlaces internos. Con un grafo puede resolver consultas que serían incómodas o poco fiables con búsqueda vectorial pura.
Artículos relacionados por solapamiento de etiquetas
Antes de redactar un nuevo contenido sobre RAG, el sistema puede buscar artículos publicados que compartan varias etiquetas con el borrador:
SELECT *
FROM cypher('azurebrains_blog', $$
MATCH (candidate:Article {slug: 'nuevo-articulo-rag'})-[:HAS_TAG]->(t:Tag)<-[:HAS_TAG]-(existing:Article)
WHERE existing.status = 'published'
WITH existing, count(t) AS shared_tags
WHERE shared_tags >= 2
RETURN existing.slug, existing.title, existing.date, shared_tags
ORDER BY shared_tags DESC, existing.date DESC
LIMIT 10
$$) AS (
slug agtype,
title agtype,
date agtype,
shared_tags agtype
);
Esto no responde a “qué texto se parece más”, sino a “qué artículos están conectados estructuralmente con este borrador”.
Artículos que enlazan recursos del mismo dominio
También se puede localizar qué artículos enlazan documentación o recursos externos de determinados dominios:
SELECT *
FROM cypher('azurebrains_blog', $$
MATCH (a:Article)-[:LINKS_TO]->(r:ExternalResource)
WHERE a.status = 'published'
AND (r.domain = 'learn.microsoft.com'
OR r.domain = 'techcommunity.microsoft.com')
WITH a, collect(r.url) AS external_links
RETURN a.slug, a.title, external_links
ORDER BY a.date DESC
LIMIT 5
$$) AS (
slug agtype,
title agtype,
external_links agtype
);
Esta consulta es útil para revisar coherencia editorial: si varios artículos enlazan al mismo conjunto de documentación, quizá convenga unificar criterios, actualizar enlaces o detectar contenidos duplicados.
Detección de contenidos potencialmente obsoletos
Otro caso práctico es localizar artículos que dependen de una ruta, producto o documentación concreta.
Por ejemplo, si cambia la nomenclatura o estructura de documentación de un servicio, se pueden buscar artículos que enlazan URLs afectadas:
SELECT *
FROM cypher('azurebrains_blog', $$
MATCH (a:Article)-[:LINKS_TO]->(r:ExternalResource)
WHERE a.status = 'published'
AND r.domain = 'learn.microsoft.com'
AND r.url CONTAINS '/azure-cognitive-services/'
RETURN a.slug, a.title, a.date, r.url
ORDER BY a.date DESC
$$) AS (
slug agtype,
title agtype,
date agtype,
url agtype
);
La búsqueda vectorial podría recuperar artículos que mencionan conceptos relacionados, pero no garantiza encontrar todos los documentos que enlazan una ruta concreta. El grafo, en cambio, permite recorrer relaciones explícitas y auditar dependencias.
Integración con recuperación semántica
GraphRAG no reemplaza necesariamente a la búsqueda vectorial. En muchos diseños, la complementa.
Un flujo razonable puede ser:
- usar el grafo para aplicar filtros estructurales;
- obtener una lista de artículos, entidades o comunidades relevantes;
- limitar la búsqueda semántica a ese subconjunto;
- recuperar los fragmentos textuales más útiles;
- entregar al modelo tanto el texto como el contexto relacional.
Por ejemplo:
“Encuentra fragmentos sobre configuración de HNSW en artículos relacionados con Azure AI Search publicados en los últimos seis meses”.
Una estrategia híbrida podría resolverlo así:
- el grafo filtra artículos por etiqueta, producto y fecha;
- la búsqueda semántica encuentra los fragmentos concretos que hablan de HNSW;
- el modelo recibe tanto los fragmentos como los metadatos de relación.
La parte vectorial sigue siendo importante, porque es la que localiza pasajes relevantes dentro del texto. La parte de grafo aporta control estructural, trazabilidad y capacidad de navegación entre entidades.
Diferencia entre grafo editorial y GraphRAG de investigación
Conviene distinguir dos niveles.
El primero es un grafo editorial o documental, construido a partir de metadatos explícitos: títulos, etiquetas, autores, enlaces, fechas y productos mencionados. Es relativamente fácil de auditar y mantener.
El segundo es un GraphRAG derivado con ayuda de LLMs, como el enfoque investigado por Microsoft Research, donde el sistema extrae entidades y relaciones desde texto narrativo, agrupa información y genera resúmenes de comunidades. Este enfoque puede capturar relaciones que no estaban modeladas manualmente, pero también exige más controles de calidad.
En sistemas reales, ambos niveles pueden convivir:
- metadatos explícitos para relaciones verificables;
- extracción con LLM para descubrir entidades o relaciones no anotadas;
- revisión humana o reglas automáticas para validar lo que entra en el grafo;
- recuperación semántica para trabajar con fragmentos textuales.
La clave es no tratar el grafo generado por un modelo como verdad absoluta. Si una relación se va a usar para decisiones editoriales, cumplimiento, auditoría o recomendaciones críticas, debe ser trazable y revisable.
Límites y riesgos de GraphRAG
GraphRAG aporta mucho valor cuando las relaciones importan, pero no es una solución mágica.
Algunos riesgos habituales:
- calidad del grafo: relaciones incompletas o incorrectas degradan las respuestas;
- coste de indexación: extraer entidades, relaciones y resúmenes puede ser más caro que crear embeddings;
- actualización incremental: hay que decidir qué ocurre cuando cambia un artículo, una URL o una etiqueta;
- duplicados: una misma entidad puede aparecer con nombres distintos;
- permisos: si hay contenido con restricciones de acceso, el grafo también debe respetarlas;
- explicabilidad: el sistema debe poder justificar qué relaciones usó para recuperar información;
- sobreingeniería: para preguntas simples, un RAG vectorial clásico puede ser suficiente.
La recomendación práctica es empezar con relaciones explícitas y de alto valor: etiquetas, enlaces externos, productos, autores y fechas. Después, si el caso lo justifica, añadir extracción automática de entidades y relaciones.
Cuándo merece la pena usar GraphRAG
GraphRAG tiene sentido cuando las preguntas dependen de conexiones entre elementos del corpus, no solo de similitud textual.
Es especialmente útil en escenarios como:
- bases documentales con muchos enlaces cruzados;
- investigación sobre corpus narrativos extensos;
- análisis de dependencias entre documentos;
- soporte técnico con productos, versiones y componentes relacionados;
- revisión editorial de contenidos obsoletos;
- sistemas de agentes que necesitan memoria estructurada;
- análisis de conocimiento organizativo no modelado en una base de datos tradicional.
En cambio, si el caso principal es responder preguntas localizadas sobre fragmentos independientes, un pipeline RAG clásico con buenos embeddings, chunking adecuado y filtros de metadatos puede ser suficiente.
Conclusión
La búsqueda vectorial responde bien a “qué fragmentos se parecen a esta pregunta”. GraphRAG ayuda con una pregunta distinta: “qué entidades, documentos y conceptos están conectados de forma relevante”.
Esa diferencia es importante. Muchos problemas de recuperación en organizaciones no fallan porque falte similitud semántica, sino porque las relaciones están implícitas, dispersas o no son consultables.
Representar esas relaciones en un grafo permite auditar dependencias, descubrir conexiones, filtrar mejor el contexto y combinar recuperación estructural con recuperación semántica. En un sistema RAG maduro, ambas piezas no compiten: se complementan.
RAG 2.0 y Foundry IQ: la capa de conocimiento centralizada para sistemas multi-agente
El problema que intenta resolver RAG 2.0
Cuando un sistema de IA generativa pasa de un único asistente a una arquitectura con varios agentes, el patrón RAG tradicional suele empezar a duplicarse.
Un agente tiene su propio índice. Otro agente mantiene una variante del mismo corpus. Un tercer componente usa una pipeline de indexación diferente. Cada uno aplica sus propios filtros, sus propios prompts, su propia lógica de recuperación y sus propias decisiones sobre qué documentos son relevantes.
Al principio parece manejable. En producción, aparecen los problemas:
- varias versiones de la verdad sobre el mismo contenido;
- pipelines de ingesta duplicadas;
- políticas de acceso difíciles de auditar;
- cambios de esquema que deben replicarse en varios sitios;
- resultados inconsistentes entre agentes;
- mayor coste operativo cada vez que se añade un nuevo caso de uso.
En este artículo uso RAG 2.0 como una forma práctica de describir la evolución desde un RAG aislado por aplicación hacia una capa de conocimiento compartida, gobernada y reutilizable por múltiples agentes. No es un SKU ni un nombre formal de producto de Microsoft; es un patrón de arquitectura.
La idea central es sencilla: en lugar de que cada agente construya su propio sistema de recuperación, los agentes consumen una capa común de conocimiento. Esa capa se encarga de conectar fuentes, aplicar criterios de recuperación, devolver fragmentos citables y facilitar la observabilidad.
En el ecosistema de Microsoft, Foundry IQ apunta precisamente a ese papel: proporcionar una capa de conocimiento para agentes dentro de Microsoft Foundry, apoyándose en capacidades de búsqueda, recuperación y conexión con datos empresariales.
Qué es Foundry IQ en este contexto
Foundry IQ puede entenderse como una plataforma para conectar agentes con conocimiento empresarial mediante bases de conocimiento reutilizables. Su objetivo no es reemplazar todo el diseño de RAG, sino abstraer parte de la complejidad que normalmente se repite en cada agente.
En una arquitectura multi-agente, esto permite separar responsabilidades:
- los agentes mantienen la lógica de tarea, conversación, herramientas e instrucciones;
- la capa de conocimiento concentra las fuentes, la recuperación, las citas y parte de la gobernanza;
- los sistemas de datos siguen siendo la fuente de la verdad: índices de Azure AI Search, almacenamiento documental, SharePoint, OneLake u otras fuentes soportadas según la configuración disponible.
Esta separación es importante. Foundry IQ no convierte automáticamente cualquier repositorio documental en una experiencia RAG perfecta. Sigue siendo necesario diseñar bien los datos, controlar permisos, validar la calidad de los fragmentos y evaluar las respuestas. Lo que cambia es que esas decisiones pueden centralizarse más, en lugar de repetirse agente por agente.
Arquitectura conceptual de una capa de conocimiento compartida
Una arquitectura basada en Foundry IQ suele tener cuatro bloques principales.
1. Fuentes de conocimiento
El primer bloque son las fuentes. Según la documentación y materiales de Microsoft sobre Foundry IQ, el patrón contempla la conexión con fuentes como:
- Azure AI Search;
- Blob Storage;
- SharePoint;
- OneLake.
La disponibilidad concreta de conectores y opciones puede depender de la región, del tipo de proyecto en Foundry, de la versión de la experiencia y del estado de preview de cada capacidad.
En la práctica, Azure AI Search sigue siendo una pieza especialmente relevante cuando necesitas control fino sobre esquemas, campos buscables, filtros, ranking, búsqueda híbrida o preparación avanzada del índice.
2. Knowledge base
La knowledge base actúa como unidad lógica de conocimiento. No debería verse solo como “un índice vectorial más”, sino como una definición reutilizable que agrupa fuentes, configuración de recuperación e instrucciones para que los agentes consulten conocimiento de forma coherente.
Una misma organización puede tener varias knowledge bases. De hecho, suele ser recomendable separarlas por:
- dominio funcional;
- nivel de confidencialidad;
- audiencia;
- requisitos regulatorios;
- ciclo de vida del contenido;
- patrón de uso.
Un error frecuente en arquitecturas RAG es intentar crear una única base global para todo. En entornos empresariales, normalmente es más seguro y mantenible diseñar knowledge bases alineadas con límites reales de seguridad y responsabilidad.
3. Agentes consumidores
Los agentes no deberían conocer todos los detalles internos de cada fuente. Su responsabilidad es expresar una necesidad de información y utilizar el resultado de forma controlada.
Por ejemplo:
- un agente de soporte puede recuperar procedimientos y documentación operativa;
- un agente comercial puede consultar fichas de producto aprobadas;
- un agente de análisis puede comparar políticas o informes;
- un agente de gobierno puede verificar si una respuesta cita fuentes aceptadas.
El valor aparece cuando varios agentes pueden usar la misma capa de conocimiento sin duplicar ingestión, embeddings, conectores o lógica de recuperación.
4. Evaluación y observabilidad
La recuperación es una parte crítica del sistema, no una caja negra que se configura una vez y se olvida.
Para operar una solución de este tipo conviene monitorizar:
- consultas que no encuentran resultados útiles;
- documentos recuperados con frecuencia;
- fragmentos recuperados pero no utilizados;
- respuestas sin citas o con citas débiles;
- latencia por tipo de consulta;
- diferencias entre agentes que consultan la misma knowledge base;
- regresiones tras cambios en documentos, chunking o configuración.
Foundry IQ y Microsoft Foundry se orientan a facilitar el desarrollo y evaluación de agentes con conocimiento, pero la responsabilidad de definir métricas de calidad sigue siendo del equipo que construye la solución.
Recuperación agéntica: qué conviene afirmar y qué no
En muchos debates recientes se habla de agentic retrieval o recuperación agéntica. La idea general es que el sistema de recuperación no se limite a ejecutar una búsqueda literal, sino que pueda interpretar mejor la intención, transformar la consulta, consultar varias fuentes o estructurar mejor los resultados para un agente.
Ese patrón es muy útil, pero conviene evitar afirmaciones demasiado específicas si no están confirmadas para la versión exacta que estás usando.
Por ejemplo, es razonable decir que una capa moderna de recuperación puede ayudar con:
- comprensión de intención;
- reformulación de consultas;
- acceso a varias fuentes;
- generación de respuestas con citas;
- integración con agentes;
- evaluación y monitorización de la calidad de recuperación.
En cambio, no conviene asumir sin validación que una implementación concreta ofrece siempre:
- un número determinado de iteraciones;
- un modelo específico para planificación;
- selección automática de fuentes en todos los escenarios;
- latencias garantizadas;
- una API estable;
- compatibilidad idéntica entre portal, SDK y REST API;
- comportamiento apto para producción si la capacidad está en preview.
La arquitectura debe diseñarse teniendo en cuenta que muchas capacidades avanzadas de recuperación evolucionan rápidamente y pueden tener diferencias entre experiencias de portal, API y SDK.
Perfiles de recuperación: rápido, equilibrado y exhaustivo
Aunque no conviene inventar nombres de parámetros ni valores de API, sí es útil pensar en perfiles de recuperación desde el diseño de la aplicación.
En un sistema multi-agente no todas las consultas merecen el mismo coste.
Perfil rápido
Adecuado para consultas sencillas o interacciones donde la latencia es crítica.
Ejemplos:
- recuperar una definición breve;
- buscar un documento conocido;
- completar un dato operativo;
- responder a una tool call que forma parte de un flujo mayor.
Aquí interesa limitar el trabajo de recuperación y devolver pocos resultados muy relevantes.
Perfil equilibrado
Adecuado para la mayoría de las consultas de negocio.
Ejemplos:
- responder preguntas sobre documentación interna;
- resumir una política;
- comparar dos procedimientos;
- encontrar información relacionada en varias fuentes del mismo dominio.
Este perfil busca un equilibrio entre calidad, coste y latencia.
Perfil exhaustivo
Adecuado para análisis donde la cobertura es más importante que la velocidad.
Ejemplos:
- revisar impacto de cambios normativos;
- comparar documentación de varios equipos;
- preparar una respuesta que debe citar múltiples fuentes;
- analizar inconsistencias entre documentos.
Este perfil puede justificar más reformulación, más fuentes o más validación, siempre que el usuario entienda la latencia esperada.
La decisión importante no es si existe un parámetro llamado de una forma u otra, sino que la arquitectura distinga entre consultas baratas y consultas que merecen más esfuerzo de recuperación.
Fuentes corporativas y permisos
Uno de los puntos delicados de cualquier sistema RAG empresarial es la seguridad.
Conectar SharePoint, almacenamiento documental o data lake no significa que todo agente deba poder recuperar todo. La capa de conocimiento debe respetar los límites de acceso definidos por la organización.
Antes de llevar una solución a producción, conviene validar:
- cómo se autentica el agente o la aplicación;
- si se aplican permisos del usuario final, de la aplicación o de ambos;
- qué ocurre con documentos restringidos;
- cómo se filtran resultados por identidad, grupo o atributo;
- si las citas pueden revelar metadatos sensibles;
- dónde se procesan y almacenan los datos durante la recuperación;
- qué límites aplican si una capacidad está en preview.
La gobernanza no se consigue solo centralizando la búsqueda. Se consigue combinando diseño de conocimiento, control de identidad, auditoría, evaluación y límites explícitos por dominio.
Cómo diseñar una knowledge base para agentes
Un buen diseño de knowledge base empieza antes de conectar la primera fuente.
Estas son decisiones que conviene tomar de forma explícita.
Definir el dominio
Una knowledge base debe tener un propósito claro.
No es lo mismo una base para soporte técnico que una base para cumplimiento normativo. El tipo de documentos, el nivel de precisión requerido, la longitud de fragmentos y el tono de respuesta pueden ser muy distintos.
Preparar el contenido
RAG no compensa automáticamente contenido desordenado.
Antes de indexar o conectar fuentes, conviene revisar:
- duplicados;
- documentos obsoletos;
- versiones contradictorias;
- PDFs escaneados con OCR deficiente;
- tablas difíciles de interpretar;
- páginas sin título o sin metadatos;
- permisos heredados incorrectamente.
La calidad de la respuesta final depende en gran medida de la calidad del contenido recuperado.
Diseñar metadatos
Los metadatos son esenciales para filtrar y gobernar.
Algunos campos habituales:
- tipo de documento;
- propietario;
- fecha de vigencia;
- área funcional;
- nivel de confidencialidad;
- idioma;
- versión;
- estado de aprobación.
Sin metadatos, la recuperación suele depender demasiado del texto libre y es más difícil controlar qué documentos debe usar cada agente.
Exigir citas
Para agentes empresariales, las citas no son un adorno. Son una condición de confianza.
Las instrucciones del agente deberían dejar claro cuándo debe citar, cómo debe hacerlo y qué debe responder cuando no encuentra evidencia suficiente.
Una regla práctica: si la respuesta afecta a una decisión de negocio, debe poder rastrearse hasta una fuente verificable.
Evaluar con preguntas reales
No basta con probar tres preguntas en el playground.
Una evaluación mínima debería incluir:
- preguntas frecuentes;
- preguntas ambiguas;
- consultas con terminología distinta a la usada en los documentos;
- preguntas sin respuesta en el corpus;
- documentos con información parecida pero no idéntica;
- casos con permisos restringidos;
- consultas multi-idioma si aplican.
El objetivo no es demostrar que el sistema responde bien en demos, sino detectar dónde falla antes de exponerlo a usuarios reales.
Configuración práctica: una secuencia razonable
Sin depender de nombres concretos de menús o clases de SDK, una configuración típica seguiría esta secuencia:
- Crear o seleccionar el proyecto de agentes en Microsoft Foundry.
- Definir la knowledge base que utilizarán uno o varios agentes.
- Conectar las fuentes relevantes, por ejemplo un índice de Azure AI Search, documentos en almacenamiento o repositorios corporativos soportados.
- Configurar instrucciones de recuperación y respuesta, incluyendo cuándo citar y cómo comportarse si no hay evidencia suficiente.
- Probar con consultas representativas, no solo con ejemplos simples.
- Revisar resultados, citas y trazas disponibles para entender qué documentos se están usando.
- Ajustar contenido, metadatos, filtros e instrucciones.
- Publicar gradualmente, empezando por usuarios o agentes con alcance controlado.
- Monitorizar calidad y seguridad de forma continua.
La parte importante es no tratar la knowledge base como un componente estático. En producción, la base de conocimiento evoluciona igual que evoluciona el contenido de la organización.
Patrón multi-agente para Azurebrains
En una arquitectura como Azurebrains, donde pueden existir varios agentes especializados, Foundry IQ encaja como capa común de conocimiento.
Un diseño posible sería:
- un agente Discoverer consulta la knowledge base para detectar si un tema ya está cubierto;
- un agente Analyzer recupera fuentes y documentos relacionados para evaluar profundidad o novedad;
- un agente Writer usa fragmentos citables para redactar contenido;
- un agente Reviewer comprueba afirmaciones contra fuentes aprobadas;
- un agente Improver identifica contenido obsoleto o incompleto.
La ventaja no es solo técnica. También es operativa: al añadir un nuevo agente, no hace falta crear otra pipeline de conocimiento desde cero. El nuevo agente puede reutilizar las mismas fuentes, políticas y criterios de recuperación, siempre que tenga permisos y propósito adecuados.
Esto reduce duplicidad y mejora la consistencia. Pero no elimina la necesidad de evaluar cada agente por separado, porque dos agentes pueden usar la misma knowledge base y aun así producir resultados de distinta calidad por sus instrucciones, herramientas o flujo de razonamiento.
Riesgos y límites a tener en cuenta
Foundry IQ es prometedor para arquitecturas multi-agente, pero conviene diseñar con cautela.
Principales riesgos:
- Dependencia de capacidades en preview: las APIs, experiencias de portal o límites pueden cambiar.
- Exceso de centralización: una única knowledge base global puede convertirse en un cuello de botella de seguridad y calidad.
- Confianza excesiva en la recuperación automática: la capa de conocimiento no corrige documentos obsoletos o contradictorios.
- Falta de evaluación: sin datasets de prueba, no sabrás si una mejora aparente empeora casos importantes.
- Permisos mal modelados: el RAG empresarial debe respetar límites de acceso igual que cualquier otra aplicación corporativa.
- Citas débiles: citar un documento no garantiza que la respuesta esté correctamente fundamentada en él.
La recomendación práctica es empezar con un dominio acotado, medir calidad y ampliar después.
Conclusión
RAG 2.0 no debería entenderse como “usar vectores con un nombre nuevo”. El cambio relevante es arquitectónico: pasar de sistemas RAG aislados por agente a una capa de conocimiento compartida, gobernada y reutilizable.
Foundry IQ apunta a resolver precisamente ese problema dentro del ecosistema Microsoft Foundry: conectar agentes con conocimiento empresarial, permitir que varias experiencias reutilicen una misma base y mejorar la consistencia de las respuestas con fuentes y citas.
Para arquitectos y equipos técnicos, la pregunta clave no es solo “¿qué conector soporta?”, sino:
- qué dominios de conocimiento deben separarse;
- qué agentes pueden consultar cada base;
- qué permisos se aplican;
- cómo se evalúa la calidad;
- cómo se observan fallos de recuperación;
- cómo se evita que contenido obsoleto llegue a respuestas finales.
Si esas decisiones están bien diseñadas, Foundry IQ puede convertirse en una pieza central para sistemas multi-agente sobre Azure y Microsoft Foundry.
RAG: Retrieval Augmented Generation y por qué sigue siendo fundamental
Qué es RAG y por qué importa
Retrieval Augmented Generation, normalmente abreviado como RAG, es el patrón que permite que una aplicación basada en modelos de lenguaje responda usando información externa al propio modelo. La idea es sencilla: antes de pedirle al LLM que genere una respuesta, la aplicación recupera contenido relevante de una base de conocimiento, lo añade al prompt como contexto y pide una respuesta fundamentada en ese material.
El valor de RAG aparece en cualquier escenario donde el modelo por sí solo no basta. Un LLM no conoce automáticamente la documentación interna de una empresa, los tickets de soporte, los contratos, los manuales operativos ni las últimas versiones de un repositorio privado. RAG conecta la capacidad generativa del modelo con conocimiento específico, actualizado y gobernado por la organización.
También aporta trazabilidad. En vez de confiar únicamente en la memoria estadística del modelo, la aplicación puede conservar qué fragmentos se recuperaron, qué documentos se usaron y qué fuentes justifican una respuesta. Esa trazabilidad es esencial cuando el asistente se usa para soporte técnico, búsqueda documental, operaciones internas o toma de decisiones.
El flujo mínimo tiene tres pasos:
- Retrieve: buscar documentos, fragmentos o registros relevantes en un índice o repositorio.
- Augment: combinar la pregunta del usuario, las instrucciones del sistema y los fragmentos recuperados.
- Generate: pedir al modelo que genere una respuesta apoyada en ese contexto.
La parte difícil no es describir el patrón, sino hacerlo fiable: preparar bien el contenido, recuperar los fragmentos correctos, filtrar por permisos, evitar contexto irrelevante y medir si la respuesta está realmente fundamentada.
La arquitectura básica de un sistema RAG
Un sistema RAG productivo empieza antes del prompt. Primero hay que preparar el conocimiento que se va a recuperar. Eso suele implicar limpiar documentos, dividirlos en fragmentos, enriquecerlos con metadatos y almacenarlos en una estructura optimizada para búsqueda.
Una arquitectura típica incluye:
- Ingesta desde documentos, blobs, wikis, bases de datos, APIs o repositorios internos.
- Chunking, para dividir el contenido en unidades que puedan recuperarse con precisión sin perder demasiado contexto.
- Embeddings, que convierten texto en vectores numéricos para búsqueda por similitud semántica.
- Campos textuales, necesarios para búsqueda por palabras clave, filtros, facetas y ordenación.
- Metadatos, como título, URL, fecha, versión, idioma, categoría, propietario o permisos.
- Orquestación, que decide cómo buscar, cuántos resultados traer y cómo construir el prompt final.
Cuando llega una pregunta, la aplicación consulta el índice, recupera candidatos, descarta lo que no corresponde al usuario o al caso de uso y entrega al modelo un contexto limitado por el presupuesto de tokens. Si el retrieval falla, el modelo tendrá poco margen para corregir el problema: responderá con información incompleta, genérica o directamente equivocada.
Búsqueda vectorial: útil, pero no suficiente
La búsqueda vectorial es una pieza importante porque permite encontrar fragmentos conceptualmente similares aunque no compartan exactamente las mismas palabras. Durante la indexación, cada chunk se transforma en un vector mediante un modelo de embeddings. Durante la consulta, la pregunta se transforma con el mismo tipo de modelo y se buscan los vectores más cercanos.
Esto funciona bien para preguntas formuladas en lenguaje natural. Por ejemplo, una consulta como “cómo reduzco respuestas inventadas en mi asistente interno” puede recuperar documentación sobre grounding, citas, evaluación de respuestas o diseño de prompts aunque no use exactamente esos términos.
Pero la búsqueda vectorial no resuelve todos los casos. Códigos de error, nombres de producto, identificadores, comandos, versiones, URLs o siglas internas suelen necesitar coincidencia literal. Si el usuario busca un código concreto, una política interna o el nombre exacto de una API, una estrategia puramente semántica puede devolver resultados plausibles pero incorrectos.
Por eso, en producción, la pregunta no debería ser “vector search o keyword search”, sino cómo combinar ambas de forma controlada.
Búsqueda híbrida como punto de partida práctico
La búsqueda híbrida combina búsqueda textual y búsqueda vectorial. La parte textual aporta precisión en términos exactos; la parte vectorial aporta recuperación conceptual. Después, el sistema fusiona ambos rankings para producir una única lista de resultados.
Este enfoque es especialmente útil en dominios técnicos porque cubre dos tipos de intención:
- Intención conceptual, cuando el usuario describe un problema con lenguaje natural.
- Intención exacta, cuando el usuario busca un identificador, una función, una versión o un término técnico específico.
En un sistema RAG empresarial, la búsqueda híbrida suele ser un baseline más robusto que la búsqueda vectorial aislada. Reduce el riesgo de perder resultados importantes por diferencia de vocabulario y, al mismo tiempo, evita depender únicamente de coincidencias exactas.
El siguiente paso suele ser añadir una capa de reranking para reordenar los candidatos iniciales según su relevancia real para la pregunta.
Reranking: reducir ruido antes de generar
Recuperar candidatos no equivale a recuperar buenos candidatos. Un fragmento puede compartir palabras con la pregunta o estar cerca en el espacio vectorial y, aun así, no responder realmente a lo que el usuario necesita.
El reranking introduce una segunda fase de calidad. En vez de aceptar directamente el orden inicial, el sistema vuelve a evaluar los mejores candidatos y prioriza los que tienen más relación con la pregunta. Esta fase es más costosa que la recuperación inicial, pero puede mejorar mucho la calidad del contexto que llega al modelo.
Hay dos principios importantes:
- El reranker no arregla un retrieval que nunca encontró el documento correcto.
- El reranker funciona mejor cuando los campos del índice están bien estructurados y el chunking conserva suficiente contexto.
Por eso conviene medir el pipeline por capas: primero comprobar si el documento correcto aparece entre los candidatos, después si aparece suficientemente arriba, y finalmente si el modelo usa bien ese contexto.
Límites reales del RAG clásico
RAG clásico funciona bien cuando la pregunta puede resolverse con una búsqueda relativamente directa sobre un corpus preparado. Pero aparecen límites cuando el sistema crece.
El primer límite es la fragmentación del conocimiento. Si cada aplicación o agente mantiene su propio índice, aparecen versiones distintas de la verdad. Un asistente puede recuperar información actualizada mientras otro responde con documentación antigua.
El segundo límite son las preguntas multi-aspecto. Una consulta puede requerir combinar texto, fechas, permisos, relaciones entre documentos, filtros por producto y contexto conversacional. Resolver eso con una única búsqueda simple suele ser insuficiente.
El tercer límite es la frescura del contenido. Un índice que se actualiza poco puede funcionar para documentación estable, pero no para incidencias, cambios de configuración, estado de servicios o información operativa que cambia con frecuencia.
El cuarto límite es la seguridad. RAG no puede tratar todos los documentos como contexto genérico. Debe aplicar permisos antes de generar, evitar que contenido recuperado manipule el prompt y registrar qué fuentes se usaron para cada respuesta.
Estos límites no invalidan RAG; simplemente obligan a diseñarlo como una arquitectura de búsqueda, gobierno y generación, no como un truco de prompt engineering.
Buenas prácticas para llevar RAG a producción
Un prototipo puede funcionar con unos cuantos PDFs y un prompt largo. Un sistema de producción necesita controles más estrictos:
- Evaluar retrieval por separado del modelo: medir si los fragmentos correctos aparecen entre los primeros resultados antes de evaluar la respuesta generada.
- Usar búsqueda híbrida como baseline: combinar texto y vectores cuando el dominio tenga acrónimos, identificadores o jerga técnica.
- Diseñar chunks con intención: respetar títulos, secciones, tablas, listas y dependencias de contexto.
- Conservar metadatos de fuente: título, URL, fecha, versión y permisos son tan importantes como el texto.
- Aplicar seguridad antes de generar: el modelo solo debe recibir contenido que el usuario pueda consultar.
- Pedir respuestas fundamentadas: el prompt debe indicar qué hacer cuando el contexto no contiene la respuesta.
- Monitorizar frescura: un índice correcto hoy puede quedar obsoleto si no existe una estrategia de actualización.
- Registrar trazabilidad: guardar consulta, documentos recuperados, puntuaciones, respuesta y feedback permite depurar errores.
Muchos fallos atribuidos al LLM son, en realidad, fallos de retrieval, chunking, metadatos, permisos o evaluación.
Conclusión
RAG sigue siendo fundamental porque conecta modelos de lenguaje con conocimiento específico, actualizado y gobernado. Pero una implementación madura no consiste solo en vectorizar documentos y pegarlos al prompt. Requiere búsqueda híbrida, ranking de calidad, control de acceso, trazabilidad y evaluación continua.
La tesis es simple: un modelo solo puede responder bien si recibe el contexto correcto. La ingeniería de RAG consiste en encontrar ese contexto, demostrar de dónde viene y entregarlo al modelo sin romper seguridad, precisión ni consistencia editorial.