Bifurcación de flujos de trabajo
Queuety puede bifurcar un flujo de trabajo en ejecución para crear una copia totalmente independiente. El flujo bifurcado comienza en el mismo paso y con el mismo estado que el original, pero ambos avanzan por separado desde ese punto. Los cambios en uno no afectan al otro.
Bifurcar un flujo de trabajo
PHP API
Llama a Queuety::fork_workflow() con el ID del flujo de trabajo. Devuelve el ID del nuevo flujo:
use Queuety\Queuety;
$forked_id = Queuety::fork_workflow( $workflow_id );
CLI
wp queuety workflow fork <id>
| Opción | Descripción |
|---|---|
<id> |
ID del flujo de trabajo que se bifurcará (obligatorio) |
wp queuety workflow fork 42
# Success: Workflow #42 forked. New workflow ID: 43.
Cómo funciona
Al bifurcar un flujo de trabajo:
- Se bloquea y se lee la fila del flujo de trabajo original
- Se inserta una nueva fila con el mismo estado, las mismas definiciones de pasos y el paso actual
- El nuevo flujo de trabajo recibe el nombre
{original_name}_fork_{timestamp} - Se pone en cola el paso actual para el flujo bifurcado
- Se registra un evento de registro
workflow_forkeden ambos flujos de trabajo - El flujo de trabajo original continúa procesándose con normalidad
El flujo bifurcado es completamente independiente. Tiene su propio ID, su propia copia del estado y sus propias entradas en la cola de trabajos. A partir de la bifurcación, cada flujo puede seguir un rumbo distinto sin restricciones.
Casos de uso
Pruebas A/B de controladores de pasos
Bifurca un flujo de trabajo para probar dos implementaciones distintas de un próximo paso:
// 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álisis de escenarios hipotéticos
Bifurca un flujo de trabajo en un punto de decisión para explorar distintas ramas:
// 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 bifurcación parte del mismo estado de entrada, pero puede modificarse para seguir una ruta distinta.
Experimentación en paralelo
Cuando un flujo de trabajo llegue a un punto en el que quieras probar varios enfoques en paralelo, bifúrcalo para cada enfoque y compara los resultados cuando todas las bifurcaciones hayan terminado.
Seguimiento de bifurcaciones
El evento de registro de cada flujo incluye una referencia al otro:
- En el original:
context.forked_workflow_idapunta al nuevo flujo de trabajo - En la bifurcación:
context.forked_from_workflow_idapunta al original
Consulta los registros para encontrar todas las bifurcaciones de un flujo de trabajo:
$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
}
}
Limitaciones
- El flujo bifurcado no hereda el historial del registro de eventos del original. Empieza con un registro de eventos limpio.
- Las relaciones entre ejecuciones de flujos de trabajo no se duplican. Si el flujo original tenía una ejecución de flujo de trabajo en curso, la bifurcación no obtiene una copia.
- La bifurcación es una instantánea del estado actual. Los trabajos en curso del flujo original no se duplican.