0Pricing
AI Engineering Academy · Lektion

Eskalation mit Human-in-the-Loop

Definieren Sie Eskalationsauslöser, die den Agenten anhalten und menschliche Unterstützung anfordern, wenn die Konfidenz niedrig ist, eine destruktive Aktion bevorsteht oder das Retry-Budget erschöpft ist.

Eskalation mit Human-in-the-Loop ist eine kostenlose AI Engineering Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des AI Engineering Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der AI Engineering Academy-Kurs umfasst insgesamt 4 Lektionen.

Wann Agents menschliche Unterstützung benötigen

Vollständig autonome Agents eignen sich für klar definierte Aufgaben mit geringem Risiko. Einige Situationen erfordern jedoch menschliches Urteilsvermögen: mehrdeutige Anweisungen, geringes Vertrauen des Modells, nicht rückgängig zu machende destruktive Aktionen oder Aufgaben, bei denen ein Fehler schwerwiegende Folgen hätte. Eine Human-in-the-loop-Eskalation (HITL) hält den Agent an diesen Entscheidungspunkten an und fordert vor der Fortsetzung menschlichen Input an. So werden die Effizienz der Automatisierung und das Urteilsvermögen von Menschen miteinander verbunden.

Eskalationsauslöser definieren

Eine Eskalation sollte durch spezifische, messbare Bedingungen ausgelöst werden und nicht durch ein vages Bauchgefühl. Definieren Sie für Ihre Anwendung eindeutige Eskalationsauslöser. Häufige Auslöser sind: eine Modellkonfidenz unter einem Schwellenwert, eine unmittelbar bevorstehende destruktive Aktion, das Erreichen einer Richtliniengrenze, ein ausgeschöpftes Wiederholungsbudget oder das Überschreiten des Zeitlimits für die Aufgabe. Dokumentieren Sie die Auslöser im Code als benannte Konstanten, damit sie angepasst werden können, ohne die Logik des Kontrollflusses zu ändern.

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,
}

Niedrige Konfidenz erkennen

Fordern Sie das Modell auf, vor der Ausführung einer vorgeschlagenen Aktion seine Konfidenz anzugeben. Ein Konfidenzwert unterhalb Ihres Schwellenwerts löst eine Eskalation aus. Verwenden Sie eine strukturierte Konfidenzprüfung mit einem numerischen Wert und einer kurzen Begründung, damit der menschliche Prüfer genau versteht, warum der Agent unsicher war. Die Begründung hilft dem Menschen, gezielt Anweisungen zu geben, statt den gesamten Aufgabenverlauf prüfen zu müssen.

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.'
        }]
    )

Destruktive Aktionen erkennen

Versehen Sie Tools, die irreversible Aktionen ausführen, mit einem destructive=True-Flag und verlangen Sie vor ihrer Ausführung eine menschliche Bestätigung. Beispiele: Dateien löschen, E-Mails an echte Benutzer senden, nicht rückgängig machbare Datenbankänderungen vornehmen, einem Kunden etwas berechnen oder Inhalte öffentlich veröffentlichen. Der Agent muss bei diesen Aktionen pausieren und auf eine ausdrückliche menschliche Genehmigung warten, selbst wenn er ansonsten autonom arbeitet.

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

Den Agenten pausieren und auf Eingaben warten

Wenn ein Eskalationsauslöser aktiviert wird, speichern Sie den Checkpoint (damit die Aufgabe fortgesetzt werden kann), erstellen Sie einen Datensatz für die Eskalationsanfrage und benachrichtigen Sie den menschlichen Prüfer. Der Agent beendet die Verarbeitung und wartet. Der Mensch prüft die Eskalation über ein Dashboard oder eine Benachrichtigung, gibt Anweisungen oder eine Genehmigung und der Agent setzt die Aufgabe am Checkpoint fort, wobei diese Anweisung als neue Nachricht im Verlauf enthalten ist.

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')

Die Prüferoberfläche erstellen

Menschliche Prüfer benötigen eine einfache Oberfläche, um auf Eskalationen zu reagieren. Zeigen Sie mindestens Folgendes an: die Aufgabenbeschreibung, den bisherigen Fortschritt des Agenten, die konkrete Frage oder vorgeschlagene Aktion, für die eine Genehmigung erforderlich ist, sowie Schaltflächen für „Genehmigen“, „Ablehnen“ und „Anweisung geben“. Protokollieren Sie jede Entscheidung des Prüfers zusammen mit seiner Identität und einem Zeitstempel zu Prüfzwecken. Sowohl ein Slack-Bot als auch ein einfaches Webformular eignen sich gut für interne Teams.

# 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}

Menschliche Anweisungen in den Agentenkontext einfügen

Nachdem der Mensch geantwortet hat, fügen Sie seine Anweisung als neue Nachricht in den Gesprächsverlauf des Agenten ein, bevor Sie die Ausführung fortsetzen. Kennzeichnen Sie sie als Nachricht eines „supervisor“, um sie von den eigenen Beobachtungen des Agenten zu unterscheiden. Der Agent kann dann in seinem nächsten Schritt auf diese Anweisung zurückgreifen. Wenn der Mensch die vorgeschlagene Aktion abgelehnt hat, fügen Sie Anweisungen dazu ein, was stattdessen zu tun ist.

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

