Wann man dazu greift
- Aktionen irreversible oder teure Konsequenzen haben.
- Compliance menschliche Entscheidungen vorschreibt.
- Modellunsicherheit sichtbar gemacht werden muss.
/pattern/hitl-gate/
Kritische Schritte werden von einem Menschen überprüft und freigegeben, bevor sie ausgeführt werden. Das System pausiert, persistiert den Zustand, stellt eine strukturierte Frage und setzt fort, sobald der Mensch antwortet. Am besten als abgestufte Autonomie konzipiert — Überwachung pro Aktionsklasse nach Tragweite gesetzt (Vollautomatisierung bei geringer Tragweite, überwacht bei mittlerer, menschengeführt bei hoher Tragweite) und nicht als einfaches Ein-/Ausschalter-Gate.
Wann man dazu greift
Wann es nach hinten losgeht
Die Abwägung
Höhere Kontrolle wird auf Kosten langsamerer Betriebsabläufe erreicht.
Vor jeder irreversiblen Aktion pausiert der Agent an einem Gate. Ein Mensch prüft, genehmigt oder überarbeitet.
from langgraph.graph import StateGraph, END
from langgraph.types import interrupt, Command
class State(TypedDict):
order: dict
refund: dict | None
approved: bool | None
def draft_refund(state):
return {"refund": refund_llm(state["order"])}
def human_gate(state):
# Suspends execution; resumes when human replies
return interrupt({
"question": "Approve refund?",
"payload": state["refund"],
})
def execute_refund(state):
if state["approved"]:
process_refund(state["refund"])
return state
g = StateGraph(State)
g.add_node("draft", draft_refund)
g.add_node("gate", human_gate)
g.add_node("execute", execute_refund)
g.add_edge("draft", "gate")
g.add_edge("gate", "execute")
g.add_edge("execute", END)
g.set_entry_point("draft")
# Resume with: graph.invoke(None, config, stream_mode="values")
# after human calls Command(resume={"approved": True, ...})
hitl = g.compile()Jede risikoarme Aktion löst ein Gate aus. Menschen entwickeln Genehmigungsmüdigkeit und klicken 'Genehmigen', ohne zu lesen.
Lösung · Nur bei irreversiblen oder kostenintensiven Aktionen ein Gate setzen. Einen Risikoklassifikator für die automatische Genehmigung risikoarmer Vorgänge verwenden.
Das Gate zeigt den Endzustand, aber nicht was sich geändert hat. Der Mensch kann nicht erkennen, ob der Rückerstattungsbetrag korrekt ist.
Lösung · Ein klares Diff in den interrupt-Payload aufnehmen: 'Vorgeschlagene Änderung: 249,00 $ → 199,00 $. Grund: doppelte Abbuchung.'
Patterns, Frameworks und Seiten durchsuchen.