跳转到内容

工作流中的状态

LlamaIndex工作流除了是事件驱动的,也可以是有状态的。

更具体地说,状态可以定义为当前工作流执行的内部表示

工作流状态是类型化的,意味着它可以被定义为type,并可以按照该类型的属性进行访问和修改。

以下是一个示例:

type MyWorkflowState = {
previous_message: string,
};

然后你可以通过这种方式向工作流添加状态:

import { createWorkflow } from "@llamaindex/workflow-core";
import { createStatefulMiddleware } from "@llamaindex/workflow-core/middleware/state";
const { withState } = createStatefulMiddleware(
(state: MyWorkflowState) => state,
);
const workflow = withState(createWorkflow());

然后,在您的步骤处理逻辑中,您可以访问和修改状态属性:

import { workflowEvent } from "@llamaindex/workflow-core";
const startEvent = workflowEvent<{ userInput: string }>();
const stopEvent = workflowEvent<{ result: string }>();
workflow.handle([startEvent], async (context, { data }) => {
const { sendEvent, state } = context;
const { userInput } = data;
const previous_message = state.previous_message;
state.previous_message = userInput;
return stopEvent.with({ result: "Processed message: " + userInput + " previous message: " + previous_message });
});

在运行工作流之前,请记得使用状态初始化上下文对象:

const { stream, sendEvent } = workflow.createContext({
previous_message: "my initial previous message",
});
sendEvent(startEvent.with({ userInput: "Hello, how are you?" }));
const result = await stream.until(stopEvent).toArray();
console.log(result[result.length - 1].data);