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:
use Queuety\Queuety;
$forked_id = Queuety::fork_workflow( $workflow_id );
CLI
wp queuety workflow fork <id>
| Možnost | Opis |
|---|---|
<id> |
ID poteka dela za razcep (obvezno) |
wp queuety workflow fork 42
# Success: Workflow #42 forked. New workflow ID: 43.
Kako deluje
Pri razvejanju delovnega toka:
- Zapis izvirnega delovnega toka se zaklene in prebere
- Vstavi se nov zapis delovnega toka z enakim stanjem, definicijami korakov in trenutnim korakom
- Ime novega delovnega toka je
{original_name}_fork_{timestamp} - Trenutni korak se uvrsti v čakalno vrsto za razvejani delovni tok
- Na izvirnem in razvejanem delovnem toku se zabeleži dogodek
workflow_forkedv dnevniku - 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:
// 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:
// 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_idkaže na novi delovni tok - Pri razvejanem delovnem toku:
context.forked_from_workflow_idkaže na izvirnik
V dnevnikih poiščite vse razvejitve delovnega toka:
$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.