Eskalationsmetriken verfolgen

Überwachen Sie Anzahl, Gründe und Antwortzeiten von Eskalationen. Eine hohe Eskalationsrate weist darauf hin, dass der Agent nicht zuversichtlich genug ist — entweder ist die Aufgabe zu mehrdeutig, das Modell benötigt bessere Anweisungen oder die Konfidenzschwellen sind zu niedrig angesetzt. Lange Antwortzeiten deuten auf eine zu hohe Arbeitslast der Prüfer hin. Diese Metriken helfen Ihnen, das Gleichgewicht zwischen Automatisierung und menschlicher Beteiligung anzupassen, unnötige Unterbrechungen zu minimieren und Menschen bei tatsächlich riskanten Entscheidungen einzubeziehen.

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]

Autonomie schrittweise erweitern

Beginnen Sie mit einer hohen Eskalationsempfindlichkeit (niedriger Konfidenzschwellenwert, Eskalation bei allen destruktiven Aktionen) und verringern Sie die Eskalationshäufigkeit schrittweise, sobald Sie Vertrauen in das Verhalten des Agenten gewinnen. Verfolgen Sie, welche Eskalationen zu Genehmigungen führen und bei welchen tatsächlich Korrekturen erforderlich sind. Eine dauerhaft hohe Genehmigungsrate für einen bestimmten Auslösertyp bedeutet, dass Sie diesen Auslöser sicher automatisieren können. So reduzieren Sie die Arbeitslast der Menschen und behalten gleichzeitig dort die Kontrolle, wo sie wirklich wichtig ist.

# 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

Notfallübersteuerung und Abbruch von Aufgaben

Stellen Sie immer eine Notfallübersteuerung bereit, mit der ein Mensch eine laufende Agentenaufgabe sofort abbrechen kann. Wenn sich ein Agent fehlerhaft verhält — etwa Tools aufruft, die er nicht aufrufen sollte, oder Aktionen außerhalb seines vorgesehenen Aufgabenbereichs ausführt — muss ein Mensch ihn innerhalb von Sekunden stoppen können. Implementieren Sie ein Abbruchsignal (ein Datenbank-Flag, das der Agent bei jedem Schritt prüft) und stellen Sie sicher, dass Ergebnisse von Tool-Aufrufen verworfen werden, wenn der Agent mitten in einem Schritt abgebrochen wird.

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'

Eskalationsschwellen kalibrieren

Eskalationsschwellen müssen abgestimmt werden. Ist der Konfidenzschwellenwert zu hoch, eskaliert der Agent nahezu jede Aktion und überlastet die Prüfer. Ist er zu niedrig, können riskante Aktionen unbemerkt ausgeführt werden. Beginnen Sie in der ersten Woche mit konservativen Schwellenwerten, verfolgen Sie die Eskalationsrate und die Genehmigungsrate der Prüfer und passen Sie die Werte an. Ein stabiles System sollte bei 5–15 % der Aufgaben aufgrund von Konfidenzproblemen eskalieren und bei destruktiven Aktionen nahezu immer, bei einer Gesamtgenehmigungsrate von über 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

Kurze Überprüfung

Testen Sie Ihr Verständnis des Designs von Eskalationen mit menschlicher Beteiligung.

Zusammenfassung der Lektion

In dieser Lektion haben Sie gelernt: Eskalationsauslöser definieren präzise Bedingungen, unter denen der Agent pausieren und menschliche Anweisungen einholen muss; Flags für destruktive Aktionen an Tools erzwingen Genehmigungen für irreversible Vorgänge; und die schrittweise Erweiterung der Autonomie ermöglicht es Ihnen, die Automatisierung sicher auszubauen, sobald der Agent Vertrauen gewinnt. Als Nächstes entwerfen wir die Produktionsarchitektur für unser Abschlussprojekt.

Häufig gestellte Fragen

Ist die Lektion „Eskalation mit Human-in-the-Loop“ kostenlos?

Ja — der vollständige Text von „Eskalation mit Human-in-the-Loop“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des AI Engineering Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der AI Engineering Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Eskalation mit Human-in-the-Loop“?

Definieren Sie Eskalationsauslöser, die den Agenten anhalten und menschliche Unterstützung anfordern, wenn die Konfidenz niedrig ist, eine destruktive Aktion bevorsteht oder das Retry-Budget erschöpf… Du übst AI Engineering Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um AI Engineering Academy zu starten?

Keine Vorkenntnisse erforderlich. AI Engineering Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Eskalation mit Human-in-the-Loop“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser AI Engineering Academy-Lektion Code schreiben und ausführen?

Ja. Jede AI Engineering Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Fehlermodi von Agenten klassifizieren
  2. Selbstkorrektur und reflektierendes Prompting
  3. Checkpoints und Fortsetzen von Aufgaben
  4. Eskalation mit Human-in-the-Loop
← Zurück zu AI Engineering Academy