0Pricing
AI Engineering Academy · Lección

Escalado con intervención humana

Defina los activadores de escalado que pausan el agente y solicitan orientación humana cuando la confianza es baja, cuando está a punto de realizarse una acción destructiva o cuando se agota el presupuesto de reintentos.

Escalado con intervención humana es una lección gratuita de AI Engineering Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AI Engineering Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AI Engineering Academy incluye 4 lecciones en total.

Cuándo necesitan orientación humana los agentes

Los agentes totalmente autónomos son adecuados para tareas bien definidas y de bajo riesgo. Sin embargo, algunas situaciones requieren criterio humano: instrucciones ambiguas, baja confianza del modelo, acciones destructivas que no pueden deshacerse o tareas cuyo fallo tendría consecuencias graves. El escalado con intervención humana (HITL) pausa al agente en estos puntos de decisión y solicita la intervención de una persona antes de continuar, combinando la eficiencia de la automatización con el criterio humano.

Definir activadores de escalado

El escalado debe activarse mediante condiciones específicas y medibles, no mediante una intuición vaga. Defina activadores de escalado explícitos para su aplicación. Entre los activadores habituales se incluyen: una confianza del modelo inferior a un umbral, la inminencia de una acción destructiva, la aproximación a un límite de políticas, el agotamiento del presupuesto de reintentos o la superación del límite de tiempo de la tarea. Documente los activadores en el código como constantes con nombre, para poder ajustarlos sin cambiar la lógica del flujo de control.

from enum import Enum

class EscalationReason(Enum):
    LOW_CONFIDENCE = 'low_confidence'           # model uncertainty
    DESTRUCTIVE_ACTION = 'destructive_action'   # irreversible change
    AMBIGUOUS_TASK = 'ambiguous_task'           # unclear instructions
    RETRY_BUDGET_EXHAUSTED = 'retry_exhausted'  # too many failures
    POLICY_BOUNDARY = 'policy_boundary'         # approaching limit
    HUMAN_REQUESTED = 'human_requested'         # explicit request
    TIMEOUT = 'timeout'                         # took too long

ESCALATION_THRESHOLDS = {
    'min_confidence': 0.6,
    'max_retries': 5,
    'max_runtime_minutes': 30,
}

Detectar una confianza baja

Pida al modelo que exprese su confianza en una acción propuesta antes de ejecutarla. Una puntuación de confianza inferior al umbral activa el escalado. Utilice una comprobación de confianza estructurada que incluya tanto una puntuación numérica como una breve justificación, para que la persona revisora entienda exactamente por qué el agente no estaba seguro. La justificación ayuda a proporcionar orientación específica sin tener que revisar todo el historial de la tarea.

from pydantic import BaseModel

class ConfidenceCheck(BaseModel):
    proposed_action: str
    confidence: float  # 0.0 to 1.0
    uncertainty_reason: str | None
    proceed: bool

async def check_confidence(context: str, proposed_action: str) -> ConfidenceCheck:
    return await judge_client.chat.completions.create(
        model='gpt-4o',
        response_model=ConfidenceCheck,
        messages=[{
            'role': 'user',
            'content': f'Context: {context}\n\nI am about to: {proposed_action}\n\nHow confident am I that this is correct? Be honest about uncertainty.'
        }]
    )

Detectar acciones destructivas

Marque las herramientas que realizan acciones irreversibles con un indicador destructive=True y exija confirmación humana antes de ejecutarlas. Algunos ejemplos son eliminar archivos, enviar correos electrónicos a usuarios reales, realizar cambios en bases de datos que no puedan revertirse, cobrar a un cliente o publicar contenido. El agente debe pausarse ante estas acciones y esperar la aprobación humana explícita, aunque por lo demás esté funcionando de forma autónoma.

from dataclasses import dataclass
from typing import Callable

@dataclass
class Tool:
    name: str
    func: Callable
    destructive: bool = False
    description: str = ''

tools = [
    Tool('search_web',     search_web,      destructive=False),
    Tool('read_file',      read_file,       destructive=False),
    Tool('write_file',     write_file,      destructive=True,  description='Overwrites existing file'),
    Tool('send_email',     send_email,      destructive=True,  description='Sends real email to user'),
    Tool('delete_records', delete_records,  destructive=True,  description='Permanent DB deletion'),
]

def requires_approval(tool: Tool) -> bool:
    return tool.destructive

Pausar el agente y esperar la intervención

