Workflows aufspalten
Queuety kann einen laufenden Workflow in eine vollständig unabhängige Kopie aufspalten. Der aufgespaltene Workflow beginnt beim selben Schritt und mit demselben Status wie das Original, doch ab diesem Punkt laufen beide Workflows unabhängig voneinander weiter. Änderungen an einem Workflow wirken sich nicht auf den anderen aus.
Einen Workflow aufspalten
PHP API
Rufe Queuety::fork_workflow() mit der Workflow-ID auf. Die Methode gibt die neue Workflow-ID zurück:
use Queuety\Queuety;
$forked_id = Queuety::fork_workflow( $workflow_id );
CLI
wp queuety workflow fork <id>
| Option | Beschreibung |
|---|---|
<id> |
Workflow-ID für die Abzweigung (erforderlich) |
wp queuety workflow fork 42
# Success: Workflow #42 forked. New workflow ID: 43.
So funktioniert es
Beim Aufspalten eines Workflows geschieht Folgendes:
- Der ursprüngliche Workflow-Eintrag wird gesperrt und gelesen
- Ein neuer Workflow-Eintrag wird mit demselben Status, denselben Schrittdefinitionen und demselben aktuellen Schritt angelegt
- Der Name des neuen Workflows lautet
{original_name}_fork_{timestamp} - Der aktuelle Schritt wird für den aufgespaltenen Workflow eingereiht
- Für den ursprünglichen und den aufgespaltenen Workflow wird jeweils ein
workflow_forked-Protokollereignis aufgezeichnet - Der ursprüngliche Workflow wird normal weiterverarbeitet
Der aufgespaltene Workflow ist vollständig unabhängig. Er hat eine eigene Workflow-ID, eine eigene Statuskopie und eigene Aufträge in der Warteschlange. Ab dem Aufspaltungspunkt können sich die beiden Workflows frei unterschiedlich entwickeln.
Anwendungsfälle
Schritt-Handler im A/B-Test vergleichen
Spalte einen Workflow auf, um zwei verschiedene Implementierungen eines bevorstehenden Schritts zu testen:
// Original workflow will use the existing CallLLMHandler (GPT-4).
// Fork it to test with a different handler.
$forked_id = Queuety::fork_workflow( $workflow_id );
// Modify the forked workflow's state to use a different model.
// (Update the state via a custom step or direct DB update.)
Was-wäre-wenn-Analyse
Spalte einen Workflow an einem Entscheidungspunkt auf, um verschiedene Zweige auszuprobieren:
// Workflow is at step 3, about to process data.
// Fork it so we can try two different processing strategies.
$fork_a = Queuety::fork_workflow( $workflow_id );
$fork_b = Queuety::fork_workflow( $workflow_id );
Jede Kopie wird mit demselben Eingabestatus fortgesetzt, kann aber so geändert werden, dass sie einen anderen Pfad einschlägt.
Paralleles Experimentieren
Wenn ein Workflow einen Punkt erreicht, an dem du mehrere Ansätze parallel ausprobieren möchtest, spalte ihn für jeden Ansatz auf und vergleiche die Ergebnisse, sobald alle Kopien abgeschlossen sind.
Aufspaltungen nachverfolgen
Das Protokollereignis jedes Workflows enthält einen Verweis auf den jeweils anderen:
- Beim Original:
context.forked_workflow_idverweist auf den neuen Workflow - Bei der Kopie:
context.forked_from_workflow_idverweist auf das Original
Frage die Protokolle ab, um alle Aufspaltungen eines Workflows zu finden:
$logs = Queuety::logger()->for_workflow( $workflow_id );
foreach ( $logs as $entry ) {
if ( 'workflow_forked' === $entry['event'] ) {
$context = json_decode( $entry['context'] ?? '{}', true );
// $context['forked_workflow_id'] is the new workflow
}
}
Einschränkungen
- Der aufgespaltene Workflow übernimmt nicht den Ereignisprotokollverlauf des Originals. Er beginnt mit einem leeren Ereignisprotokoll.
- Beziehungen zu ausgeführten Workflows werden nicht dupliziert. Wenn für den ursprünglichen Workflow gerade ein Run-workflow ausgeführt wurde, erhält die Kopie keine davon.
- Die Aufspaltung ist eine Momentaufnahme des aktuellen Status. Laufende Aufträge des ursprünglichen Workflows werden nicht dupliziert.