Agentes Autónomos: Guía Completa y Detallada

📚 Tabla de Contenidos

1

  1. Introducción
  2. Conceptos Fundamentales
  3. Agentes vs Asistentes
  4. Arquitectura de Agentes
  5. Características Clave
  6. Aplicaciones Prácticas
  7. CrewAI: Implementación de Agentes
  8. Análisis de Conocimiento con Agentes
  9. DataX: Solución Agentic para Procesamiento de Datos
  10. Verificabilidad y Evaluación

Introducción

Los Agentes Autónomos representan una evolución significativa en la inteligencia artificial y la automatización. A diferencia de los sistemas reactivos tradicionales, los agentes modernos poseen la capacidad de comprender su entorno, tomar decisiones informadas y ejecutar acciones de manera independiente para alcanzar objetivos específicos.

Definición Central: Los agentes son programas autónomos que sienten el entorno, entienden intencionalmente y toman acciones para completar sus objetivos de manera proactiva.


Conceptos Fundamentales

¿Qué es un Agente?

Un agente es una entidad de software que:

  • Percibe su entorno mediante sensores o interfaces de entrada
  • Procesa información de manera inteligente y contextual
  • Toma decisiones basadas en objetivos y conocimiento previo
  • Ejecuta acciones de manera autónoma en el mundo

Características Esenciales

Un agente genuino debe demostrar:

  1. Autonomía: Capacidad de actuar sin intervención externa constante
  2. Proactividad: Iniciativa para completar tareas sin esperar instrucciones explícitas
  3. Reactividad: Adaptación rápida a cambios en el entorno
  4. Sociabilidad: Capacidad de interactuar con otros agentes o sistemas

Componentes Internos

┌─────────────────────────────────────────┐
│            AGENTE AUTÓNOMO              │
├─────────────────────────────────────────┤
│                                         │
│  ┌──────────────────────────────────┐  │
│  │  Percepción del Entorno          │  │
│  │  (Sensores/APIs/Inputs)          │  │
│  └────────────────────┬─────────────┘  │
│                       │                 │
│  ┌────────────────────▼─────────────┐  │
│  │  Procesamiento Inteligente       │  │
│  │  (Razonamiento, Memoria, LLM)    │  │
│  └────────────────────┬─────────────┘  │
│                       │                 │
│  ┌────────────────────▼─────────────┐  │
│  │  Toma de Decisiones              │  │
│  │  (Planificación, Evaluación)     │  │
│  └────────────────────┬─────────────┘  │
│                       │                 │
│  ┌────────────────────▼─────────────┐  │
│  │  Ejecución de Acciones           │  │
│  │  (Actuadores/APIs/Sistema)       │  │
│  └──────────────────────────────────┘  │
│                                         │
└─────────────────────────────────────────┘

Agentes vs Asistentes

Aunque a menudo se confunden, existen diferencias fundamentales entre agentes y asistentes:

Tabla Comparativa

AspectoAgentesAsistentes
AutonomíaAlta autonomíaAutonomía limitada
InteracciónInteracción en segundo planoInteracción linear/reactiva
IniciativaProactivos - inician accionesReactivos - responden a solicitudes
Complejidad de TareasTareas complejas y multietapaComplejidad simple
MemoriaAlta capacidad de memoria persistenteMemoria general limitada
Modelo OperacionalAutónomo y persistenteSolicitud-respuesta

Ejemplo Práctico

Asistente (Reactivo):

Usuario: "¿Cuál es el clima hoy?"
Asistente: "Responde la pregunta" (fin)

Agente (Proactivo):

Agente sensa: Temperatura baja detectada
Agente decide: "Enviar notificación de alerta"
Agente actúa: Envía notificación, actualiza reportes, ajusta sistemas
Agente continúa: Monitorea condiciones para futuras acciones

Arquitectura de Agentes

La arquitectura de agentes puede clasificarse en diferentes modelos según su estructura y complejidad:

1. Agentes Simples (Reactivos)

Características:

  • Responden directamente a estímulos del entorno
  • Sin memoria histórica significativa
  • Reglas fijas de comportamiento
  • Bajo costo computacional

Estructura:

Entrada → Reglas → Acción

Casos de Uso: Validadores automáticos, alertas simples, filtros


2. Agentes Secuenciales