Cuando se active un activador de escalado, guarde el punto de control (para que la tarea pueda reanudarse), cree un registro de solicitud de escalado y notifique a la persona revisora. El agente detiene el procesamiento y espera. La persona revisora analiza el escalado mediante un panel o una notificación, proporciona orientación o aprobación, y el agente se reanuda desde el punto de control con esa orientación incluida como un mensaje nuevo en el historial.

import asyncio

async def escalate_and_wait(task_id: str, reason: EscalationReason, context: str,
                             question: str, timeout_hours: int = 24) -> str:
    # Save checkpoint
    save_checkpoint(load_checkpoint(task_id))
    # Create escalation record
    escalation_id = create_escalation(task_id, reason, context, question)
    # Notify reviewer
    notify_reviewer(escalation_id, question)
    # Wait for response (polling with timeout)
    deadline = asyncio.get_event_loop().time() + timeout_hours * 3600
    while asyncio.get_event_loop().time() < deadline:
        response = get_escalation_response(escalation_id)
        if response:
            return response.guidance
        await asyncio.sleep(60)  # check every minute
    raise TimeoutError(f'Escalation {escalation_id} not answered within {timeout_hours}h')

Crear la interfaz de revisión

Los revisores humanos necesitan una interfaz sencilla para responder a los escalamientos. Como mínimo, muestre: la descripción de la tarea, el progreso realizado hasta el momento por el agente, la pregunta específica o la acción propuesta que requiere aprobación, y botones para Aprobar, Rechazar y Proporcionar orientación. Registre cada decisión del revisor junto con su identidad y la marca de tiempo para fines de auditoría. Tanto un bot de Slack como un formulario web sencillo funcionan bien para los equipos internos.

# FastAPI escalation endpoint
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class EscalationResponse(BaseModel):
    escalation_id: str
    decision: str  # 'approve', 'reject', 'guide'
    guidance: str | None = None
    reviewer_id: str

@app.post('/escalations/{escalation_id}/respond')
async def respond_to_escalation(esc_id: str, response: EscalationResponse):
    escalation = get_escalation(esc_id)
    if not escalation or escalation.status != 'pending':
        return {'error': 'Escalation not found or already resolved'}
    save_escalation_response(esc_id, response)
    return {'status': 'response_recorded', 'task_will_resume': True}

Inyección de orientación humana en el contexto del agente

Después de que la persona responda, inyecte su orientación como un mensaje nuevo en el historial de conversación del agente antes de reanudar la ejecución. Preséntela como proveniente de un «supervisor» para distinguirla de las observaciones propias del agente. Así, el agente podrá consultar esta orientación en su siguiente paso. Si la persona rechazó la acción propuesta, incluya instrucciones sobre qué hacer en su lugar.

def inject_human_guidance(messages: list, decision: str, guidance: str | None) -> list:
    if decision == 'approve':
        messages.append({
            'role': 'user',
            'content': 'Supervisor: Your proposed action has been approved. Proceed.'
        })
    elif decision == 'reject':
        messages.append({
            'role': 'user',
            'content': f'Supervisor: Your proposed action was rejected. Instead: {guidance}'
        })
    elif decision == 'guide':
        messages.append({
            'role': 'user',
            'content': f'Supervisor: Additional guidance: {guidance}'
        })
    return messages

Seguimiento de las métricas de escalamiento

Supervise el volumen de escalamientos, los motivos y los tiempos de respuesta. Un volumen elevado de escalamientos indica que el agente no tiene suficiente confianza: la tarea puede ser demasiado ambigua, el modelo puede necesitar mejores instrucciones o los umbrales de confianza pueden ser demasiado bajos. Los tiempos de respuesta prolongados indican problemas de carga de trabajo para los revisores. Estas métricas le ayudan a ajustar el equilibrio entre automatización y participación humana para minimizar las interrupciones innecesarias, sin dejar de involucrar a las personas en las decisiones que realmente implican riesgos.

def escalation_report(db_connection, days: int = 7) -> dict:
    # SQL query (pseudocode)
    rows = db_connection.execute('''
        SELECT
            reason,
            COUNT(*) as count,
            AVG(EXTRACT(EPOCH FROM (responded_at - created_at)) / 3600) as avg_response_hours,
            SUM(CASE WHEN decision = 'approve' THEN 1 ELSE 0 END) as approvals,
            SUM(CASE WHEN decision = 'reject' THEN 1 ELSE 0 END) as rejections
        FROM escalations
        WHERE created_at > NOW() - INTERVAL '%s days'
        GROUP BY reason
        ORDER BY count DESC
    ''' % days).fetchall()
    return [dict(r) for r in rows]

Ampliación gradual de la autonomía

