Preskoči na vsebino

Razvejanje delovnega toka

Queuety lahko delujoči delovni tok razveji v povsem neodvisno kopijo. Razvejani delovni tok se začne pri istem koraku in z enakim stanjem kot izvirnik, nato pa oba delovna toka napredujeta neodvisno. Spremembe enega ne vplivajo na drugega.

Razvejanje delovnega toka

PHP API

Pokličite Queuety::fork_workflow() z ID-jem delovnega toka. Vrne ID novega delovnega toka:

PHP
use Queuety\Queuety;

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

CLI

Lupina
wp queuety workflow fork <id>
Možnost Opis
<id> ID poteka dela za razcep (obvezno)
Lupina
wp queuety workflow fork 42
# Success: Workflow #42 forked. New workflow ID: 43.

Kako deluje

Pri razvejanju delovnega toka:

  1. Zapis izvirnega delovnega toka se zaklene in prebere
  2. Vstavi se nov zapis delovnega toka z enakim stanjem, definicijami korakov in trenutnim korakom
  3. Ime novega delovnega toka je {original_name}_fork_{timestamp}
  4. Trenutni korak se uvrsti v čakalno vrsto za razvejani delovni tok
  5. Na izvirnem in razvejanem delovnem toku se zabeleži dogodek workflow_forked v dnevniku
  6. Izvirni delovni tok nadaljuje običajno obdelavo

Razvejani delovni tok je povsem neodvisen. Ima svoj ID delovnega toka, svojo kopijo stanja in svoje vnose v čakalni vrsti opravil. Od točke razvejitve naprej se lahko vsak delovni tok prosto razvija po svoje.

Primeri uporabe

Testiranje obdelovalnikov korakov A/B

Razvejte delovni tok, da preizkusite dve različni izvedbi prihajajočega koraka:

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 scenarijev »kaj če«

Razvejte delovni tok na odločitveni točki in raziščite različne veje:

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

Vsaka razvejitev se nadaljuje z enakim vhodnim stanjem, vendar jo je mogoče prilagoditi za uporabo druge poti.

Vzporedno eksperimentiranje

Ko delovni tok doseže točko, na kateri želite vzporedno preizkusiti več pristopov, ga razvejte za vsak pristop in primerjajte rezultate, ko se vse razvejitve zaključijo.

Sledenje razvejitvam

Dogodek v dnevniku vsakega delovnega toka vsebuje sklic na drugega:

  • Pri izvirniku: context.forked_workflow_id kaže na novi delovni tok
  • Pri razvejanem delovnem toku: context.forked_from_workflow_id kaže na izvirnik

V dnevnikih poiščite vse razvejitve delovnega toka:

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

Omejitve

  • Razvejani delovni tok ne podeduje zgodovine dnevnika dogodkov izvirnika. Začne se s praznim dnevnikom dogodkov.
  • Povezave med izvajanji delovnih tokov se ne podvojijo. Če je izvirnik imel izvajanje povezanega delovnega toka, ga razvejani delovni tok ne dobi.
  • Razvejitev je posnetek trenutnega stanja. Opravila izvirnega delovnega toka, ki se že izvajajo, se ne podvojijo.