Gå til indhold

Forgrening af workflows

Queuety kan forgrene et kørende workflow til en fuldstændig uafhængig kopi. Det forgrenede workflow starter ved samme trin og med samme tilstand som originalen, men de to workflows fortsætter uafhængigt derfra. Ændringer i det ene påvirker ikke det andet.

Forgrening af et workflow

PHP API

Kald Queuety::fork_workflow() med workflow-ID'et. Den returnerer det nye workflow-ID:

PHP
use Queuety\Queuety;

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

CLI

Shell
wp queuety workflow fork <id>
Valgmulighed Beskrivelse
<id> Workflow-id, der skal forgrenes (påkrævet)
Shell
wp queuety workflow fork 42
# Success: Workflow #42 forked. New workflow ID: 43.

Sådan fungerer det

Når du forgrener et workflow:

  1. Den oprindelige workflowrække låses og læses
  2. En ny workflowrække indsættes med samme tilstand, trindefinitioner og aktuelle trin
  3. Det nye workflows navn er {original_name}_fork_{timestamp}
  4. Det aktuelle trin sættes i kø for det forgrenede workflow
  5. En workflow_forked-loghændelse registreres for både det oprindelige og det forgrenede workflow
  6. Det oprindelige workflow fortsætter som normalt

Det forgrenede workflow er helt uafhængigt. Det har sit eget workflow-ID, sin egen tilstandskopi og sine egne jobposter i køen. Fra forgreningspunktet kan workflowsene udvikle sig forskelligt.

Anvendelsesområder

A/B-test af trinhåndterere

Forgren et workflow for at teste to forskellige implementeringer af et kommende trin:

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

Hvad nu hvis-analyse

Forgren et workflow ved et beslutningspunkt for at afprøve forskellige grene:

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

Hver forgrening fortsætter med samme inputtilstand, men kan ændres til at følge en anden sti.

Parallelle eksperimenter

Når et workflow når et punkt, hvor du vil afprøve flere tilgange parallelt, skal du forgrene det for hver tilgang og sammenligne resultaterne, når alle forgreninger er fuldført.

Sporing af forgreninger

Loghændelsen for hvert workflow indeholder en henvisning til det andet:

  • På originalen peger context.forked_workflow_id på det nye workflow
  • På forgreningen peger context.forked_from_workflow_id på originalen

Forespørg i loggene for at finde alle forgreninger af et workflow:

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

Begrænsninger

  • Det forgrenede workflow overtager ikke hændelsesloghistorikken fra originalen. Det starter med en tom hændelseslog.
  • Relationer til run-workflows duplikeres ikke. Hvis det oprindelige workflow havde et kørende run-workflow, får forgreningen ikke en kopi af det.
  • Forgreningen er et øjebliksbillede af den aktuelle tilstand. Job, der er under behandling for det oprindelige workflow, duplikeres ikke.