Laravel AI SDK v0.10.0 führt Human-in-the-Loop-Freigaben für Tools ein
Auf der Laracon US 2026 vorgestellt: Der Laravel AI SDK kann Agenten nun vor der Ausführung sensibler Tools anhalten, damit ein Mensch den Aufruf genehmigt, ablehnt oder anpasst.
Das Opt-in-Feature erscheint in v0.10.0 mit Approval-Verträgen, Decision-Objekten und Unterstützung für Streaming, Queues und Broadcasting.
Auf der Laracon US 2026 in Boston stellte das Laravel-Team eine Human-in-the-Loop-API (HITL) für den Laravel AI SDK vor. Sie wurde über laravel/ai#773 umgesetzt und ist am 21. Juli in v0.10.0 erschienen. Bisher lief ein Agent nach dem Start seiner Tool-Aufrufe unbeaufsichtigt bis zum Ende — akzeptabel bei rein lesenden Tools, riskant aber bei Aktionen wie Dateien löschen, Zahlungen erstatten oder E-Mails an Kunden senden. Mit HITL kann ein Agent vor der Ausführung eines Tools pausieren und darauf warten, dass ein Mensch den Aufruf genehmigt, ablehnt oder dessen Argumente bearbeitet.
Die Freigabe ist pro Tool aktivierbar. Ein Tool implementiert den Vertrag Laravel\Ai\Contracts\Approvable und nutzt das Trait InteractsWithApprovals, wodurch eine Freigabe standardmäßig Pflicht ist. Für feinere Kontrolle kann eine needsApproval-Methode die Argumente prüfen und einen Boolean oder eine Approval-Instanz mit Begründung zurückgeben — etwa nur bei Erstattungen über 20 Dollar. Anforderungen lassen sich auch bei der Registrierung in der tools()-Methode des Agenten mit withoutApproval() und requireApproval() überschreiben.
Ruft das Modell ein freigabepflichtiges Tool auf, stoppt der Agent und stellt die ausstehenden Aufrufe über hasPendingApprovals() und pendingApprovals in der Antwort bereit; jeder Eintrag enthält Tool-Call-ID, Toolname, Argumente und Grund. Zur Fortsetzung wird die Konversation mit einer Decisions-Instanz fortgesetzt, die nach Tool-Call-ID aufgeschlüsselt ist — mit Decision::approve() oder Decision::reject(), wobei true/false als Kurzform dienen. Jeder ausstehende Aufruf braucht eine Entscheidung, sonst wird eine ApprovalMismatchException geworfen; approveRemaining() und rejectRemaining() setzen Standardwerte für den Rest. Eine Ablehnung mit Ergebnis-String geht zurück ans Modell, damit es weiterantworten kann; eine Ablehnung ohne Ergebnis beendet die Generierungsschleife.
Einige Details sind wichtig: Der Agent muss Conversational sein mit persistenter Historie (Trait RemembersConversations), damit pausierte Aufrufe fortgesetzt werden können. Freigaben funktionieren mit prompt, stream, queue, broadcast, broadcastNow und broadcastOnQueue; beim Streaming erscheinen sie als tool_approval_request-Event, mit nativen Approval-Parts im Vercel-AI-SDK-Stream-Protokoll, und Queued Agents erhalten die Antwort im then-Callback plus einem ToolApprovalRequested-Event. Pausen gelten pro Aufruf, nicht pro Schritt — nicht freigabepflichtige Tools desselben Schritts laufen sofort, daher sollten Seiteneffekte über $request->toolCallId() idempotent bleiben. Ergebnisse genehmigter Tools werden gespeichert, bevor das Modell fortfährt; schlägt die Generierung danach fehl, sollte mit einem normalen Text-Prompt fortgesetzt werden statt die Entscheidungen erneut zu senden.
Das Upgrade auf 0.10 bringt Breaking Changes: eine neue nullable Spalte approval_state in der Tabelle der Konversationsnachrichten und eine Methode storeApprovalResults(), die eigene ConversationStore-Implementierungen bereitstellen müssen. Die Dokumentation enthält einen vollständigen Ablauf mit zwei Routen, die sowohl neue Nachrichten als auch Entscheidungen aus einem Chat-Bildschirm verarbeiten.
Leserforum
Noch keine Beiträge — eröffne die Debatte.
Starte die Diskussion
Kein Konto, kein Passwort nötig — gib einfach deine E-Mail-Adresse ein, wir senden dir einen einmaligen Anmelde-Link. Beim ersten Mal bist du damit automatisch angemeldet.
Deine Bewertung wird nach der Anmeldung automatisch übernommen.
Schau in dein Postfach
Wir haben einen Anmelde-Link an … gesendet. Öffne ihn auf diesem Gerät — dieser Tab meldet dich automatisch an.
Warte auf deinen Klick …
·