子图作为节点操作
在 Spring AI Alibaba Graph 中,可以将一个完整的 Graph 作为另一个 Graph 的节点,实现工作流的模块化设计。
概念
将子图作为 NodeAction 使用,可以:
- 模块化: 将复杂工作流拆分为可重用的子模块
- 封装: 隐藏子图的内部实现细节
- 组合: 构建层次化的工作流结构
基本示例
定义子图
定义子图查看完整代码
import com.alibaba.cloud.ai.graph.CompiledGraph;
import com.alibaba.cloud.ai.graph.KeyStrategy;
import com.alibaba.cloud.ai.graph.KeyStrategyFactory;
import com.alibaba.cloud.ai.graph.StateGraph;
import com.alibaba.cloud.ai.graph.exception.GraphStateException;
import com.alibaba.cloud.ai.graph.state.strategy.ReplaceStrategy;
import java.util.HashMap;
import java.util.Map;
import static com.alibaba.cloud.ai.graph.StateGraph.END;
import static com.alibaba.cloud.ai.graph.StateGraph.START;
import static com.alibaba.cloud.ai.graph.action.AsyncNodeAction.node_async;
/**
* 定义子图
*/
public static CompiledGraph createSubGraph(KeyStrategyFactory keyStrategyFactory) throws GraphStateException {
StateGraph subGraph = new StateGraph(keyStrategyFactory)
.addNode("substep1", node_async(state -> {
String input = (String) state.value("input").orElse("");
return Map.of("result", "SubStep1:" + input);
}))
.addNode("substep2", node_async(state -> {
String prev = (String) state.value("result").orElse("");
return Map.of("result", prev + "->SubStep2");
}))
.addEdge(START, "substep1")
.addEdge("substep1", "substep2")
.addEdge("substep2", END);
return subGraph.compile();
}