> 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/single-step-workflow.md).

# Flujo de trabajo de un solo paso

### Crear un flujo de trabajo

Un flujo de trabajo suele implementarse como una clase que hereda de Workflow. La clase puede definir un número arbitrario de nodos, cada uno de los cuales es una clase que extens `NeuronAI\Workflow\Node`.

Primero, creemos la clase MyWorkflow:

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

```bash
vendor/bin/neuron make:workflow App\\Neuron\\MyAgent
```

{% endtab %}

{% tab title="Windows" %}

```powershell
.\vendor\bin\neuron make:workflow App\Neuron\MyAgent
```

{% endtab %}
{% endtabs %}

Aquí está el flujo de trabajo más simple posible:

```php
namespace App\Neuron;

use NeuronAI\Workflow\Workflow;

class MyAgent extends Workflow
{
    protected function nodes(): array
    {
        return [
            new InitialNode(),
        ];
    }
}
```

Ahora creemos el nodo:

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

Un Node es una clase invocable para manejar un evento entrante y devolver otro evento:

```php
namespace App\Neuron;

use NeuronAI\Workflow\Node;
use NeuronAI\Workflow\Events\StartEvent;
use NeuronAI\Workflow\Events\StopEvent;
use NeuronAI\\Workflow\\WorkflowState;

class InitialNode extends Node
{
    public function __invoke(StartEvent $event, WorkflowState $state): StopEvent
    {
        $state->set('answer', 'Hello World!');
        
        return new StopEvent();
    }
}
```

Esto imprimirá "Hello World!" en la consola:

```php
$finalState = MyWorkflow::make()->init()->run();

echo $finalState->get('answer'); // Print Hello World!
```

En este código:

{% stepper %}
{% step %}
Definimos una clase `MyWorkflow` que hereda de `Flujo de trabajo`
{% endstep %}

{% step %}
Definimos un Node que implementa el `__invoke` método
{% endstep %}

{% step %}
El paso toma un evento como entrada, que es una instancia de `StartEvent`
{% endstep %}

{% step %}
El Node agrega un valor al estado y devuelve un `StopEvent`
{% endstep %}

{% step %}
Creamos una instancia de `MyWorkflow`
{% endstep %}

{% step %}
Iniciamos el flujo de trabajo y obtenemos el resultado
{% endstep %}

{% step %}
Imprimimos el resultado en la consola
{% endstep %}
{% endstepper %}

<figure><img src="/files/50da6860e3c806f737580f86db38cc18de1a0d91" alt=""><figcaption></figcaption></figure>

### Eventos de inicio y de parada

`StartEvent` y `StopEvent` son eventos especiales que se usan para iniciar y detener un flujo de trabajo. El nodo que acepta un StartEvent se activará primero cuando inicies el flujo de trabajo. Devolver un StopEvent finalizará la ejecución del flujo de trabajo y devolverá el estado final, incluso si otros nodos permanecen sin ejecutarse.

### Anotación de tipo para eventos

Los tipos de $event (p. ej. `StartEvent`) guían la ejecución del Workflow. Los tipos de retorno esperados de un nodo determinan qué nodo se activará a continuación.

Los tipos de evento se validan en tiempo de compilación, así que recibirás un mensaje de error si, por ejemplo, devuelves un evento que nunca es consumido por otro Node.

### Monitorización y depuración

Muchas de las aplicaciones que construyas con Neuron contendrán varios pasos con múltiples invocaciones de llamadas a LLM. A medida que estas aplicaciones se vuelven cada vez más complejas, resulta 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>" %}