Características:

  • Ejecutan tareas en orden específico
  • Mantienen estado entre pasos
  • Pueden cancelar o repetir pasos
  • Memoria de contexto limitada a la secuencia actual

Estructura:

Tarea 1 → Tarea 2 → Tarea 3 → Resultado
    ↑                                      ↓
    └──── Retroalimentación ──────────────┘

Casos de Uso: Pipelines de procesamiento, flujos de trabajo lineales, análisis sistemático


3. Agentes Jerárquicos

Características:

  • Estructura en múltiples niveles
  • Agentes de orden superior supervisan a los de orden inferior
  • Delegación de tareas según competencia
  • Mejor escalabilidad

Estructura:

┌─────────────────────────────────┐
│   Agente Supervisor             │
│   (Coordinación Global)         │
├──────────┬──────────┬──────────┤
│  Agente  │  Agente  │  Agente  │
│    A     │    B     │    C     │
│ (Análisis)│(Ejecución)│(Verificación)
└──────────┴──────────┴──────────┘

Casos de Uso: Sistemas complejos, equipos de ia, orquestación de servicios


4. Agentes Colaborativos

Características:

  • Trabajan en conjunto hacia un objetivo común
  • Comunicación bidireccional
  • Compartición de conocimiento
  • Resolución colaborativa de problemas

Estructura:

    ┌─────────────┐
    │          │ │
    │ Agente A │ │
    │          │ │
    └────┬─────┘ │
         │       │
    ┌────▼─────┐ │
    │   SHARED │ │
    │ KNOWLEDGE│ │
    │   BASE   │ │
    └────┬─────┘ │
         │       │
    ┌────▼─────┐ │
    │ Agente B │ │
    │          │ │
    └──────────┘ │
         ↕ Comunicación
    ┌──────────┐
    │ Agente C │
    │          │
    └──────────┘

Casos de Uso: Análisis de datos multidimensional, investigación colaborativa, sistemas distribuidos


Características Clave

1. Autonomía Operativa

  • Decisión independiente: El agente toma decisiones basadas en objetivos
  • Gestión de recursos: Maneja su propia ejecución sin supervisión constante
  • Adaptación dinámica: Ajusta estrategias según resultados

2. Memoria Persistente

  • Contexto histórico: Recuerda decisiones y resultados anteriores
  • Aprendizaje: Mejora su desempeño con el tiempo
  • Base de conocimiento: Acceso a información estructurada para decisiones informadas

Nota: Los asistentes típicamente tienen memoria limitada a la conversación actual

3. Proactividad

  • Iniciativa de acción: Actúa sin esperar instrucciones explícitas
  • Anticipación: Predice necesidades futuras
  • Mejora continua: Busca oportunidades de optimización

4. Complejidad de Tareas

Los agentes pueden manejar:

  • Tareas multietapa complejas
  • Objetivos con múltiples dimensiones
  • Restricciones y dependencias entre subtareas
  • Resolución de conflictos entre objetivos

5. Interacción en Segundo Plano

  • Operan de manera independiente
  • No requieren interacción manual constante
  • Pueden ejecutarse de forma asíncrona
  • Reportan resultados cuando se completan

Aplicaciones Prácticas

1. Gestión del Conocimiento

Aplicación: Análisis y organización automática de información

  • Extrae conceptos clave automáticamente
  • Genera relaciones entre ideas
  • Organiza información por temas
  • Crea resúmenes explicativos

2. Procesamiento de Datos (DataX)

Aplicación: Procesamiento agentic de datos complejos

  • Capa semántica estructurada para IA
  • Grafos de conocimiento dinámicos
  • Reducción de alucinaciones mediante embeddings
  • Governanza de datos automática

3. Automatización Empresarial

Aplicación: Automatización de procesos complejos

  • RPA (Robotic Process Automation)
  • Gestión de flujos de trabajo
  • Análisis automático de documentos
  • Toma de decisiones ejecutivas

4. Análisis Inteligente

Aplicación: Análisis profundo sin intervención manual

  • Análisis de sentimientos a escala
  • Extracción de información estructurada
  • Validación y verificación automática
  • Reportes generados automáticamente

CrewAI: Implementación de Agentes

¿Qué es CrewAI?

CrewAI es un framework que permite crear, coordinar y ejecutar equipos de agentes autónomos trabajando juntos para completar tareas complejas.