Comience con una alta sensibilidad al escalamiento (un umbral de confianza bajo y escalamientos para todas las acciones destructivas) y reduzca gradualmente la frecuencia de los escalamientos a medida que gana confianza en el comportamiento del agente. Registre qué escalamientos terminan en decisiones de Aprobar y cuáles dan lugar a correcciones reales. Una tasa de aprobación constantemente alta para un tipo de activador específico significa que puede automatizarlo de forma segura, reduciendo la carga de trabajo humana y manteniendo la supervisión donde realmente importa.

# Autonomy expansion strategy:
# Week 1: escalate for ALL destructive actions
# Week 2: auto-approve file writes to /tmp (low-risk), escalate others
# Week 4: auto-approve all file writes, escalate only email/DB changes
# Week 8: auto-approve emails under 10 recipients, escalate mass emails

# Track approval rates per trigger type:
# Tool: write_file    -> 98% approve -> safe to automate
# Tool: send_email    -> 89% approve -> near-automate with content check
# Tool: delete_records -> 43% approve -> always escalate

Anulación de emergencia y cancelación de tareas

Proporcione siempre un mecanismo de anulación de emergencia que permita a una persona cancelar de inmediato una tarea del agente que esté en ejecución. Si un agente se comporta de forma incorrecta —por ejemplo, llama a herramientas que no debería o realiza acciones fuera de su alcance previsto—, una persona debe poder detenerlo en cuestión de segundos. Implemente una señal de cancelación (una marca en la base de datos que el agente compruebe en cada paso) y asegúrese de descartar los resultados de las llamadas a herramientas si el agente se cancela a mitad de un paso.

async def run_agent_with_cancel(task_id: str, messages: list) -> str:
    for step in range(MAX_ITERATIONS):
        # Check cancel flag at start of every step
        if redis_client.get(f'agent:cancel:{task_id}'):
            save_final_status(task_id, 'cancelled')
            return 'Task cancelled by operator.'
        response = await get_next_action(messages)
        if response.is_final:
            return response.answer
        result = await execute_tool(response.tool, response.args)
        messages.append({'role': 'user', 'content': result})
        save_checkpoint_after_step(task_id, step, messages)
    return 'Max iterations reached'

Calibración de los umbrales de escalamiento

Es necesario ajustar los umbrales de escalamiento. Si el umbral de confianza es demasiado alto, el agente escala casi todas las acciones y abruma a los revisores. Si es demasiado bajo, algunas acciones riesgosas pasan sin revisión. Comience con umbrales conservadores durante la primera semana, registre el volumen de escalamientos y la tasa de aprobación de los revisores, y haga los ajustes necesarios. Un sistema estable debería escalar entre el 5 y el 15 % de las tareas por problemas de confianza y cerca del 100 % de las acciones destructivas, con una tasa general de aprobación superior al 80 %.

# Threshold tuning guide:
# Escalation rate vs quality trade-off:
#
# confidence_threshold=0.8  -> 35% escalation rate (too many)
# confidence_threshold=0.6  -> 12% escalation rate (target)
# confidence_threshold=0.4  ->  4% escalation rate (too few)
#
# Weekly review of escalation decisions:
# - Approval rate > 90%: lower threshold (too conservative)
# - Approval rate < 70%: raise threshold (not catching real issues)
# - Target: 75-85% approval rate

Comprobación rápida

Compruebe su comprensión del diseño de escalamientos con participación humana.

Resumen de la lección

En esta lección aprendió que los activadores de escalamiento definen las condiciones precisas en las que el agente debe pausar y solicitar orientación humana; las marcas de acciones destructivas en las herramientas imponen requisitos de aprobación para las operaciones irreversibles; y la ampliación gradual de la autonomía permite aumentar la automatización de forma segura a medida que el agente gana confianza. A continuación, diseñaremos la arquitectura de producción de nuestro proyecto final.

Preguntas frecuentes

¿La lección «Escalado con intervención humana» es gratis?

Sí — el texto completo de «Escalado con intervención humana» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AI Engineering Academy, actualiza a CoddyKit PRO. El curso de AI Engineering Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Escalado con intervención humana»?

Defina los activadores de escalado que pausan el agente y solicitan orientación humana cuando la confianza es baja, cuando está a punto de realizarse una acción destructiva o cuando se agota el presu… Practicas AI Engineering Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar AI Engineering Academy?

No se requiere experiencia previa. AI Engineering Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Escalado con intervención humana»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de AI Engineering Academy?

Sí. Cada lección de AI Engineering Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Clasificación de los modos de fallo de los agentes
  2. Autocorrección y prompting reflexivo
  3. Puntos de control y reanudación de tareas
  4. Escalado con intervención humana
← Volver a AI Engineering Academy