AI项目博客
记录 AI 工程实践与大模型应用

Spring AI Alibaba 103|Graph Core · 子图作为 StateGraph · 完整示例

import com.alibaba.cloud.ai.graph.*;
import com.alibaba.cloud.ai.graph.state.strategy.*;
import java.util.*;
import static com.alibaba.cloud.ai.graph.action.AsyncNodeAction.nodeasync;
import static com.alibaba.cloud.ai.graph.action.AsyncEdgeAction.edgeasync;

// 数据验证子图
public StateGraph createValidationSubGraph() {
  KeyStrategyFactory keyFactory = () -> {
      HashMap<String, KeyStrategy> strategies = new HashMap<>();
      strategies.put("data", new ReplaceStrategy());
      strategies.put("isValid", new ReplaceStrategy());
      strategies.put("error", new ReplaceStrategy());
      return strategies;
  };

  return new StateGraph(keyFactory)
      .addNode("checkFormat", nodeasync(state -> {
          String data = (String) state.value("data").orElse("");
          boolean valid = data.matches("^[A-Za-z0-9]+$");
          return Map.of(
              "isValid", valid,
              "error", valid ? "" : "Invalid format"
          );
      }))
      .addEdge(StateGraph.START, "checkFormat")
      .addEdge("checkFormat", StateGraph.END);
}

// 数据转换子图
public StateGraph createTransformSubGraph() {
  KeyStrategyFactory keyFactory = () -> {
      HashMap<String, KeyStrategy> strategies = new HashMap<>();
      strategies.put("data", new ReplaceStrategy());
      strategies.put("transformed", new ReplaceStrategy());
      return strategies;
  };

  return new StateGraph(keyFactory)
      .addNode("uppercase", nodeasync(state -> {
          String data = (String) state.value("data").orElse("");
          return Map.of("transformed", data.toUpperCase());
      }))
      .addNode("addPrefix", nodeasync(state -> {
          String data = (String) state.value("transformed").orElse("");
          return Map.of("transformed", "PROC_" + data);
      }))
      .addEdge(StateGraph.START, "uppercase")
      .addEdge("uppercase", "addPrefix")
      .addEdge("addPrefix", StateGraph.END);
}

// 主处理流程
public StateGraph createMainGraph() {
  KeyStrategyFactory keyFactory = () -> {
      HashMap<String, KeyStrategy> strategies = new HashMap<>();
      strategies.put("data", new ReplaceStrategy());
      strategies.put("isValid", new ReplaceStrategy());
      strategies.put("transformed", new ReplaceStrategy());
      strategies.put("result", new ReplaceStrategy());
      return strategies;
  };

  StateGraph validationSub = createValidationSubGraph();
  StateGraph transformSub = createTransformSubGraph();

  return new StateGraph(keyFactory)
      .addNode("validate", validationSub)
      .addNode("transform", transformSub)
      .addNode("finalize", nodeasync(state -> {
          String result = (String) state.value("transformed").orElse("No result");
          return Map.of("result", "Final: " + result);
      }))
      .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", "finalize")
      .addEdge("finalize", StateGraph.END);
}

// 使用
CompiledGraph graph = createMainGraph().compile();
OverAllState result = graph.invoke(Map.of("data", "test123"));
System.out.println("Result: " + result.value("result").orElse(""));
// 输出: Result: Final: PROC_TEST123

png

png

  • 子图作为 NodeAction – 另一种集成方式
  • 子图作为 CompiledGraph – 编译后使用
  • 快速入门 – Graph 基础

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

赞(0)
未经允许不得转载:AI项目博客 » Spring AI Alibaba 103|Graph Core · 子图作为 StateGraph · 完整示例

评论 抢沙发

AI项目博客

专注 AI 工程化落地 —— 覆盖智能体、大模型、Java AI 与 Python 的学习笔记,以及 AI 平台的项目实战记录。

关于本站文章归档

登录

找回密码

注册