工作流中的状态
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);