Componentes Principales

from crewai import Agent, Crew, Task
from crewai.process import Process
 
# 1. Definir Agentes
agent_name = Agent(
    role="Rol del Agente",
    goal="Objetivo específico",
    backstory="Contexto y expertise"
)
 
# 2. Definir Tareas
task = Task(
    agent=agent_name,
    description="Qué debe hacer",
    expected_output="Qué esperar"
)
 
# 3. Crear Crew (Equipo)
crew = Crew(
    agents=[agent_name],
    tasks=[task],
    process=Process.sequential  # O Process.hierarchical
)
 
# 4. Ejecutar
result = crew.kickoff(inputs={...})

Procesos Soportados

  1. Sequential: Tareas se ejecutan una tras otra
    • Ideal para pipelines lineales
    • Cada resultado alimenta la siguiente tarea
  2. Hierarchical: Estructura de supervisión
    • Un agente supervisor coordina agentes especializados
    • Mejor para problemas complejos
    • Permite delegación inteligente

Flujo de Ejecución

┌─────────────────────────────────────────┐
│  INICIO: crew.kickoff(inputs)           │
└────────────┬────────────────────────────┘
             │
             ▼
┌─────────────────────────────────────────┐
│  Procesar entrada y contexto            │
└────────────┬────────────────────────────┘
             │
    ┌────────┴────────┐
    │                 │
    ▼                 ▼
┌─────────┐    ┌───────────┐
│ Task 1  │    │ Task 2    │
│ (Agente │    │ (Agente   │
│   A)    │    │    B)     │
└────┬────┘    └─────┬─────┘
     │              │
     └──────┬───────┘
            │
            ▼
   ┌─────────────────┐
   │   Task 3        │
   │ (Agente C)      │
   └────────┬────────┘
            │
            ▼
   ┌─────────────────┐
   │   OUTPUT JSON   │
   │   (resultado)   │
   └─────────────────┘

Ventajas de CrewAI

VentajaDescripción
CoordinaciónMúltiples agentes trabajan en armonía
Memoria compartidaLos agentes pueden acceder al contexto mutuo
EscalabilidadFácil agregar nuevos agentes o tareas
Documentación automáticaGenera outputs estructurados en JSON
DebuggingModo verbose para entender decisiones

Análisis de Conocimiento con Agentes

Caso de Estudio: Sistema de Análisis de Vault de Notas

Se implementó un sistema CrewAI con 3 agentes especializados para procesar un vault de notas:

Estructura del Equipo

1. Agente Analista

Rol: Analista de Conocimiento
Objetivo: Extraer conceptos clave y estructurar por áreas temáticas
Estrategia: 
  - Revisar todas las notas
  - Identificar conceptos fundamentales
  - Agrupar por temas relacionados
  - Generar resúmenes por concepto

Output:

{
  "Concepto Clave": {
    "notas": ["nota 1", "nota 2", ...],
    "resumen": "Descripción del concepto"
  }
}

2. Agente Creador de Etiquetas

Rol: Especialista en Taxonomía de Información
Objetivo: Generar etiquetas precisas basadas en conceptos
Estrategia:
  - Analizar conceptos extraídos
  - Crear etiquetas semánticas exactas
  - Justificar cada etiqueta
  - Validar consistencia

Output:

{
  "nota": "path/to/note.md",
  "etiquetas": ["etiqueta1", "etiqueta2"],
  "justificación": "Por qué estas etiquetas"
}

3. Agente Verificador de Notas

Rol: Auditor de Consistencia Semántica
Objetivo: Validar relaciones y crear mapa de conexiones
Estrategia:
  - Verificar relaciones lógicas entre etiquetas
  - Identificar conexiones significativas
  - Producir grafo de relaciones
  - Sugerir vínculos pendientes

Output:

{
  "grafo_relaciones": {
    "Concepto A": {
      "conecta_con": ["Concepto B", "Concepto C"],
      "justificación": "Razón de la conexión"
    }
  },
  "recomendaciones": ["sugerencia 1", "sugerencia 2"]
}

Conceptos Extraídos

El análisis identificó 6 conceptos clave fundamentales:

1. Análisis de Notas

  • Definición: Proceso sistemático de revisión y extracción de conceptos importantes
  • Importancia: Fundamental para la gestión del conocimiento
  • Conexiones: Análisis → Gestión del Conocimiento → Organización

