Podróż workflow w czasie
Queuety może cofnąć workflow do wcześniejszego kroku i wznowić wykonanie od tego miejsca. Przydaje się to, gdy krok wygenerował nieprawidłowe dane wyjściowe, gdy chcesz ponowić próbę z inną konfiguracją lub gdy trzeba odzyskać dane po ich uszkodzeniu bez ponownego uruchamiania całego workflow.
Cofanie opiera się na Dzienniku zdarzeń workflow. Dziennik zdarzeń musi zawierać dane state_after dla kroku docelowego.
Cofanie workflow
PHP API
Wywołaj Queuety::rewind_workflow(), podając identyfikator workflow i indeks kroku, do którego chcesz cofnąć wykonanie:
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 to indeks liczony od zera kroku, którego ukończony stan ma zostać przywrócony. Wykonywanie jest wznawiane od następnego kroku (to_step + 1).
CLI
wp queuety workflow rewind <id> <step>
| Opcja | Opis |
|---|---|
<id> |
Identyfikator przepływu pracy (wymagany) |
<step> |
Indeks kroku, do którego należy cofnąć, liczony od 0 (wymagany) |
wp queuety workflow rewind 42 1
Jak to działa
Gdy cofasz workflow do kroku N:
- W dzienniku zdarzeń wyszukiwana jest wartość
state_afterzarejestrowana po zakończeniu kroku N - Jeśli nie ma migawki, zgłaszany jest
RuntimeException - Wiersz przepływu pracy zostaje zablokowany
- Stan przepływu pracy zostaje zastąpiony migawką, z zachowaniem wszystkich zarezerwowanych kluczy (
_steps,_queue,_priorityitd.) z bieżącego wiersza przepływu pracy current_stepzostaje ustawione na N + 1, astatusnarunning- Pola
error_messageifailed_atzostają wyczyszczone - Krok o indeksie N + 1 zostaje umieszczony w kolejce do przetworzenia
- Rejestrowane jest zdarzenie dziennika
workflow_rewound
Następnie proces roboczy pobiera umieszczony w kolejce krok i przepływ pracy jest kontynuowany od tego momentu w zwykły sposób.
Wymagania
Cofnięcie wymaga danych state_after w dzienniku zdarzeń. Dziennik zdarzeń rejestruje je automatycznie dla każdego zdarzenia step_completed. Jeśli dziennik zdarzeń został przycięty (za pomocą WorkflowEventLog::prune()), a stan docelowego kroku już nie istnieje, cofnięcie się nie powiedzie.
Upewnij się, że okres przechowywania dziennika zdarzeń obejmuje czas, do którego możesz chcieć cofnąć przepływ pracy.
Zastosowania
Naprawa wadliwego obsługiwania kroku
Jeśli obsługa kroku zawierała błąd powodujący nieprawidłowe dane wyjściowe, możesz wdrożyć poprawkę i cofnąć przepływ pracy:
// 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 );
Ponowienie z inną konfiguracją
Gdy krok nie powiódł się z przyczyn zewnętrznych (API limit zapytań, nieprawidłowe dane uwierzytelniające), popraw konfigurację i cofnij przepływ pracy, aby uruchomić go ponownie:
// 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 );
Odzyskiwanie po błędnych danych
Jeśli wcześniejszy krok wprowadził błędne dane do stanu, cofnij przepływ pracy do migawki ze znanym prawidłowym stanem:
// 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 );
Porównanie z ponowieniem
| Aspekt | retry_workflow() |
rewind_workflow() |
|---|---|---|
| Wznawia od | Nieudanego kroku | Dowolnego wcześniejszego kroku |
| Stan | Bieżący stan przepływu pracy | Przywrócony z migawki dziennika zdarzeń state_after |
| Wymagania | Przepływ pracy ma status failed |
Migawka dziennika zdarzeń na docelowym kroku |
| Status po operacji | running |
running |
| Zdarzenie w dzienniku | brak | workflow_rewound |