For the complete documentation index, see llms.txt. This page is also available as Markdown.

管理状态

了解如何在工作流中传递数据

一般来说,工作流的目的是将初始状态作为输入,使节点能够在执行过程中操作该状态,并在工作流完成时返回最终状态。

工作流输入/输出

工作流本身的最终返回值是工作流状态的一个实例。因此,如果你需要收集工作流执行的结果,节点必须能够在工作流结束前读写状态,并将最终状态返回给父脚本。

你也可以为工作流提供一个初始状态,以传入输入值。

// 1. 提供一个初始状态作为工作流输入,以传入一些数据
$workflow = Workflow::make(state: new WorkflowState(['query' => 'Hi!']))
        ->addNode(new InitialNode())
        ->addNode(...)
        ->addNode(...);

// 2. 执行工作流并获取最终状态
$finalState = $workflow->init()->run();

// 3. 使用最终状态数据
echo $finalState->get('message');

在节点中使用状态

到目前为止,在我们的示例中,我们一直通过自定义事件的属性在节点之间传递数据。这是一种强大的数据传递方式,但也有其局限性。例如,如果你想在没有直接连接的步骤之间传递数据,就需要让数据经过中间的所有节点。这会使你的代码更难阅读和维护。

为此,我们提供了 WorkflowState 对象可供工作流中的每个节点使用。要使用它,工作流会将 WorkflowState 实例注入为节点的第二个参数。

自定义状态

默认的 WorkflowState 类是在工作流执行期间用于携带数据的容器。创建一个自定义状态类可能会很有用,它可以定义严格类型的属性,从而更好地支持节点中的代码补全、数据验证以及一般性调试。

创建一个 CustomState 类来引入自定义属性:

节点可以接受一个 CustomState 而不是默认的 WorkflowState:

在工作流创建时注入 CustomState

最后更新于