Pāriet uz saturu

Darbplūsmas sazarojums

Queuety var sazarot darbojošos darbplūsmu pilnīgi neatkarīgā kopijā. Sazarotā darbplūsma sākas tajā pašā darbībā un ar tādu pašu stāvokli kā sākotnējā darbplūsma, bet pēc tam abas turpinās neatkarīgi. Izmaiņas vienā neietekmē otru.

Darbplūsmas sazarojums

PHP API

Izsauciet Queuety::fork_workflow(), norādot darbplūsmas ID. Tiek atgriezts jaunās darbplūsmas ID:

PHP
use Queuety\Queuety;

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

CLI

Apvalks
wp queuety workflow fork <id>
Opcija Apraksts
<id> Atzarojamās darbplūsmas ID (obligāts)
Apvalks
wp queuety workflow fork 42
# Success: Workflow #42 forked. New workflow ID: 43.

Kā tas darbojas

Sazarojot darbplūsmu:

  1. Sākotnējās darbplūsmas rinda tiek bloķēta un nolasīta
  2. Tiek ievietota jauna darbplūsmas rinda ar tādu pašu stāvokli, darbību definīcijām un pašreizējo darbību
  3. Jaunās darbplūsmas nosaukums ir {original_name}_fork_{timestamp}
  4. Sazarotajai darbplūsmai rindā tiek ievietota pašreizējā darbība
  5. Gan sākotnējā, gan sazarotajā darbplūsmā tiek reģistrēts workflow_forked žurnāla notikums
  6. Sākotnējā darbplūsma turpina darboties kā parasti

Sazarotā darbplūsma ir pilnīgi neatkarīga. Tai ir savs darbplūsmas ID, savas stāvokļa kopijas un savi darbu rindas ieraksti. Pēc sazarojuma katra darbplūsma var brīvi attīstīties atšķirīgi.

Lietojuma gadījumi

Darbību apstrādātāju A/B testēšana

Sazarojiet darbplūsmu, lai pārbaudītu divas dažādas gaidāmās darbības implementācijas:

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

Analīze “kas būtu, ja”

Sazarojiet darbplūsmu lēmuma pieņemšanas punktā, lai izpētītu dažādus atzarus:

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

Katrs sazarojums turpinās ar to pašu ievades stāvokli, taču to var mainīt, lai izvēlētos citu ceļu.

Paralēli eksperimenti

Kad darbplūsma sasniedz punktu, kur vēlaties paralēli izmēģināt vairākas pieejas, sazarojiet to katrai pieejai un salīdziniet rezultātus, kad visi sazarojumi ir pabeigti.

Sazarojumu uzskaite

Katras darbplūsmas žurnāla notikumā ir atsauce uz otru darbplūsmu:

  • Sākotnējā darbplūsmā: context.forked_workflow_id norāda uz jauno darbplūsmu
  • Sazarotajā darbplūsmā: context.forked_from_workflow_id norāda uz sākotnējo darbplūsmu

Vaicājiet žurnālus, lai atrastu visus darbplūsmas sazarojumus:

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

Ierobežojumi

  • Sazarotā darbplūsma nepārņem sākotnējās darbplūsmas notikumu žurnāla vēsturi. Tai ir jauns, tukšs notikumu žurnāls.
  • Darbplūsmas izpildes attiecības netiek dublētas. Ja sākotnējai darbplūsmai bija izpildē esoša darbplūsmas izpilde, sazarotā darbplūsma tās kopiju nesaņem.
  • Sazarojums ir pašreizējā stāvokļa momentuzņēmums. Sākotnējās darbplūsmas izpildē esošie darbi netiek dublēti.