waiting_for_human und allem, was zum Fortsetzen nötig ist. Speichere das gesamte Ergebnis, hole die Entscheidung in deiner Anwendung ein und übergib dann das gespeicherte Ergebnis und die Entscheidung an die Fortsetzungsmethode des Agenten.
Phaseo speichert keine Läufe des Agent SDK. Speichere fortsetzbaren Status in deiner eigenen Anwendung, wenn er eine Anfrage oder einen Prozessneustart überdauern muss.
Tool-Aufrufe freigeben oder ablehnen
Freigabepflichtige, manuelle und Human-in-the-Loop-Tools pausieren den Lauf, bevor sie ausgeführt werden. Jeder ausstehende Aufruf hat dencall des Modells (mit seiner id) und eine kind: approval, manual oder hitl. Beantworte jeden Aufruf über seine exakte Call-ID, nicht über den Tool-Namen, damit zwei Aufrufe desselben Tools getrennt bleiben.
Ein freigegebener Aufruf führt sein Tool aus. Ein abgelehnter Aufruf sendet {"error": "<reason>"} als Tool-Ergebnis an das Modell, mit dem Standardgrund Tool call rejected.
Auch die Pause selbst hat eine
kind. Go und C# setzen sie bei jeder Tool-Pause auf tool_approval. PHP, Ruby und Java setzen tool_approval, wenn irgendein ausstehender Aufruf eine Freigabe braucht, andernfalls die kind des ersten Aufrufs. Rust verwendet tool_approval für Freigabeaufrufe, external_output, wenn jeder ausstehende Aufruf ein externes Ergebnis braucht, und tool_input für eine Mischung aus beidem.
Um für jeden Tool-Aufruf statt pro Tool eine Freigabe zu verlangen, setze requireApproval in der Agentendefinition (require_approval in Python und Ruby, RequireApproval in Go und C#). In TypeScript ist es eine Funktion requireApproval(call, context). Rust unterstützt Freigaben nur pro Tool, mit Tool::require_approval(). Unter Tools siehst du, wie jede Art von Tool definiert wird.
Ergebnisse für manuelle und Human-in-the-Loop-Tools liefern
Fürmanual- und hitl-Aufrufe übergibst du das Ergebnis, das deine Anwendung erzeugt hat, mit der Call-ID als Schlüssel. In Rust sind das Tools, die mit Tool::external(...) gebaut wurden.
Missing output for tool call <id> fehlschlagen (kleingeschriebenes missing in Go, ein ValueError in Python, ein AgentError in Rust). Eine menschliche Eingabenachricht ersetzt keine Tool-Ausgabe.
Für eine menschliche Prüfung pausieren
Setze in der Agentendefinition einen Callback für die menschliche Prüfung, um jede Modellantwort zu prüfen, bevor der Lauf weitergeht. Gib eine Prüfanfrage mit einemreason (und optional einem payload) zurück, um zu pausieren, oder nichts, um fortzufahren. Die kind der Pause ist human_review. Der Callback erhält die Lauf-ID, den Schrittindex, die Nachrichten, die Modellantwort und die geparste Ausgabe (Rust: Lauf- und Agenten-ID, Schrittindex, Nachrichten, Antwort und Anwendungskontext).
Run <id> is waiting for human input fehl (Go: run <id> is waiting for human input; Java: Run is waiting for human input). Rust verlangt ein nicht leeres human_input. TypeScript akzeptiert außerdem strukturierte humanMessages.
Ausführungsstatus zwischen Anfragen speichern
Das Laufergebnis besteht aus einfachen Daten: Speichere es in deiner Datenbank, deinem Objektspeicher oder deinem Job-Eintrag und halte den Anwendungs-context serialisierbar. Ein Lauf kann nur von einem Agenten mit derselben ID fortgesetzt werden. Das Rezept für eine dauerhafte Agentenschleife zeigt einen vollständigen Ablauf zum Speichern und Fortsetzen.
Wenn das SDK Läufe für dich speichern und laden soll, übergib einen Status-Accessor mit load(runId) und save(result). Das SDK speichert dann nach jedem Lauf und jeder Fortsetzung, und du kannst über die Lauf-ID fortsetzen, statt den Eintrag durch jede Schicht zu reichen.
AgentDefinition sind nicht Teil des serialisierten Laufs. Das effektive Modell und das Schrittlimit werden in RunRecord gespeichert, sodass Überschreibungen pro Lauf nach dem Fortsetzen aktiv bleiben.
Was auch immer du speicherst: Für Verschlüsselung und Aufbewahrung gespeicherter Läufe, die Autorisierung von Freigaben und menschlichen Eingaben sowie die Idempotenz von Nebeneffekten, die nach einem Fortsetzen erneut laufen, ist deine Anwendung zuständig.