2. Gestión del Conocimiento

  • Definición: Sistema estructurado para organizar y acceder al conocimiento
  • Componentes:
    • Análisis sistemático de notas
    • Etiquetas precisas
    • Resúmenes explicativos
  • Objetivo: Facilitar acceso y comprensión de la información

3. Organización de Información

  • Método: Etiquetas exactas + Resúmenes + Mapas de relaciones
  • Beneficio: Estructura accesible y comprensible
  • Alcance: Toda la base de conocimiento

4. Conceptos Clave

  • Naturaleza: Unidades fundamentales de conocimiento
  • Función: Estructurar y jerarquizar información
  • Diferenciación: Conceptos fundamentales vs conceptos de alto nivel

5. Agrupación Temática

  • Método: Clasificación en áreas temáticas
  • Beneficio: Mejora organización y navegación
  • Soporte: Respaldada por resúmenes explicativos

6. Resumen Explicativo

  • Tipo: Descripciones breves y claras
  • Función: Facilitar comprensión y conexión entre conceptos
  • Uso: Cierre del ciclo de gestión del conocimiento

Grafo de Relaciones Completo

                    ┌─────────────────────────┐
                    │  ANÁLISIS DE NOTAS      │
                    └──────────┬──────────────┘
                              │
                    ┌─────────▼──────────┐
                    │ GESTIÓN DEL        │
                    │ CONOCIMIENTO       │◄──┐
                    └──┬──────┬──────┬───┘   │
                       │      │      │       │
        ┌──────────────┘      │      └──────┐│
        │                     │             ││
        ▼                     ▼             ▼│
    ┌─────────────┐  ┌──────────────┐ ┌──────────┐
    │ORGANIZACIÓN │  │ AGRUPACIÓN   │ │CONCEPTOS │
    │     DE      │  │   TEMÁTICA   │ │  CLAVE   │
    │  INFORMACIÓN│  └──────┬───────┘ └────┬─────┘
    └──────┬──────┘         │              │
           │    ┌───────────▼──────────────┤
           │    │                          │
           ▼    ▼                          │
    ┌────────────────────┐                │
    │ RESUMEN EXPLICATIVO│◄───────────────┘
    └────────────────────┘

Recomendaciones del Sistema

El análisis sugirió mejoras:

  1. Integración de Jerarquías

    • Evaluar integración entre Conceptos Clave, Jerarquía Conceptual y Agrupación Temática
    • Evitar redundancias
    • Fortalecer jerarquías claras
  2. Conexión Explícita

    • Fortalecer conexión entre Agrupación Temática y Resumen Explicativo
    • Mejorar navegación basada en temas
    • Facilitar comprensión temática
  3. Clarificación Conceptual

    • Diferenciar conceptos de alto nivel vs conceptos fundamentales
    • Crear jerarquía clara
    • Evitar confusiones semánticas

DataX: Solución Agentic para Procesamiento de Datos

Visión General

DataX es una solución integral de procesamiento de datos impulsada por una arquitectura agentic. Combina inteligencia artificial moderna con gestión estructurada de datos.

Componentes Clave

1. Capa Semántica

┌─────────────────────────────────────────┐
│    CAPA SEMÁNTICA (Semantic Layer)      │
├─────────────────────────────────────────┤
│                                         │
│  Representación estructurada de datos   │
│  que habilita que agentes GenAI         │
│  comprendan, relacionen y utilicen      │
│  el conocimiento de la organización     │
│                                         │
└─────────────────────────────────────────┘

Características:

  • Base de datos híbrida (estructurada + no estructurada)
  • Accesible y comprensible para IA
  • Escalable dinámicamente
  • Gobernanza integrada

2. Grafo de Conocimiento

Transformación:

Datos Crudos
    │
    ▼
┌──────────────────┐
│ MODELADO GRAFO   │
│ DE CONOCIMIENTO  │
└────────┬─────────┘
         │
         ▼
┌──────────────────────────────────┐
│ Nodos = Conceptos/Entidades      │
│ Edges = Relaciones semánticas    │
│ Embeddings = Representación IA   │
└──────────────────────────────────┘

