Přejít k obsahu

Cestování workflow časem

Queuety může vrátit workflow k předchozímu kroku a obnovit vykonávání od tohoto místa. Hodí se, když krok vytvořil chybný výstup, když jej chcete zopakovat s jinou konfigurací nebo když potřebujete obnovit stav po poškození dat, aniž byste museli restartovat celé workflow.

Vrácení zpět závisí na protokolu událostí workflow. Pro cílový krok musí protokol událostí obsahovat data state_after.

Vrácení workflow zpět

PHP API

Zavolejte Queuety::rewind_workflow() s ID workflow a indexem kroku, ke kterému se chcete vrátit:

PHP
use Queuety\Queuety;

// Rewind workflow 42 to step 1.
// The state is restored to the snapshot taken after step 1 completed,
// and step 2 is enqueued for re-execution.
Queuety::rewind_workflow( $workflow_id, to_step: 1 );

Parametr to_step je index kroku číslovaný od nuly, jehož dokončený stav se má obnovit. Vykonávání pokračuje následujícím krokem (to_step + 1).

CLI

Shell
wp queuety workflow rewind <id> <step>
Možnost Popis
<id> ID pracovního postupu (povinné)
<step> Index kroku, ke kterému se vrátit, od 0 (povinné)
Shell
wp queuety workflow rewind 42 1

Jak to funguje

Když vrátíte workflow ke kroku N:

  1. V protokolu událostí se vyhledá hodnota state_after zaznamenaná po dokončení kroku N
  2. Pokud žádný snímek stavu neexistuje, vyvolá se RuntimeException
  3. Řádek workflow se uzamkne
  4. Stav workflow se nahradí snímkem stavu a zachovají se všechny vyhrazené klíče (_steps, _queue, _priority atd.) z aktuálního řádku workflow
  5. Nastaví se current_step na N + 1 a status na running
  6. Odstraní se všechna pole error_message a failed_at
  7. Krok s indexem N + 1 se zařadí do fronty ke zpracování
  8. Zaznamená se událost protokolu workflow_rewound

Pracovní proces poté převezme zařazený krok a workflow od tohoto bodu pokračuje jako obvykle.

Požadavky

Vrácení zpět vyžaduje data state_after v protokolu událostí. Pro každou událost step_completed se tato data zaznamenávají automaticky. Pokud byl protokol událostí pročištěn (pomocí WorkflowEventLog::prune()) a stav cílového kroku už neexistuje, vrácení zpět selže.

Zajistěte, aby doba uchovávání protokolu událostí pokrývala období, ke kterému se možná budete chtít vrátit.

Příklady použití

Oprava chybného obslužného programu kroku

Pokud měl obslužný program kroku chybu, která způsobila nesprávný výstup, můžete nasadit opravu a vrátit workflow zpět:

PHP
// Step 2 (CallLLMHandler) produced garbled output due to a prompt bug.
// After fixing CallLLMHandler, rewind to step 1 so step 2 runs again
// with the corrected handler.
Queuety::rewind_workflow( $workflow_id, to_step: 1 );

Opakování s jinou konfigurací

Pokud krok selhal kvůli vnějším vlivům (omezení rychlosti API, nesprávné přihlašovací údaje), opravte konfiguraci a spusťte jej znovu vrácením workflow:

PHP
// Step 3 failed because the API key was expired.
// After updating the key, rewind to step 2 so step 3 retries.
Queuety::rewind_workflow( $workflow_id, to_step: 2 );

Obnovení po chybných datech

Pokud dřívější krok vložil do stavu chybná data, vraťte se ke známému správnému snímku stavu:

PHP
// Step 0 fetched correct data, but step 1 corrupted it.
// Rewind to step 0 to restore the good state and re-run step 1.
Queuety::rewind_workflow( $workflow_id, to_step: 0 );

Porovnání s opakováním

Aspekt retry_workflow() rewind_workflow()
Pokračuje od Selhaného kroku Libovolného předchozího kroku
Stav Aktuální stav workflow Obnoven z state_after protokolu událostí
Vyžaduje Workflow má stav failed Snímek stavu cílového kroku v protokolu událostí
Stav poté running running
Událost v protokolu žádná workflow_rewound