> 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-zh/gong-zuo-liu/single-step-workflow.md).

# 单步骤工作流

### 创建工作流

工作流通常实现为一个继承自 Workflow 的类。该类可以定义任意数量的节点，每个节点都是一个类，该类扩展 `NeuronAI\Workflow\Node`.

首先，让我们创建 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 %}

下面是一个最简单的工作流：

```php
namespace App\Neuron;

use NeuronAI\Workflow\Workflow;

class MyAgent extends Workflow
{
    protected function nodes(): array
    {
        return [
            new 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 %}

Node 是一个可调用的类，用于处理传入事件，并返回另一个事件：

```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();
    }
}
```

这将向控制台打印“Hello World!”：

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

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

在这段代码中，我们：

{% stepper %}
{% step %}
定义一个类 `MyWorkflow` 继承自 `工作流`
{% endstep %}

{% step %}
定义一个实现了 `__invoke` 方法
{% endstep %}

{% step %}
步骤将事件作为输入，它是以下对象的实例： `StartEvent`
{% endstep %}

{% step %}
Node 向状态添加一个值并返回一个 `StopEvent`
{% endstep %}

{% step %}
我们创建一个……的实例 `MyWorkflow`
{% endstep %}

{% step %}
我们启动工作流并获取结果
{% endstep %}

{% step %}
在控制台中打印结果
{% endstep %}
{% endstepper %}

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

### Start 和 Stop 事件

`StartEvent` 和 `StopEvent` 是用于启动和停止工作流的特殊事件。接受 StartEvent 的节点会在你启动工作流时首先被触发。返回 StopEvent 会结束工作流的执行并返回最终状态，即使还有其他节点尚未执行。

### 事件的类型提示

事件的 $event 类型（例如 `StartEvent`) 会引导工作流的执行。节点的预期返回类型决定下一个会触发哪个节点。

事件类型会在编译时进行验证，因此如果例如你返回了一个从未被其他 Node 消费的事件，就会得到一条错误消息。

### 监控与调试

使用 Neuron 构建的许多应用程序会包含多个步骤以及对 LLM 的多次调用。随着这些应用程序变得越来越复杂，能够检查你的代理系统内部到底发生了什么就变得至关重要。实现这一点的最佳方式是使用 [Inspector](https://inspector.dev/).

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