Ventajas:

  • Escalabilidad: Crece con datos sin perder performance
  • Reducción de alucinaciones: Datos estructurados vs generación libre
  • Gobernanza: Control semántico sobre relaciones

3. Embeddings e IA

Cada nodo en el grafo contiene:

  • Vector embedding: Representación en espacio latente
  • Metadata: Información descriptiva
  • Contexto: Relaciones con otros nodos
  • Provenance: Trazabilidad de origen

Flujo de Migración

┌─────────────────────────────────────────┐
│  SISTEMAS LEGACY / DATA LAKE            │
│  (Datos sin estructura clara)           │
└──────────────┬──────────────────────────┘
               │
               ▼
        ┌──────────────┐
        │ EXTRACCIÓN   │
        │ AUTOMÁTICA   │
        └───────┬──────┘
                │
                ▼
        ┌──────────────────────┐
        │ MODELADO DE GRAFO    │
        │ DE CONOCIMIENTO      │
        └───────┬──────────────┘
                │
                ▼
        ┌──────────────────────┐
        │ CAPA SEMÁNTICA DATAX │
        │ (Grafos + Embeddings)│
        └──────────────────────┘

Gobierno de Datos en DataX

La solución integra governanza automática:

  1. Validación de relaciones: Los agentes verifican consistencia
  2. Detección de anomalías: Identifica datos inconsistentes
  3. Trazabilidad: Registro completo de cambios
  4. Control de acceso: Basado en roles semánticos

Verificabilidad y Evaluación

Marco de Evaluación para Agentes

1. Correctitud de Salida

┌─────────────────────────────────────────┐
│  ¿Los resultados son correctos?         │
├─────────────────────────────────────────┤
│  • Precisión en conceptos extraídos     │
│  • Validez de relaciones identificadas  │
│  • Exactitud en categorizaciones        │
│  • Completitud (no faltan elementos)    │
└─────────────────────────────────────────┘

2. Verificabilidad de Razonamiento

┌─────────────────────────────────────────┐
│  ¿Podemos entender cómo llegó al result?│
├─────────────────────────────────────────┤
│  • Trazas de decisión (verbose logs)    │
│  • Justificaciones explícitas           │
│  • Cadena de razonamiento clara         │
│  • Reproducibilidad de resultados       │
└─────────────────────────────────────────┘

3. Consistencia y Coherencia

┌─────────────────────────────────────────┐
│  ¿Son los resultados consistentes?      │
├─────────────────────────────────────────┤
│  • Coherencia entre decisiones          │
│  • No contradicciones internas          │
│  • Estabilidad en múltiples ejecuciones │
│  • Validación cruzada                   │
└─────────────────────────────────────────┘

4. Eficiencia Operacional

┌─────────────────────────────────────────┐
│  ¿Qué tan eficiente es el agente?       │
├─────────────────────────────────────────┤
│  • Tiempo de ejecución                  │
│  • Uso de recursos (memoria, CPU)       │
│  • Llamadas a LLM (costo)               │
│  • Throughput (tareas/tiempo)           │
└─────────────────────────────────────────┘

Métricas de Éxito

MétricaDescripciónObjetivo
Precisión% de resultados correctos> 95%
Recall% de elementos capturados> 90%
F1-ScoreBalance precisión/recall> 0.92
LatenciaTiempo promedio de respuesta< 30s
Reproducibilidad% de ejecuciones idénticas100%

Técnicas de Validación

1. Verificación Manual

  • Revisión experta de muestras aleatorias
  • Auditoría de casos límite
  • Pruebas de estrés

2. Validación Automática

  • Tests unitarios de componentes
  • Validación de schemas JSON
  • Pruebas de consistencia lógica

3. Benchmarking

  • Comparación con línea base anterior
  • Pruebas A/B de estrategias
  • Análisis de tendencias temporal

Conclusiones y Mejores Prácticas

Principios Fundamentales para Agentes Exitosos

  1. Claridad de Objetivos: Define metas específicas y medibles
  2. Arquitectura Apropiada: Elige el tipo de agente según la complejidad
  3. Memoria Estructurada: Mantén contexto relevante accesible
  4. Validación Continua: Verifica salidas regularmente
  5. Documentación y Trazabilidad: Registra decisiones para análisis

Cuándo Usar Agentes

