> For the complete documentation index, see [llms.txt](https://docs.neuron-ai.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.neuron-ai.dev/neuron-v3-es/flujo-de-trabajo/multi-step-workflow.md).

# Flujo de trabajo de varios pasos

Se crean varios pasos definiendo eventos personalizados que pueden ser emitidos por nodos y desencadenar otros nodos. Definamos un flujo de trabajo simple de 3 pasos.

### Eventos personalizados

Definimos dos eventos personalizados, `FirstEvent` y `SecondEvent`. Estas clases pueden tener cualquier nombre y propiedades, pero deben implementar `Event`:

{% tabs %}
{% tab title="Unix" %}

```bash
vendor/bin/neuron make:event App\\Neuron\\FirstEvent
```

{% endtab %}

{% tab title="Windows" %}

```powershell
.\vendor\bin\neuron make:event App\Neuron\FirstEvent
```

{% endtab %}
{% endtabs %}

```php
namespace App\Neuron;

class FirstEvent implements Event 
{
    public function __construct(protected string $firstMsg){}
}

class SecondEvent implements Event 
{
    public function __construct(protected string $secondMsg){}
}
```

### Definición del flujo de trabajo

Ahora definimos el flujo de trabajo en sí. Lo hacemos definiendo los tipos de entrada y salida en cada nodo. Aquí está la implementación mínima de los nodos para el propósito de esta demo.

<figure><img src="/files/b4df062b73ab92ff4b6cf5c15dc2e0a6b8a1e5de" alt=""><figcaption></figcaption></figure>

#### InitialNode

{% tabs %}
{% tab title="Unix" %}

```bash
vendor/bin/neuron make:node App\\Neuron\\InitialNode
```

{% endtab %}

{% tab title="Windows" %}

```powershell
.\vendor\bin\neuron make:node App\Neuron\InitialNode
```

{% endtab %}
{% endtabs %}

```php
namespace App\Neuron;

use NeuronAI\Workflow\Node;
use NeuronAI\Workflow\StartEvent;
use App\Neuron\FirstEvent;

class InitialNode extends Node
{
    /**
     * Obtiene el "StartEvent" y devuelve "FirstEvent"
     */
    public function __invoke(StartEvent $event, WorkflowState $state): FirstEvent
    {
        echo "\n- Manejo de StartEvent";
        
        return new FirstEvent("InitialNode complete");
    }
}
```

#### NodeOne

{% tabs %}
{% tab title="Unix" %}

```bash
vendor/bin/neuron make:node App\\Neuron\\NodeOne
```

{% endtab %}

{% tab title="Windows" %}

```powershell
.\vendor\bin\neuron make:node App\Neuron\NodeOne
```

{% endtab %}
{% endtabs %}

```php
class NodeOne extends Node
{
    /**
     * Toma "FirstEvent" como entrada y devuelve "SecondEvent"
     */
    public function __invoke(FirstEvent $event, WorkflowState $state): SecondEvent
    {
        echo "\n- ".$event->firstMsg;
        
        return new SecondEvent("NodeOne complete");
    }
}
```

#### NodeTwo

{% tabs %}
{% tab title="Unix" %}

```bash
vendor/bin/neuron make:node App\\Neuron\\NodeTwo
```

{% endtab %}

{% tab title="Windows" %}

```powershell
.\vendor\bin\neuron make:node App\Neuron\NodeTwo
```

{% endtab %}
{% endtabs %}

```php
class NodeTwo extends Node
{
    /**
     * Toma "SecondEvent" como entrada y devuelve "StopEvent"
     */
    public function __invoke(SecondEvent $event, WorkflowState $state): StopEvent
    {
        echo "\n- ".$event->secondMsg;
        
        echo "\n- NodeTwo complete";
        
        return new StopEvent();
    }
}
```

Defina el flujo de trabajo adjuntando los nodos:

```php
use NeuronAI\Workflow\Workflow;

$handler = Workflow::make()
    ->addNodes([
        new InitialNode(),
        new NodeOne(),
        new NodeTwo(),
    ])
    ->init();

/*
 * Ejecute el flujo de trabajo
 */
$handler->run();
```

La salida completa será:

```
- Manejo de StartEvent
- InitialNode complete
- NodeOne complete
- NodeTwo complete
```

Por supuesto, todavía no tiene mucho sentido un flujo de trabajo si simplemente lo recorres de principio a fin. Hagamos algo de ramificación y bucles.

### Monitoreo y depuración

Muchas de las aplicaciones que construyas con Neuron contendrán múltiples pasos con múltiples invocaciones de llamadas a LLM. A medida que estas aplicaciones se vuelven cada vez más complejas, se vuelve crucial poder inspeccionar exactamente qué está ocurriendo dentro de tu sistema agéntico. La mejor manera de hacerlo es con [Inspector](https://inspector.dev/).

{% embed url="<https://docs.inspector.dev/guides/neuron-ai>" %}
