Розгалуження процесу
Queuety може створити повністю незалежну копію запущеного процесу. Копія починається з того самого кроку й має той самий стан, що й вихідний процес, але від цього моменту вони виконуються незалежно. Зміни в одному не впливають на інший.
Розгалуження процесу
PHP API
Викличте Queuety::fork_workflow(), вказавши ID процесу. Метод повертає ID нового процесу:
use Queuety\Queuety;
$forked_id = Queuety::fork_workflow( $workflow_id );
CLI
wp queuety workflow fork <id>
| Опція | Опис |
|---|---|
<id> |
ID робочого процесу для розгалуження (обов’язково) |
wp queuety workflow fork 42
# Success: Workflow #42 forked. New workflow ID: 43.
Як це працює
Під час розгалуження процесу:
- Запис вихідного процесу блокується та зчитується
- Створюється новий запис процесу з тим самим станом, визначеннями кроків і поточним кроком
- Назва нового процесу —
{original_name}_fork_{timestamp} - Поточний крок ставиться в чергу для розгалуженого процесу
- В обох процесах записується подія журналу
workflow_forked - Вихідний процес продовжує виконуватися у звичайному режимі
Розгалужений процес повністю незалежний. Він має власний ID, копію стану та записи в черзі завдань. Після розгалуження кожен процес може вільно розвиватися окремо.
Варіанти використання
A/B-тестування обробників кроків
Створіть копію процесу, щоб перевірити два варіанти реалізації наступного кроку:
// Original workflow will use the existing CallLLMHandler (GPT-4).
// Fork it to test with a different handler.
$forked_id = Queuety::fork_workflow( $workflow_id );
// Modify the forked workflow's state to use a different model.
// (Update the state via a custom step or direct DB update.)
Аналіз сценаріїв «що, якби»
Створіть копію процесу в точці прийняття рішення, щоб перевірити різні гілки:
// Workflow is at step 3, about to process data.
// Fork it so we can try two different processing strategies.
$fork_a = Queuety::fork_workflow( $workflow_id );
$fork_b = Queuety::fork_workflow( $workflow_id );
Кожна копія продовжує роботу з тим самим вхідним станом, але її можна змінити, щоб обрати інший шлях.
Паралельні експерименти
Коли процес досягає точки, у якій потрібно паралельно перевірити кілька підходів, створіть копію для кожного з них і порівняйте результати після завершення всіх копій.
Відстеження розгалужень
Подія журналу кожного процесу містить посилання на інший:
- У вихідному процесі:
context.forked_workflow_idвказує на новий процес - У копії:
context.forked_from_workflow_idвказує на вихідний процес
Виконайте запит до журналів, щоб знайти всі копії процесу:
$logs = Queuety::logger()->for_workflow( $workflow_id );
foreach ( $logs as $entry ) {
if ( 'workflow_forked' === $entry['event'] ) {
$context = json_decode( $entry['context'] ?? '{}', true );
// $context['forked_workflow_id'] is the new workflow
}
}
Обмеження
- Розгалужений процес не успадковує історію журналу подій вихідного. Він починає з чистого журналу подій.
- Зв'язки запуску процесів не дублюються. Якщо вихідний процес мав запущений дочірній процес, його копія не отримує власної копії дочірнього процесу.
- Копія є знімком поточного стану. Завдання вихідного процесу, що вже виконуються, не дублюються.