Tijdreizen in workflows
Met Queuety kun je een workflow terugzetten naar een eerdere stap en de uitvoering vanaf dat punt hervatten. Dit is handig wanneer een stap onjuiste output heeft opgeleverd, wanneer je het opnieuw wilt proberen met een andere configuratie of wanneer je corrupte gegevens wilt herstellen zonder de hele workflow opnieuw te starten.
Terugzetten is afhankelijk van het Workflow Event Log. Het gebeurtenislogboek moet state_after-gegevens voor de doelstap bevatten.
Een workflow terugzetten
PHP API
Roep Queuety::rewind_workflow() aan met de workflow-ID en de index van de stap waarnaar je wilt terugzetten:
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 );
De parameter to_step is de index vanaf nul van de stap waarvan de voltooide status moet worden hersteld. De uitvoering wordt hervat vanaf de volgende stap (to_step + 1).
CLI
wp queuety workflow rewind <id> <step>
| Optie | Beschrijving |
|---|---|
<id> |
Workflow-ID (vereist) |
<step> |
Stapindex om naar terug te zetten, vanaf 0 geteld (vereist) |
wp queuety workflow rewind 42 1
Werking
Wanneer je een workflow terugzet naar stap N:
- Het gebeurtenislogboek wordt doorzocht op de waarde
state_afterdie is vastgelegd nadat stap N was voltooid - Als er geen snapshot bestaat, wordt een
RuntimeExceptiongegenereerd - De workflowregel wordt vergrendeld
- De workflowstatus wordt vervangen door de snapshot, waarbij alle gereserveerde sleutels (
_steps,_queue,_priority, enz.) uit de huidige workflowregel behouden blijven current_stepwordt ingesteld op N + 1 enstatuswordt ingesteld oprunning- Alle velden
error_messageenfailed_atworden gewist - De stap op index N + 1 wordt in de wachtrij geplaatst voor verwerking
- Er wordt een
workflow_rewound-loggebeurtenis vastgelegd
De worker verwerkt vervolgens de stap die in de wachtrij is geplaatst en de workflow gaat vanaf dat punt verder zoals gebruikelijk.
Vereisten
Voor terugzetten zijn state_after-gegevens in het gebeurtenislogboek nodig. Het gebeurtenislogboek legt deze automatisch vast voor elke step_completed-gebeurtenis. Als het gebeurtenislogboek is opgeschoond (via WorkflowEventLog::prune()) en de status voor de doelstap niet meer bestaat, mislukt het terugzetten.
Zorg ervoor dat de bewaartermijn van je gebeurtenislogboek lang genoeg is voor de periode waarnaar je mogelijk wilt terugzetten.
Toepassingen
Een foutieve staphandler herstellen
Als een staphandler een fout bevatte waardoor onjuiste output werd geproduceerd, kun je de fix implementeren en de workflow terugzetten:
// 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 );
Opnieuw proberen met een andere configuratie
Als een stap door externe factoren is mislukt (API-limiet, onjuiste inloggegevens), herstel je de configuratie en zet je de workflow terug om de stap opnieuw uit te voeren:
// 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 );
Onjuiste gegevens herstellen
Als een eerdere stap onjuiste gegevens aan de status heeft toegevoegd, zet je de workflow terug naar een snapshot waarvan je weet dat die goed is:
// 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 );
Vergelijking met opnieuw proberen
| Aspect | retry_workflow() |
rewind_workflow() |
|---|---|---|
| Hervat vanaf | De mislukte stap | Elke eerdere stap |
| Status | Huidige workflowstatus | Hersteld uit het gebeurtenislogboek state_after |
| Vereist | Workflow heeft de status failed |
Snapshot van de doelstap in het gebeurtenislogboek |
| Status na afloop | running |
running |
| Loggebeurtenis | geen | workflow_rewound |