✓ Use AGENTES cuando:
  • Las tareas son complejas y multietapas
  • Se requiere autonomía y proactividad
  • El sistema debe aprender del tiempo
  • Hay interacciones en segundo plano
  • Se necesita manejo de memoria persistente

✗ No use AGENTES cuando:
  • Las tareas son simples e immediatas
  • Se requiere interacción lineal usuario-sistema
  • No hay datos suficientes para contexto
  • El overheard computacional no está justificado
  • Las respuestas deben ser predecibles al 100%

Stack Tecnológico Recomendado

┌──────────────────────────────────────┐
│  CAPA DE APLICACIÓN                  │
│  (CrewAI, LangChain)                 │
├──────────────────────────────────────┤
│  CAPA DE MODELOS                     │
│  (LLMs: GPT-4, Claude, etc.)         │
├──────────────────────────────────────┤
│  CAPA DE DATOS                       │
│  (Grafos, Vector DBs, Semántica)     │
├──────────────────────────────────────┤
│  CAPA DE INFRAESTRUCTURA             │
│  (Cloud, Kubernetes, APIs)           │
└──────────────────────────────────────┘

Recursos Recomendados para Aprender

  1. CrewAI Documentation: Framework principal de ejemplo
  2. LangChain: Para construcción de cadenas de razonamiento
  3. Graph Databases: Neo4j, AuraDB para grafos complejos
  4. Vector Databases: Pinecone, Weaviate para embeddings
  5. AI Research: Papers sobre multi-agent systems (ArXiv)

Apéndice: Ejemplo Completo de Código

Implementación Básica con CrewAI

#!/usr/bin/env python3
"""
Ejemplo: Sistema de Análisis de Notas con Agentes
"""
 
from crewai import Agent, Crew, Task
from crewai.process import Process
 
 
def crear_crew_analisis():
    """Crea un equipo de agentes para análisis de conocimiento."""
    
    # Agente 1: Extractor de Conceptos
    analista = Agent(
        role="Analista de Conocimiento",
        goal="Extraer conceptos clave y organizar por temas",
        backstory="Experto en análisis sistemático de información",
        verbose=False,
        allow_delegation=False
    )
    
    # Agente 2: Generador de Etiquetas
    etiqueador = Agent(
        role="Especialista en Taxonomía",
        goal="Crear etiquetas semánticas precisas",
        backstory="Experto en sistemas de clasificación",
        verbose=False,
        allow_delegation=False
    )
    
    # Agente 3: Verificador de Relaciones
    verificador = Agent(
        role="Auditor Semántico",
        goal="Validar conexiones lógicas entre conceptos",
        backstory="Especialista en grafos de conocimiento",
        verbose=False,
        allow_delegation=False
    )
    
    # Definir tareas
    task1 = Task(
        agent=analista,
        description="Analiza las notas y extrae conceptos clave",
        expected_output="JSON con conceptos y resúmenes"
    )
    
    task2 = Task(
        agent=etiqueador,
        description="Genera etiquetas para cada concepto",
        expected_output="JSON con etiquetas y justificaciones"
    )
    
    task3 = Task(
        agent=verificador,
        description="Verifica relaciones entre conceptos",
        expected_output="Grafo de relaciones y recomendaciones"
    )
    
    # Crear crew
    crew = Crew(
        agents=[analista, etiqueador, verificador],
        tasks=[task1, task2, task3],
        process=Process.sequential,
        verbose=True,
        memory=True
    )
    
    return crew
 
 
if __name__ == "__main__":
    crew = crear_crew_analisis()
    
    # Ejecutar con contexto
    resultado = crew.kickoff(inputs={
        "notas_path": "./Data Studies/",
        "objetivo": "Analizar y organizar contenido de estudios de datos"
    })
    
    print("✓ Análisis completado")
    print(resultado)

Próximas Revisiones Recomendadas

  • Revisar y expandir contenido de casos de uso específicos
  • Crear ejercicios prácticos de implementación
  • Conectar con notas correlativas sobre Sistemas Distribuidos
  • Actualizar con últimas tendencias en Multi-Agent Systems
  • Documentar resultados de pruebas de performance
  • Crear guía de troubleshooting común

Documento generado: 28 de Marzo, 2026
Estado: 🌿 Comprehensivo y detallado
Prioridad: FUNDACIONAL - Infraestructura-Nube
Próxima revisión: 7 de Abril, 2026