Lewati ke konten

Perjalanan Waktu Alur Kerja

Queuety dapat mengembalikan alur kerja ke langkah sebelumnya dan melanjutkan eksekusi dari titik tersebut. Ini berguna ketika suatu langkah menghasilkan output yang buruk, saat Anda ingin mencoba lagi dengan konfigurasi berbeda, atau ketika perlu memulihkan data yang rusak tanpa memulai ulang seluruh alur kerja.

Pengembalian alur kerja bergantung pada Log Peristiwa Alur Kerja. Log peristiwa harus memiliki data state_after untuk langkah target.

Mengembalikan alur kerja

PHP API

Panggil Queuety::rewind_workflow() dengan ID alur kerja dan indeks langkah yang menjadi tujuan pengembalian:

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

Parameter to_step adalah indeks berbasis 0 dari langkah yang status selesainya harus dipulihkan. Eksekusi dilanjutkan dari langkah berikutnya (to_step + 1).

CLI

Shell
wp queuety workflow rewind <id> <step>
Opsi Deskripsi
<id> ID workflow (wajib)
<step> Indeks langkah untuk dikembalikan, berbasis 0 (wajib)
Shell
wp queuety workflow rewind 42 1

Cara kerjanya

Saat Anda mengembalikan alur kerja ke langkah N:

  1. Log peristiwa diperiksa untuk nilai state_after yang tercatat setelah langkah N selesai
  2. Jika tidak ada snapshot, RuntimeException akan dilempar
  3. Baris alur kerja dikunci
  4. Status alur kerja diganti dengan snapshot, dengan mempertahankan semua kunci yang dicadangkan (_steps, _queue, _priority, dll.) dari baris alur kerja saat ini
  5. current_step diatur ke N + 1 dan status diatur ke running
  6. Kolom error_message dan failed_at apa pun akan dikosongkan
  7. Langkah pada indeks N + 1 dimasukkan ke antrean untuk diproses
  8. Peristiwa log workflow_rewound dicatat

Worker kemudian mengambil langkah yang masuk antrean dan alur kerja berlanjut seperti biasa dari titik tersebut.

Persyaratan

Pengembalian memerlukan data state_after di log peristiwa. Log peristiwa mencatatnya secara otomatis untuk setiap peristiwa step_completed. Jika log peristiwa telah dipangkas (melalui WorkflowEventLog::prune()) dan status untuk langkah target sudah tidak ada, pengembalian akan gagal.

Pastikan retensi log peristiwa mencakup periode yang mungkin Anda perlukan untuk melakukan pengembalian.

Kasus penggunaan

Memperbaiki handler langkah yang bermasalah

Jika handler langkah memiliki bug yang menghasilkan output keliru, Anda dapat menerapkan perbaikan lalu mengembalikan alur kerja:

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

Mencoba lagi dengan konfigurasi berbeda

Ketika langkah gagal karena faktor eksternal (API batas laju, kredensial tidak valid), perbaiki konfigurasi dan kembalikan alur kerja untuk menjalankannya lagi:

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

Memulihkan dari data yang buruk

Jika langkah sebelumnya memasukkan data yang buruk ke dalam status, kembalikan alur kerja ke snapshot yang diketahui baik:

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

Perbandingan dengan percobaan ulang

Aspek retry_workflow() rewind_workflow()
Melanjutkan dari Langkah yang gagal Langkah sebelumnya mana pun
Status Status alur kerja saat ini Dipulihkan dari state_after log peristiwa
Persyaratan Alur kerja berstatus failed Snapshot log peristiwa pada langkah target
Status setelahnya running running
Peristiwa log tidak ada workflow_rewound