Przejdź do treści

Rozgałęzianie przepływu pracy

Queuety może utworzyć w pełni niezależną kopię uruchomionego przepływu pracy. Rozgałęziony przepływ pracy rozpoczyna od tego samego kroku i z tym samym stanem co oryginał, ale od tej chwili oba przepływy działają niezależnie. Zmiany w jednym nie wpływają na drugi.

Rozgałęzianie przepływu pracy

PHP API

Wywołaj Queuety::fork_workflow(), podając identyfikator przepływu pracy. Zwróci ono identyfikator nowego przepływu:

PHP
use Queuety\Queuety;

$forked_id = Queuety::fork_workflow( $workflow_id );

CLI

Powłoka
wp queuety workflow fork <id>
Opcja Opis
<id> Identyfikator przepływu pracy do rozdzielenia (wymagany)
Powłoka
wp queuety workflow fork 42
# Success: Workflow #42 forked. New workflow ID: 43.

Jak to działa

Podczas rozgałęziania przepływu pracy:

  1. Wiersz oryginalnego przepływu pracy jest blokowany i odczytywany
  2. Wstawiany jest nowy wiersz przepływu pracy z tym samym stanem, definicjami kroków i bieżącym krokiem
  3. Nowy przepływ pracy otrzymuje nazwę {original_name}_fork_{timestamp}
  4. Bieżący krok jest dodawany do kolejki dla rozgałęzionego przepływu pracy
  5. W dzienniku zdarzeń obu przepływów pracy zapisywane jest zdarzenie workflow_forked
  6. Oryginalny przepływ pracy jest nadal przetwarzany normalnie

Rozgałęziony przepływ pracy jest całkowicie niezależny. Ma własny identyfikator, kopię stanu i wpisy w kolejce zadań. Od momentu rozgałęzienia każdy przepływ może swobodnie podążać inną ścieżką.

Zastosowania

Testy A/B procedur obsługi kroków

Rozgałęź przepływ pracy, aby przetestować dwie różne implementacje nadchodzącego kroku:

PHP
// 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.)

Analiza hipotetycznych scenariuszy

Rozgałęź przepływ pracy w punkcie decyzyjnym, aby sprawdzić różne gałęzie:

PHP
// 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 );

Każda kopia rozpoczyna od tych samych danych wejściowych, ale można ją zmodyfikować tak, aby podążała inną ścieżką.

Równoległe eksperymenty

Gdy przepływ pracy osiągnie punkt, w którym chcesz równolegle wypróbować kilka podejść, rozgałęź go osobno dla każdego z nich i porównaj wyniki po zakończeniu wszystkich kopii.

Śledzenie rozgałęzień

Zdarzenie w dzienniku każdego przepływu pracy zawiera odwołanie do drugiego:

  • W oryginalnym przepływie: context.forked_workflow_id wskazuje nowy przepływ pracy
  • W rozgałęzionym: context.forked_from_workflow_id wskazuje oryginalny przepływ pracy

Aby znaleźć wszystkie rozgałęzienia danego przepływu pracy, wyszukaj w dziennikach:

PHP
$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
    }
}

Ograniczenia

  • Rozgałęziony przepływ pracy nie dziedziczy historii dziennika zdarzeń oryginału. Zaczyna z pustym dziennikiem.
  • Powiązania między przepływami pracy a ich uruchomieniami nie są kopiowane. Jeśli w oryginalnym przepływie trwa uruchomienie run-workflow, rozgałęziony przepływ nie otrzymuje jego kopii.
  • Rozgałęzienie jest migawką bieżącego stanu. Zadania będące w toku w oryginalnym przepływie pracy nie są kopiowane.