跳到主要内容

PlantUML 图表可视化

Spring AI Alibaba Graph 支持将工作流导出为 PlantUML 格式,方便可视化和文档化。

PlantUML 工具函数

PlantUML 工具函数查看完整代码
import net.sourceforge.plantuml.SourceStringReader;
import net.sourceforge.plantuml.FileFormatOption;
import net.sourceforge.plantuml.FileFormat;
import com.alibaba.cloud.ai.graph.GraphRepresentation;
import java.io.IOException;

static java.awt.Image plantUML2PNG(String code) throws IOException {
var reader = new SourceStringReader(code);

try (var imageOutStream = new java.io.ByteArrayOutputStream()) {
var description = reader.outputImage(imageOutStream, 0, new FileFormatOption(FileFormat.PNG));
var imageInStream = new java.io.ByteArrayInputStream(imageOutStream.toByteArray());
return javax.imageio.ImageIO.read(imageInStream);
}
}

// 从 GraphRepresentation 生成图像
static void displayDiagram(GraphRepresentation representation) throws IOException {
var image = plantUML2PNG(representation.getContent());
display(image);
}

简单示例

简单示例查看完整代码
var code = """
@startuml
title Spring AI Alibaba Graph
START --> NodeA
NodeA --> NodeB
NodeB --> END
@enduml
""";

display(plantUML2PNG(code));

从 Graph 生成 PlantUML

从 Graph 生成 PlantUML查看完整代码
import com.alibaba.cloud.ai.graph.CompiledGraph;
import com.alibaba.cloud.ai.graph.GraphRepresentation;
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;

/**
* 从 Graph 生成 PlantUML
*/
public static void generatePlantUmlFromGraph() throws GraphStateException {
KeyStrategyFactory keyStrategyFactory = () -> {
HashMap<String, KeyStrategy> strategies = new HashMap<>();
strategies.put("result", new ReplaceStrategy());
return strategies;
};

// 构建一个简单的 Graph
StateGraph graph = new StateGraph(keyStrategyFactory)
.addNode("step1", node_async(state -> Map.of("result", "Step 1")))
.addNode("step2", node_async(state -> Map.of("result", "Step 2")))
.addNode("step3", node_async(state -> Map.of("result", "Step 3")))
.addEdge(START, "step1")
.addEdge("step1", "step2")
.addEdge("step2", "step3")
.addEdge("step3", END);

CompiledGraph compiledGraph = graph.compile();

// 生成 PlantUML 表示
GraphRepresentation representation = compiledGraph.getGraph(
GraphRepresentation.Type.PLANTUML,
"My Workflow"
);

// 显示 PlantUML 代码
System.out.println("PlantUML representation:");
System.out.println(representation.content());
}

PlantUML 输出示例

@startuml
title My Workflow
START --> step1
step1 --> step2
step2 --> step3
step3 --> END
@enduml

应用场景

  • 文档生成: 自动生成工作流文档
  • 调试分析: 可视化理解 Graph 结构
  • 团队协作: 分享工作流设计
  • 版本对比: 比较不同版本的 Graph 结构

相关文档

Spring AI Alibaba 开源项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。