目录一、订单智能体的背景二、订单智能体的介绍1. 工程定位2. Spring AI 框架核心价值与工程落地1统一模型接口屏蔽多源工具差异2StateGraph 流程编排智能体协作的 “大脑”3原生 RAG 支持物流节点的智能化核心4与 Spring 生态无缝融合3. 工程核心模块分工三、工程优势四、工程结构极简版五、核心依赖pom.xml六、核心配置类1. OpenAI 原生 API 配置OpenAiConfig.java2. 支付宝 MCP 配置AlipayConfig.java七、协作上下文AgentContext.java八、服务层实现1. 订单节点服务OrderAgentService.java2. 支付节点服务PaymentAgentService.java​编辑3. 物流节点服务LogisticsAgentService.java4. 流程编排服务MultiAgentWorkflowService.java九、控制层MultiAgentController.java十、启动类MultiAgentApplication.java十一、配置文件application.yml十二、测试类MultiAgentFlowTest.java总结运行说明一、订单智能体的背景随着电子商务行业的规模化发展订单处理、支付校验、物流调度的全流程协同面临三大核心挑战一是流程耦合度高传统单体系统中订单、支付、物流模块强绑定修改或扩展任一环节需重构整体逻辑二是智能化能力不足人工配置的固定规则难以适配复杂场景如动态物流方案、个性化订单生成三是第三方接口整合复杂OpenAI 大模型、支付宝支付、RAG 知识库等多源工具的调用需大量胶水代码维护成本高。多智能体系统MAS作为解决复杂分布式任务的有效方案在电子商务领域已得到成熟应用其核心优势在于将复杂流程拆解为独立智能体通过协作完成整体任务。而 Spring AI 框架的出现为 Java 开发者提供了企业级的 AI 工程化解决方案 —— 无需切换编程语言即可无缝集成大模型与第三方工具实现智能体的快速开发与流程编排彻底解决了传统 AI 应用开发中 “接口碎片化、配置繁琐、扩展性差” 的痛点。本项目基于 Spring AI 框架构建电商场景多智能体协作系统聚焦 “订单→支付→物流” 核心流程通过智能体分工协作与流程自动化提升业务处理效率与智能化水平。二、订单智能体的介绍1. 工程定位本工程是一套基于 Spring AI 的企业级多智能体协作解决方案专为电商核心流程设计实现订单自动生成、支付状态校验、物流方案智能推荐的全链路自动化。工程采用 Spring Boot 注解驱动开发严格遵循 “分层设计 组件化拆分” 原则确保代码的可维护性与可扩展性。2. Spring AI 框架核心价值与工程落地Spring AI 作为 Spring 官方推出的 AI 应用开发框架其核心设计理念是 “让 AI 工程化更简单”在本工程中主要体现为三大核心能力1统一模型接口屏蔽多源工具差异Spring AI 提供了标准化的模型抽象将 OpenAI 原生 API 封装为可直接注入的 Java 客户端OpenAiCompletionsClient、OpenAiEmbeddingClient等无需手动处理 HTTP 请求、JSON 序列化等底层逻辑。工程中通过OpenAiConfig配置类仅需 3 行代码即可完成 OpenAI 多接口的初始化后续若需切换为文心一言、通义千问等模型仅需修改配置文件无需改动业务代码实现 “一键切换” 的高可移植性。2StateGraph 流程编排智能体协作的 “大脑”Spring AI 核心模块spring-ai-core提供的StateGraph组件借鉴了 LangGraph 的状态机理念支持基于状态驱动的复杂流程编排。本工程通过MultiAgentWorkflowService构建 “订单→支付→物流” 的顺序执行流每个智能体作为独立节点通过AgentContext上下文对象传递数据支持条件分支如支付失败时跳过物流节点、状态持久化等复杂场景确保流程的幂等性与可恢复性。3原生 RAG 支持物流节点的智能化核心物流节点的智能推荐能力依赖 RAG检索增强生成技术Spring AI 深度整合了向量存储与嵌入模型工程中通过OpenAiEmbeddingClient调用 OpenAI Embeddings API 生成订单文本向量再结合自定义知识库 API 实现相关物流规则的精准检索最终通过OpenAiChatClient生成个性化物流方案。这一过程无需手动实现向量计算与检索逻辑Spring AI 已完成底层封装开发者可聚焦业务场景设计。4与 Spring 生态无缝融合工程完全遵循 Spring Boot 开发规范通过Service、Configuration、Autowired等注解实现组件管理与依赖注入无需额外引入胶水代码。例如支付宝 MCP 客户端、OpenAI 客户端均通过配置类声明为 Bean在业务服务中直接注入使用保持了 Spring 生态的一致性与易用性。3. 工程核心模块分工配置层config封装 OpenAI 与支付宝 MCP 的客户端初始化逻辑通过配置文件注入密钥与地址实现 “配置与业务分离”服务层service4 个服务类分别对应 “订单生成、支付校验、物流推荐、流程编排”每个智能体职责单一符合 “单一职责原则”DTO 层dtoAgentContext作为全局上下文统一管理各节点的输入 / 输出数据避免多节点间参数传递混乱控制层controller通过MultiAgentController暴露 REST 接口支持外部系统调用全流程协作功能测试层test覆盖单节点测试与全流程测试确保每个智能体独立可用、协作流程顺畅。三、工程优势智能化程度高订单生成采用 OpenAI 流式输出物流方案基于 RAG 知识库动态生成相比传统固定规则适配更多复杂场景扩展性强基于 Spring AI 的统一接口抽象可快速集成新的大模型或第三方工具如微信支付、京东物流 API工程化规范严格分层设计代码简洁无冗余测试覆盖全面符合企业级应用的开发标准低门槛集成Java 开发者无需学习 Python 即可快速上手 AI 应用开发Spring AI 已屏蔽底层复杂度聚焦业务逻辑。本工程通过 Spring AI 框架的强大能力将多智能体协作从理论落地为可复用的工程方案为电商行业的流程自动化与智能化升级提供了高效、可扩展的技术支撑。四、工程结构极简版src/main/java/com/ai/multiagent/├── MultiAgentApplication.java // 启动类├── config/ // 配置类│ ├── OpenAiConfig.java // OpenAI 原生API配置│ └── AlipayConfig.java // 支付宝MCP配置├── controller/ // 控制层│ └── MultiAgentController.java // 协作入口接口├── service/ // 服务层│ ├── OrderAgentService.java // 订单节点服务│ ├── PaymentAgentService.java // 支付节点服务│ ├── LogisticsAgentService.java // 物流节点服务│ └── MultiAgentWorkflowService.java // 流程编排StateGraph├── dto/ // 数据传输对象│ └── AgentContext.java // 协作上下文传递节点数据└── test/ // 测试类└── MultiAgentFlowTest.java // 全流程测试五、核心依赖pom.xml?xml version1.0 encodingUTF-8?project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion3.2.6/versionrelativePath//parentgroupIdcom.ai/groupIdartifactIdmulti-agent-demo/artifactIdversion0.0.1-SNAPSHOT/versiondependencies!-- Spring AI 核心对接OpenAI原生API --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-openai-spring-boot-starter/artifactIdversion1.0.0-M1/version/dependency!-- Spring Boot Web --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- 支付宝MCP工具 --dependencygroupIdcom.alipay.sdk/groupIdartifactIdalipay-sdk-java/artifactIdversion4.38.0.ALL/version/dependency!-- Spring AI StateGraph流程编排 --dependencygroupIdorg.springframework.ai/groupIdartifactIdspring-ai-core/artifactIdversion1.0.0-M1/version/dependency!-- 测试依赖 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency/dependenciesrepositoriesrepositoryidspring-milestones/idurlhttps://repo.spring.io/milestone/url/repository/repositories/project六、核心配置类1. OpenAI 原生 API 配置OpenAiConfig.javapackage com.ai.multiagent.config;import org.springframework.ai.openai.OpenAiApi;import org.springframework.ai.openai.OpenAiChatClient;import org.springframework.ai.openai.OpenAiCompletionsClient;import org.springframework.ai.openai.OpenAiEmbeddingClient;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;Configurationpublic class OpenAiConfig {Value(${spring.ai.openai.api-key})private String apiKey;Beanpublic OpenAiApi openAiApi() {return new OpenAiApi(https://api.openai.com/v1, apiKey);}// 订单节点流式Prompt输出Beanpublic OpenAiCompletionsClient completionsClient() {return new OpenAiCompletionsClient(openAiApi());}// 物流节点RAG向量嵌入Beanpublic OpenAiEmbeddingClient embeddingClient() {return new OpenAiEmbeddingClient(openAiApi());}// 通用对话Beanpublic OpenAiChatClient chatClient() {return new OpenAiChatClient(openAiApi());}}2. 支付宝 MCP 配置AlipayConfig.javapackage com.ai.multiagent.config;import com.alipay.api.AlipayClient;import com.alipay.api.DefaultAlipayClient;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;Configurationpublic class AlipayConfig {Value(${alipay.app-id})private String appId;Value(${alipay.private-key})private String privateKey;Value(${alipay.public-key})private String alipayPublicKey;Value(${alipay.gateway-url})private String gatewayUrl;Beanpublic AlipayClient alipayClient() {return new DefaultAlipayClient(gatewayUrl, appId, privateKey,json, UTF-8, alipayPublicKey, RSA2);}}七、协作上下文AgentContext.javapackage com.ai.multiagent.dto;import lombok.Data;// 节点间数据传递上下文Datapublic class AgentContext {private String orderId; // 订单IDprivate String orderInfo; // 订单节点输出private boolean paymentSuccess;// 支付节点结果private String logisticsPlan; // 物流节点输出private String productInfo; // 商品信息入参private String tradeNo; // 支付宝交易号}八、服务层实现1. 订单节点服务OrderAgentService.javapackage com.ai.multiagent.service;import org.springframework.ai.openai.OpenAiCompletionsClient;import org.springframework.stereotype.Service;import com.ai.multiagent.dto.AgentContext;import reactor.core.publisher.Flux;Servicepublic class OrderAgentService {private final OpenAiCompletionsClient completionsClient;public OrderAgentService(OpenAiCompletionsClient completionsClient) {this.completionsClient completionsClient;}// 订单节点执行流式Prompt输出public AgentContext execute(AgentContext context) {String prompt String.format(生成订单%s的JSON格式信息包含商品%s、金额、收货地址,context.getOrderId(), context.getProductInfo());// 调用OpenAI流式接口FluxString stream completionsClient.stream(prompt);StringBuilder orderInfo new StringBuilder();stream.subscribe(chunk - orderInfo.append(chunk),e - System.err.println(订单生成异常 e.getMessage()));// 阻塞等待测试用生产用异步try { Thread.sleep(2000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); }context.setOrderInfo(orderInfo.toString().trim());return context;}}2. 支付节点服务PaymentAgentService.javapackage com.ai.multiagent.service;import com.alipay.api.AlipayClient;import com.alipay.api.request.AlipayTradeQueryRequest;import com.alipay.api.response.AlipayTradeQueryResponse;import com.ai.multiagent.dto.AgentContext;import org.springframework.stereotype.Service;import java.util.HashMap;import java.util.Map;Servicepublic class PaymentAgentService {private final AlipayClient alipayClient;public PaymentAgentService(AlipayClient alipayClient) {this.alipayClient alipayClient;}// 支付节点执行调用支付宝MCP工具public AgentContext execute(AgentContext context) {try {AlipayTradeQueryRequest request new AlipayTradeQueryRequest();MapString, String bizContent new HashMap();bizContent.put(out_trade_no, context.getOrderId());bizContent.put(trade_no, context.getTradeNo());request.setBizContent(bizContent.toString());// 调用支付宝MCP真实接口AlipayTradeQueryResponse response alipayClient.execute(request);context.setPaymentSuccess(response.isSuccess() TRADE_SUCCESS.equals(response.getTradeStatus()));} catch (Exception e) {context.setPaymentSuccess(false);System.err.println(支付校验异常 e.getMessage());}return context;}}3. 物流节点服务LogisticsAgentService.javapackage com.ai.multiagent.service;import com.ai.multiagent.dto.AgentContext;import org.springframework.ai.openai.OpenAiChatClient;import org.springframework.ai.openai.OpenAiEmbeddingClient;import org.springframework.stereotype.Service;import org.springframework.web.client.RestTemplate;import java.util.HashMap;import java.util.Map;Servicepublic class LogisticsAgentService {private final OpenAiEmbeddingClient embeddingClient;private final OpenAiChatClient chatClient;private final RestTemplate restTemplate new RestTemplate();// RAG知识库API地址private final String RAG_API_URL http://localhost:8080/api/rag/knowledge;public LogisticsAgentService(OpenAiEmbeddingClient embeddingClient, OpenAiChatClient chatClient) {this.embeddingClient embeddingClient;this.chatClient chatClient;}// 物流节点执行RAG知识库调用public AgentContext execute(AgentContext context) {try {// 1. 调用OpenAI Embeddings生成向量RAG核心float[] embedding embeddingClient.embed(context.getOrderInfo()).getEmbedding();// 2. 调用RAG知识库API真实接口MapString, Object ragRequest new HashMap();ragRequest.put(orderId, context.getOrderId());ragRequest.put(embedding, embedding);MapString, String ragContext restTemplate.postForObject(RAG_API_URL, ragRequest, Map.class);// 3. 生成物流方案String prompt String.format(基于知识库%s为订单%s生成物流方案快递、时效、运费,ragContext.get(context), context.getOrderId());context.setLogisticsPlan(chatClient.call(prompt));} catch (Exception e) {context.setLogisticsPlan(物流方案生成失败 e.getMessage());}return context;}// 模拟RAG知识库API真实部署时独立提供public MapString, String ragKnowledgeApi(MapString, Object request) {MapString, String response new HashMap();response.put(context, 江浙沪顺丰1天0运费偏远地区中通3天15运费);return response;}}4. 流程编排服务MultiAgentWorkflowService.javapackage com.ai.multiagent.service;import com.ai.multiagent.dto.AgentContext;import org.springframework.ai.stategraph.StateGraph;import org.springframework.stereotype.Service;Servicepublic class MultiAgentWorkflowService {private final OrderAgentService orderAgent;private final PaymentAgentService paymentAgent;private final LogisticsAgentService logisticsAgent;public MultiAgentWorkflowService(OrderAgentService orderAgent,PaymentAgentService paymentAgent,LogisticsAgentService logisticsAgent) {this.orderAgent orderAgent;this.paymentAgent paymentAgent;this.logisticsAgent logisticsAgent;}// 构建StateGraph流程订单→支付→物流public StateGraphAgentContext buildWorkflow() {return StateGraph.AgentContextbuilder()// 1. 订单节点.step(order, context - orderAgent.execute(context))// 2. 支付节点依赖订单完成.step(payment, context - paymentAgent.execute(context))// 3. 物流节点依赖支付成功.step(logistics, context - {if (context.isPaymentSuccess()) {return logisticsAgent.execute(context);}context.setLogisticsPlan(支付失败跳过物流);return context;})// 定义执行顺序.edge(order, payment).edge(payment, logistics)// 起始节点.start(order).build();}// 执行全流程public AgentContext runWorkflow(AgentContext initialContext) {StateGraphAgentContext graph buildWorkflow();return graph.execute(initialContext);}}九、控制层MultiAgentController.javapackage com.ai.multiagent.controller;import com.ai.multiagent.dto.AgentContext;import com.ai.multiagent.service.MultiAgentWorkflowService;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;RestControllerRequestMapping(/api/agent)public class MultiAgentController {private final MultiAgentWorkflowService workflowService;public MultiAgentController(MultiAgentWorkflowService workflowService) {this.workflowService workflowService;}// 多智能体协作入口PostMapping(/run)public ResponseEntityAgentContext runWorkflow(RequestBody AgentContext context) {AgentContext result workflowService.runWorkflow(context);return ResponseEntity.ok(result);}// RAG知识库API模拟PostMapping(/rag/knowledge)public ResponseEntityMapString, String ragApi(RequestBody MapString, Object request) {MapString, String response new LogisticsAgentService(null, null).ragKnowledgeApi(request);return ResponseEntity.ok(response);}}十、启动类MultiAgentApplication.javapackage com.ai.multiagent;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplicationpublic class MultiAgentApplication {public static void main(String[] args) {SpringApplication.run(MultiAgentApplication.class, args);}}十一、配置文件application.ymlserver:port: 8080spring:ai:openai:api-key: ${OPENAI_API_KEY} # 替换为真实Keyalipay:app-id: ${ALIPAY_APP_ID} # 替换为真实值private-key: ${ALIPAY_PRIVATE_KEY}public-key: ${ALIPAY_PUBLIC_KEY}gateway-url: https://openapi.alipay.com/gateway.do十二、测试类MultiAgentFlowTest.javapackage com.ai.multiagent;import com.ai.multiagent.dto.AgentContext;import com.ai.multiagent.service.MultiAgentWorkflowService;import com.ai.multiagent.service.OrderAgentService;import com.ai.multiagent.service.PaymentAgentService;import com.ai.multiagent.service.LogisticsAgentService;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;SpringBootTestpublic class MultiAgentFlowTest {Autowiredprivate OrderAgentService orderAgent;Autowiredprivate PaymentAgentService paymentAgent;Autowiredprivate LogisticsAgentService logisticsAgent;Autowiredprivate MultiAgentWorkflowService workflowService;// 测试1单独测试订单节点Testpublic void testOrderAgent() {AgentContext context new AgentContext();context.setOrderId(TEST_001);context.setProductInfo(iPhone 15 256G);AgentContext result orderAgent.execute(context);System.out.println(【订单节点测试】结果 result.getOrderInfo());}// 测试2单独测试支付节点Testpublic void testPaymentAgent() {AgentContext context new AgentContext();context.setOrderId(TEST_001);context.setTradeNo(2024050122001410086000000001);AgentContext result paymentAgent.execute(context);System.out.println(【支付节点测试】结果 result.isPaymentSuccess());}// 测试3单独测试物流节点Testpublic void testLogisticsAgent() {AgentContext context new AgentContext();context.setOrderId(TEST_001);context.setOrderInfo({\orderId\:\TEST_001\,\product\:\iPhone 15\,\address\:\杭州\});AgentContext result logisticsAgent.execute(context);System.out.println(【物流节点测试】结果 result.getLogisticsPlan());}// 测试4全流程测试StateGraph编排Testpublic void testFullWorkflow() {AgentContext initialContext new AgentContext();initialContext.setOrderId(TEST_001);initialContext.setProductInfo(iPhone 15 256G);initialContext.setTradeNo(2024050122001410086000000001);AgentContext result workflowService.runWorkflow(initialContext);System.out.println(【全流程测试】订单信息 result.getOrderInfo());System.out.println(【全流程测试】支付状态 result.isPaymentSuccess());System.out.println(【全流程测试】物流方案 result.getLogisticsPlan());}}总结核心设计基于StateGraph实现订单→支付→物流的顺序执行节点间通过AgentContext传递数据接口真实性订单节点调用 OpenAI Completions 流式接口实现 Prompt 输出支付节点调用支付宝 MCP 真实接口校验支付状态物流节点通过 OpenAI Embeddings 自定义 RAG API 实现知识库调用分层清晰Controller 暴露接口Service 实现业务逻辑Config 配置第三方客户端测试类覆盖单节点 全流程简洁性使用 SpringBoot 注解Service/RestController/Configuration代码无冗余聚焦核心逻辑。运行说明替换配置文件中的OPENAI_API_KEY、支付宝密钥为真实值启动应用后可通过POST /api/agent/run调用全流程接口运行测试类可依次验证每个节点的执行效果。