Przejdź do treści

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:

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

Powłoka
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)
Powłoka
wp queuety workflow rewind 42 1

Jak to działa

Gdy cofasz workflow do kroku N:

  1. W dzienniku zdarzeń wyszukiwana jest wartość state_after zarejestrowana po zakończeniu kroku N
  2. Jeśli nie ma migawki, zgłaszany jest RuntimeException
  3. Wiersz przepływu pracy zostaje zablokowany
  4. Stan przepływu pracy zostaje zastąpiony migawką, z zachowaniem wszystkich zarezerwowanych kluczy (_steps, _queue, _priority itd.) z bieżącego wiersza przepływu pracy
  5. current_step zostaje ustawione na N + 1, a status na running
  6. Pola error_message i failed_at zostają wyczyszczone
  7. Krok o indeksie N + 1 zostaje umieszczony w kolejce do przetworzenia
  8. 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:

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

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:

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

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:

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

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