DC娱乐网

Spring AI Alibaba Graph Workflow快速入...

Spring AI Alibaba Graph 是 Spring AI Alibaba 框架的核心组成部分,一个用于构建

Spring AI Alibaba Graph 是 Spring AI Alibaba 框架的核心组成部分,一个用于构建工作流和多智能体应用的高阶抽象框架。它借鉴了 LangGraph 的设计理念,并在此基础上针对 Java 生态和企业级生产需求进行了增强和扩展。

前面已经完成了示例工作流的配置,现在就可以在本地运行这个工作流应用了。

一、创建REST控制器

这是一个基于Spring Boot的REST控制器,提供客户服务聊天功能,核心是通过AI工作流图处理用户查询。

工作流执行步骤:

1. QuestionClassifierNode - 对输入文本进行AI分类

2. FeedbackQuestionDispatcher - 根据分类结果决定执行路径

3. RecordingNode - 记录处理结果并生成最终解决方案

/** * CustomerServiceController * * 提供一个简单的客服问答接口,基于预定义的工作流图处理用户查询。 * 主要功能: * 1. 接收用户输入的查询文本。 * 2. 调用编译后的工作流图执行处理逻辑。 * 3. 返回图中最终节点生成的解决方案 solution 文本。 * * 使用示例: * - 通过 HTTP GET 请求访问 /customer/chat?query=你的问题文本 * - 返回图处理后的解决方案solution字符串 * * 注意事项: * - 确保注入的 StateGraph 已正确配置并包含所需节点和边。 * - 异常处理简化,实际应用中可能需要更细粒度的错误管理。 */ @RestController @RequestMapping("/customer") public CustomerServiceController { // 日志记录器,用于记录控制器运行过程中的关键信息和异常 private static final Logger logger = LoggerFactory.getLogger(CustomerServiceController.class); /** * 构造函数 - 初始化客户服务控制器 * 通过依赖注入获取预配置的状态图并编译为可执行图 */ private final CompiledGraph compiledGraph; // 构造函数 - 通过依赖注入获取预配置的状态图并编译为可执行图 public CustomerServiceController(@Qualifier("workflowGraph") StateGraph stateGraph) throws GraphStateException { // 将状态图编译为可执行的CompiledGraph对象 // 编译过程会验证图的完整性和节点连接的正确性 this.compiledGraph = stateGraph.compile(); } @GetMapping("/chat") public String simpleChat(String query) throws Exception { // 调用编译后的工作流图执行完整的AI处理流程 return compiledGraph.invoke(Map.of("input", query)) .get() .value("solution") .get().toString(); } }

HTTP映射:响应 GET /customer/chat 请求

工作流调用:

Map.of("input", query) - 将查询文本作为输入传递compiledGraph.invoke() - 执行完整的AI工作流.get() - 获取异步执行结果.value("solution") - 提取solution.toString() - 转换为字符串返回

二、启动应用并测试

确保已在配置文件中设置模型所需的密钥,然后启动 Spring Boot 应用。应用启动日志中应能看到工作流PlantUML信息(Customer Service Workflow UML)。如果使用的是 OpenAI 模型,在首次调用时可能下载模型的 API 描述;使用阿里云模型则需要确保网络能访问 DashScope 服务。

示例应用通过 CustomerServiceController 将工作流暴露为 REST 接口。在浏览器或Postman 中调用以下 GET 请求即可触发流程:

上述请求中的 query 参数就是用户反馈文本。对于一个正面反馈示例,工作流会判定为正面评价,直接记录结论。

再测试一个负面反馈例子:http://localhost:8080/customer/chat?query=客服态度不友好呀。输出结果如图所示:

由于这是负面评价,工作流首先会分类为 negative,然后在具体分类节点可能将其归类为“售后服务”问题,最后记录这一结论。接口返回的字符串将包含具体问题类别(after-sale service)。

在应用控制台日志中,可以看到每一步执行的记录信息。例如,当反馈为正面时,RecordingNode 会输出日志“Received positive feedback: …”,负面反馈则输出“Received negative feedback: …”,这有助于开发调试了解流程走向。同时,由于给 ChatClient 配置了 SimpleLoggerAdvisor,与模型交互的提示词和回复也会简要记录,方便查看大模型决策过程。

2025-09-20T18:34:02.564+08:00 INFO 27953 --- [simple-graph] [nio-8080-exec-7] c.r.e.s.w.FeedbackQuestionDispatcher :ifierOutput: ```json

{"keywords": ["客服", "态度", "不友好"], "category_name": "negative feedback"}

```

2025-09-20T18:34:03.535+08:00 INFO 27953 --- [simple-graph] [nio-8080-exec-7] c.r.e.s.w.SpecificQuestionDispatcher :ifierOutput: ```json

{"keywords": ["客服", "态度", "不友好"], "category_name": "after-sale service"}

```

2025-09-20T18:34:03.536+08:00 INFO 27953 --- [simple-graph] [nio-8080-exec-7] c.r.e.s.workflow.RecordingNode : Received negative feedback: ```json

{"keywords": ["客服", "态度", "不友好"], "category_name": "after-sale service"}

```

通过以上测试,验证了工作流应用的正确性。

三、预置节点

Spring AI Alibaba Graph 中提供大量预置节点,这些节点可以对标到市面上主流的如 Dify、百炼等低代码平台,方便用户快速串联工作流应用。典型节点包括 LlmNode(大模型节点)、QuestionClassifierNode(问题分类节点)、ToolNode(工具节点)等,为用户免去重复开发、定义的负担,只需要专注流程串联。

Spring AI Alibaba Graph 开源项目中预置的节点包括:

AgentNode: 支持Agent节点。AnswerNode: 支持答案节点。AssignerNode: 支持分配器节点。DocumentExtractorNode: 支持文档提取节点。HttpNode: 支持HTTP节点。HumanNode: 支持人类节点。流程暂停,等待外部(如用户)输入或决策,实现 Human-in-the-loop 机制。IterationNode: 支持迭代节点。KnowledgeRetrievalNode: 支持知识检索节点。用于构建知识库问答系统。ListOperatorNode: 支持列表操作节点。LlmNode: 支持LLM节点。封装了对大语言模型(如通义千问)的调用,支持同步和流式响应。McpNode: 支持MCP节点。ParameterParsingNode: 支持参数解析节点。QuestionClassifierNode: 支持问题分类节点。TemplateTransformNode: 支持模板转换节点。ToolNode: 支持工具节点。允许智能体执行外部工具,例如计算器、数据库查询、API调用等,扩展了智能体的能力边界。VariableAggregatorNode: 支持变量聚合节点。