Перейти до вмісту

Розгалуження процесу

Queuety може створити повністю незалежну копію запущеного процесу. Копія починається з того самого кроку й має той самий стан, що й вихідний процес, але від цього моменту вони виконуються незалежно. Зміни в одному не впливають на інший.

Розгалуження процесу

PHP API

Викличте Queuety::fork_workflow(), вказавши ID процесу. Метод повертає ID нового процесу:

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

Як це працює

Під час розгалуження процесу:

  1. Запис вихідного процесу блокується та зчитується
  2. Створюється новий запис процесу з тим самим станом, визначеннями кроків і поточним кроком
  3. Назва нового процесу — {original_name}_fork_{timestamp}
  4. Поточний крок ставиться в чергу для розгалуженого процесу
  5. В обох процесах записується подія журналу workflow_forked
  6. Вихідний процес продовжує виконуватися у звичайному режимі

Розгалужений процес повністю незалежний. Він має власний ID, копію стану та записи в черзі завдань. Після розгалуження кожен процес може вільно розвиватися окремо.

Варіанти використання

A/B-тестування обробників кроків

Створіть копію процесу, щоб перевірити два варіанти реалізації наступного кроку:

PHP
// 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.)

Аналіз сценаріїв «що, якби»

Створіть копію процесу в точці прийняття рішення, щоб перевірити різні гілки:

PHP
// 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 вказує на вихідний процес

Виконайте запит до журналів, щоб знайти всі копії процесу:

PHP
$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
    }
}

Обмеження

  • Розгалужений процес не успадковує історію журналу подій вихідного. Він починає з чистого журналу подій.
  • Зв'язки запуску процесів не дублюються. Якщо вихідний процес мав запущений дочірній процес, його копія не отримує власної копії дочірнього процесу.
  • Копія є знімком поточного стану. Завдання вихідного процесу, що вже виконуються, не дублюються.