// 1. 定义数据验证子图
public CompiledGraph createValidationGraph() {
KeyStrategyFactory keyFactory = () -> {
HashMap<String, KeyStrategy> strategies = new HashMap<>();
strategies.put("data", new ReplaceStrategy());
strategies.put("isValid", new ReplaceStrategy());
return strategies;
};
StateGraph graph = new StateGraph(keyFactory)
.addNode("validate", nodeasync(state -> {
String data = (String) state.value("data").orElse("");
boolean valid = data != null && !data.isEmpty();
return Map.of("isValid", valid);
}))
.addEdge(StateGraph.START, "validate")
.addEdge("validate", StateGraph.END);
return graph.compile();
}
// 2. 定义数据转换子图
public CompiledGraph createTransformGraph() {
KeyStrategyFactory keyFactory = () -> {
HashMap<String, KeyStrategy> strategies = new HashMap<>();
strategies.put("data", new ReplaceStrategy());
strategies.put("transformed", new ReplaceStrategy());
return strategies;
};
StateGraph graph = new StateGraph(keyFactory)
.addNode("transform", nodeasync(state -> {
String data = (String) state.value("data").orElse("");
return Map.of("transformed", data.toUpperCase());
}))
.addEdge(StateGraph.START, "transform")
.addEdge("transform", StateGraph.END);
return graph.compile();
}
// 3. 组合使用
CompiledGraph validationGraph = createValidationGraph();
CompiledGraph transformGraph = createTransformGraph();
StateGraph mainGraph = new StateGraph(keyFactory)
.addNode("validate", nodeasync(state -> {
String data = (String) state.value("input").orElse("");
OverAllState result = validationGraph.invoke(Map.of("data", data));
return Map.of("isValid", result.value("isValid").orElse(false));
}))
.addNode("transform", nodeasync(state -> {
String data = (String) state.value("input").orElse("");
OverAllState result = transformGraph.invoke(Map.of("data", data));
return Map.of("output", result.value("transformed").orElse(""));
}))
.addEdge(StateGraph.START, "validate")
.addConditionalEdges("validate",
edgeasync(state -> {
Boolean valid = (Boolean) state.value("isValid").orElse(false);
return valid ? "continue" : "error";
}),
Map.of("continue", "transform", "error", StateGraph.END))
.addEdge("transform", StateGraph.END);
CompiledGraph main = mainGraph.compile();
// 执行
OverAllState result = main.invoke(Map.of("input", "test data"));
System.out.println("Output: " + result.value("output").orElse(""));


- 子图作为 NodeAction – 节点包装方式
- 子图作为 StateGraph – 直接嵌入方式
- 快速入门 – Graph 基础使用
本文整理自 Spring AI Alibaba 官方文档《子图作为 CompiledGraph》:https://java2ai.com/docs/frameworks/graph-core/examples/subgraph-as-compiledgraph

AI项目博客






