‹ 博客列表

Spring AI Alibaba 100|Graph Core · 子图作为 CompiledGraph · 完整示例

// 1. 定义数据验证子图 public CompiledGraph createValidationGraph() { KeyStrategyFactory keyFactory = () -> { HashMap<Stri

Spring AI Alibaba 100|Graph Core · 子图作为 CompiledGraph · 完整示例
// 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(""));
png
png
  • 子图作为 NodeAction – 节点包装方式
  • 子图作为 StateGraph – 直接嵌入方式
  • 快速入门 – Graph 基础使用

本文整理自 Spring AI Alibaba 官方文档《子图作为 CompiledGraph》:https://java2ai.com/docs/frameworks/graph-core/examples/subgraph-as-compiledgraph

本文来自 https://aimock.cn/blog,站内重新编排。
内容仅供学习交流,转载请注明出处。