Skip to content

SharedState

What(是什么)

SharedState 是工作流运行期间的共享键值存储,供各 WorkflowUnit 通过 inputAdapter / outputAdapter 读写,供 ControlFlow(尤其 Router)读取路由与完成标记。

typescript
interface SharedState {
  get<T>(key: string): T | undefined;
  set(key: string, value: unknown): void;
  snapshot(): Record<string, unknown>;
  // InMemory 实现支持 restore
}

常见键约定:input.* 初始输入、output.<unitId> 单元产出、router.selectedKey 路由结果、hitl.* 人工审批状态。

Who(谁在用)

  • 每个 Unit 的 adapter 作者
  • RouterFlow / DAGFlow 等 ControlFlow 实现
  • Checkpoint 恢复逻辑(序列化 snapshot)

Why(为什么需要)

若没有 SharedState后果
Unit 之间传参靠全局变量并发 Parallel 时数据竞争
Router 无统一路由键分支逻辑退回 Prompt
无法快照恢复resume 后状态不一致

State 是 Unit 间契约的载体,不是数据库替代品——长期记忆走 Layer4 Context

How(怎么用)

写入输出:

typescript
outputAdapter: (output, state) => {
  state.set('output.parser', output.content);
  state.set('router.selectedKey', output.metadata.routeKey);
},

读取输入:

typescript
inputAdapter: (state, context) => ({
  task: state.get<string>('input.text') ?? '',
  prior: state.get('output.classifier'),
}),

运行结果: WorkflowResult.state 返回快照,HTTP 客户端查 result.state['output.<unitId>']

仓库现状

状态
InMemorySharedStatesrc/core/shared-state.ts
snapshot / restore✅ 配合 Checkpoint
外部持久化 State🟡 通过 Checkpoint 间接恢复
强类型键表⬜ 约定在文档与 YAML,非 Schema 强制

相关链接

若你只记住一件事

Unit 之间只通过 State 对话;路由键写进 State,别写进隐藏全局。

MIT Licensed