Pular para o conteúdo

Ramificação de fluxos de trabalho

Queuety pode ramificar um fluxo de trabalho em execução e criar uma cópia totalmente independente. O fluxo de trabalho ramificado começa na mesma etapa e com o mesmo estado do original, mas ambos seguem de forma independente a partir desse ponto. As alterações em um não afetam o outro.

Ramificar um fluxo de trabalho

PHP API

Chame Queuety::fork_workflow() com o ID do fluxo de trabalho. Ele retorna o novo ID do fluxo de trabalho:

PHP
use Queuety\Queuety;

$forked_id = Queuety::fork_workflow( $workflow_id );

CLI

Shell
wp queuety workflow fork <id>
Opção Descrição
<id> ID do fluxo de trabalho a ramificar (obrigatório)
Shell
wp queuety workflow fork 42
# Success: Workflow #42 forked. New workflow ID: 43.

Como funciona

Ao ramificar um fluxo de trabalho:

  1. A linha do fluxo de trabalho original é bloqueada e lida
  2. Uma nova linha de fluxo de trabalho é inserida com o mesmo estado, as mesmas definições de etapas e a mesma etapa atual
  3. O nome do novo fluxo de trabalho é {original_name}_fork_{timestamp}
  4. A etapa atual é enfileirada para o fluxo de trabalho ramificado
  5. Um evento de registro workflow_forked é registrado nos fluxos de trabalho original e ramificado
  6. O fluxo de trabalho original continua sendo processado normalmente

O fluxo de trabalho ramificado é totalmente independente. Ele tem seu próprio ID, sua própria cópia do estado e suas próprias entradas na fila de trabalhos. A partir da ramificação, cada fluxo de trabalho pode seguir caminhos diferentes livremente.

Casos de uso

Testar manipuladores de etapas com testes A/B

Ramifique um fluxo de trabalho para testar duas implementações diferentes de uma próxima etapa:

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

Análise de cenários hipotéticos

Ramifique um fluxo de trabalho em um ponto de decisão para explorar caminhos diferentes:

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

Cada ramificação segue com o mesmo estado de entrada, mas pode ser modificada para percorrer caminhos diferentes.

Experimentação em paralelo

Quando um fluxo de trabalho chegar a um ponto em que você queira testar várias abordagens em paralelo, crie uma ramificação para cada abordagem e compare os resultados quando todas forem concluídas.

Acompanhar ramificações

O evento de registro de cada fluxo de trabalho inclui uma referência ao outro:

  • No original: context.forked_workflow_id aponta para o novo fluxo de trabalho
  • Na ramificação: context.forked_from_workflow_id aponta para o original

Consulte os registros para encontrar todas as ramificações de um fluxo de trabalho:

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

Limitações

  • O fluxo de trabalho ramificado não herda o histórico do registro de eventos do original. Ele começa com um registro de eventos vazio.
  • As relações de execução de fluxos de trabalho não são duplicadas. Se o fluxo de trabalho original tiver uma execução de outro fluxo em andamento, a ramificação não receberá uma cópia dela.
  • A ramificação é uma captura do estado atual. Os trabalhos em andamento do fluxo de trabalho original não são duplicados.