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:
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
wp queuety workflow rewind <id> <step>
| Opsi | Deskripsi |
|---|---|
<id> |
ID workflow (wajib) |
<step> |
Indeks langkah untuk dikembalikan, berbasis 0 (wajib) |
wp queuety workflow rewind 42 1
Cara kerjanya
Saat Anda mengembalikan alur kerja ke langkah N:
- Log peristiwa diperiksa untuk nilai
state_afteryang tercatat setelah langkah N selesai - Jika tidak ada snapshot,
RuntimeExceptionakan dilempar - Baris alur kerja dikunci
- Status alur kerja diganti dengan snapshot, dengan mempertahankan semua kunci yang dicadangkan (
_steps,_queue,_priority, dll.) dari baris alur kerja saat ini current_stepdiatur ke N + 1 danstatusdiatur kerunning- Kolom
error_messagedanfailed_atapa pun akan dikosongkan - Langkah pada indeks N + 1 dimasukkan ke antrean untuk diproses
- Peristiwa log
workflow_rewounddicatat
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:
// 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:
// 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:
// 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 |