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.destructiveDen 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 messagesEskalationsmetriken 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 escalateNotfallü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 rateKurze Ü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
- Fehlermodi von Agenten klassifizieren
- Selbstkorrektur und reflektierendes Prompting
- Checkpoints und Fortsetzen von Aufgaben
- Eskalation mit Human-in-the-Loop