从零到一:Spring AI 2.0 + Spring Boot 4.1 企业级AI应用实战 2026年6月Spring生态迎来了两个里程碑级的发布6月10日Spring Boot 4.1正式发布6月12日Spring AI 2.0.0 GA同步上线。Spring AI 2.0被设计为与Spring Boot 4.0/4.1和Spring Framework 7.0配合使用——Spring官方正在把“AI集成”变成Spring生态的一等公民。本文将从零开始带你构建一个完整的企业级AI应用覆盖结构化输出、工具调用Tool Calling、MCP服务器三大核心能力并结合Spring Boot 4.1的生产级特性让代码真正可落地。技术栈Java 21 Spring Boot 4.1.0 Spring AI 2.0.0 GA一、项目初始化5分钟搭好骨架1.1 创建Spring Boot项目使用Spring Initializr或IDE创建项目核心依赖如下parent groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version4.1.0/version /parent properties java.version21/java.version spring-ai.version2.0.0/spring-ai.version /properties dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version${spring-ai.version}/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement dependencies !-- Spring AI 核心 -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter/artifactId /dependency !-- OpenAI 适配也兼容其他OpenAI API的模型 -- dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-openai-spring-boot-starter/artifactId /dependency !-- Spring Boot Web -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency /dependenciesSpring AI 2.0将支持的模型提供方收敛为一组明确定义的核心集OpenAI从3种变体统一为1种SDK同时兼容OpenAI API的其他模型、Anthropic从2种变体统一为1种SDK、Amazon Bedrock、Google GenAI等。这意味着你使用同一套ChatClientAPI就可以切换不同的模型提供商。1.2 配置模型连接在application.yml中配置API密钥以OpenAI为例spring: ai: openai: api-key: ${OPENAI_API_KEY} base-url: ${OPENAI_BASE_URL:https://api.openai.com} chat: options: model: gpt-4o temperature: 0.7Spring Boot的自动配置会为你创建好ChatModel和ChatClient.BuilderBean。二、核心能力一结构化输出——让AI返回“类型安全”的数据大语言模型是“文本进、文本出”的系统。当下游代码需要根据字段做路由、持久化或分支判断时文本必须变成类型化的记录。Spring AI通过ChatClient的.entity()方法解决了这个问题。2.1 定义返回类型public record CustomerSupportTicket( String ticketId, String category, // 技术问题 | 账单咨询 | 产品建议 String priority, // 高 | 中 | 低 String summary, String suggestedAction, ListString relatedArticles ) {}2.2 基础用法让AI填充对象Service public class TicketAnalysisService { private final ChatClient chatClient; public TicketAnalysisService(ChatClient.Builder builder) { this.chatClient builder.build(); } public CustomerSupportTicket analyzeTicket(String userMessage) { return chatClient.prompt() .user( 请分析以下客户反馈按工单分类、优先级、摘要、建议操作和相关文章生成结构化输出 客户反馈%s .formatted(userMessage)) .call() .entity(CustomerSupportTicket.class); } }entity(CustomerSupportTicket.class)背后做了三件事将CustomerSupportTicket记录生成JSON Schema将Schema追加到提示词的系统上下文中然后将模型的JSON答案反序列化为你的记录。2.3 可靠性升级自纠错验证基础用法有一个问题模型是被“请求”生成符合Schema的JSON而不是被“强制”。有时它会多返回一个字段、遗漏必填字段或者把JSON包在散文里。Spring AI 2.0 的validateSchema()解决了这个问题public CustomerSupportTicket analyzeTicketWithRetry(String userMessage) { return chatClient.prompt() .user( 请分析以下客户反馈按工单分类、优先级、摘要、建议操作和相关文章生成结构化输出 客户反馈%s .formatted(userMessage)) .call() .entity(CustomerSupportTicket.class, spec - spec.validateSchema()); }开启validateSchema()后Spring AI会启动一个自纠错重试循环模型返回响应Spring AI 验证响应是否符合CustomerSupportTicket的Schema验证通过 → 返回类型化记录验证失败 → 将具体的校验错误如“缺少必填字段category”、“期望数组却得到字符串”追加到用户提示中重新发起调用——默认最多重试3次第二次尝试不是盲目重试模型看到了上一次的错误原因能够有针对性地修正输出。三、核心能力二工具调用——让AI“动手做事”工具调用Tool Calling是代理式AI系统的核心构建块。一个只能生成文本的模型是聊天机器人一个能够发现信息、采取行动并循环直到达成目标的模型才是Agent。Spring AI 2.0 将工具调用从底层重构为ChatClient顾问链中的一等公民。在1.x中每个ChatModel实现都包含自己的私有工具执行循环——功能可用但无法被钩入、观测或组合。2.0将其提升为可组合的顾问组件。3.1 用 Tool 定义工具Spring AI 2.0 推荐使用声明式的Tool注解Component public class OrderTools { private final OrderService orderService; public OrderTools(OrderService orderService) { this.orderService orderService; } Tool(description 根据订单号查询订单状态返回订单的当前状态、金额和预计送达时间) public OrderStatus getOrderStatus( ToolParam(description 订单号格式为 ORD-xxxxxx) String orderId ) { return orderService.findStatus(orderId); } Tool(description 取消指定订单仅当订单状态为待发货时可以取消) public CancelResult cancelOrder( ToolParam(description 要取消的订单号) String orderId, ToolParam(description 取消原因) String reason ) { return orderService.cancel(orderId, reason); } }Spring AI会自动生成输入参数的JSON Schema。ToolParam为每个参数添加描述和可选/必填提示。3.2 将工具注册到 ChatClient工具通过.tools()显式传递给ChatClientService public class OrderAssistantService { private final ChatClient chatClient; private final OrderTools orderTools; public OrderAssistantService(ChatClient.Builder builder, OrderTools orderTools) { this.chatClient builder.build(); this.orderTools orderTools; } public String handleUserQuery(String userMessage) { return chatClient.prompt() .user(userMessage) .tools(orderTools) .call() .content(); } }3.3 工具调用循环的工作原理当用户问“我的订单ORD-123456现在什么状态”时底层ToolCallingAdvisor驱动的循环如下第一轮模型分析用户问题发现需要调用getOrderStatus工具返回工具调用请求执行ToolCallingManager找到并执行getOrderStatus方法第二轮工具执行结果订单状态被追加到对话历史中再次发给模型最终响应模型基于工具返回的数据生成自然语言回复“您的订单ORD-123456当前状态为‘已发货’预计送达时间为...”整个过程对开发者完全透明——你只需要定义工具并注册ToolCallingAdvisor会处理所有的循环逻辑。四、核心能力三MCP服务器——让外部AI调用你的业务能力Model Context ProtocolMCP是一个开放标准定义了AI模型如何与外部工具、服务和数据源通信。它用单一的、定义良好的JSON-RPC 2.0协议取代了临时性的集成方案。一个有用的心智模型把MCP想象成AI集成的USB-C——一个标准端口连接多种设备。4.1 添加MCP依赖dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-mcp-server-webmvc/artifactId /dependency4.2 配置MCP传输层# application.yml spring: ai: mcp: server: name: enterprise-mcp-server version: 1.0.0 type: SYNC protocol: STREAMABLE server: port: 8080protocol: STREAMABLE选择Streamable HTTP传输——一个单一的POST /mcp端点通过JSON-RPC通信。Spring AI会自动注册这个端点无需编写任何控制器代码。4.3 用 McpTool 暴露工具Component public class PolicyNumberTools { McpTool(description 为指定险种生成新的保单号) public String createPolicyNumber( McpToolParam(description 险种ID如LI寿险、HE健康险) String lobId, McpToolParam(description 投保人姓名) String applicantName ) { String timestamp LocalDateTime.now() .format(DateTimeFormatter.ofPattern(yyyyMMddHHmmss)); return lobId - timestamp - applicantName.substring(0, 2).toUpperCase(); } McpTool(description 验证保单号是否有效) public boolean validatePolicyNumber( McpToolParam(description 待验证的保单号) String policyNumber ) { return policyNumber ! null policyNumber.matches(^[A-Z]{2}-\\d{14}-[A-Z]{2}$); } }McpTool和Tool类似Spring AI会自动生成参数的JSON Schema。4.4 暴露只读资源除了工具可调用函数MCP服务器还可以暴露资源——只读的、URI可寻址的内容Component public class PolicyResource { McpResource(uri policies://current/{userId}, description 获取指定用户当前有效的所有保单) public ListPolicySummary getCurrentPolicies( McpResourceParam(description 用户ID) String userId ) { return policyService.findActivePoliciesByUser(userId); } }4.5 测试MCP服务器启动应用后可以用curl测试curl -X POST http://localhost:8080/mcp \ -H Content-Type: application/json \ -d { jsonrpc: 2.0, method: tools/list, id: 1 }任何MCP兼容的客户端Claude Desktop、VS Code、Cursor或你自己的Spring应用都可以连接这个服务器。五、生产就绪Spring Boot 4.1 的企业级增强Spring AI 2.0解决了“如何构建AI应用”的架构问题而Spring Boot 4.1解决了“AI应用跑在哪里”的基础设施问题。5.1 gRPC原生支持Spring Boot 4.1 开始提供gRPC的自动配置。对于AI应用中内部服务间的高频调用gRPC比REST更高效// 定义gRPC服务通过proto文件编译生成 GrpcService public class AIGrpcService extends AIServiceGrpc.AIServiceImplBase { private final ChatClient chatClient; Override public void chat(ChatRequest request, StreamObserverChatResponse responseObserver) { String result chatClient.prompt() .user(request.getUserMessage()) .call() .content(); responseObserver.onNext(ChatResponse.newBuilder() .setContent(result).build()); responseObserver.onCompleted(); } }5.2 SSRF防护Spring Boot 4.1新增的InetAddressFilter可以拦截HTTP客户端向特定地址范围的出站请求。当AI Agent根据用户输入或模型输出动态访问外部URL时这是实打实的安全防线spring: web: client: ssrf: enabled: true allowed-ip-ranges: - 10.0.0.0/8 - 172.16.0.0/12 - 192.168.0.0/165.3 OpenTelemetry观测增强Spring Boot 4.1 增强了Async方法的上下文传播、Kafka/RabbitMQ的观测自动应用。在AI应用里一次请求可能经过HTTP接入→模型调用→工具调用→数据库→消息队列→异步任务链路观测不是“锦上添花”而是“生存刚需”。六、国产化部署金蝶天燕AAS的AI时代站位当上述Spring Boot 4.1 Spring AI 2.0应用需要部署在国产化环境中时金蝶Apusic应用服务器AASV10提供了一个经过国际权威验证的可靠底座。金蝶AAS V10已正式通过Jakarta EE 11国际认证在保持企业级稳定性的同时全面向云原生和现代开发范式靠拢。对于采用Spring Boot 4.1构建AI应用的政企客户而言AAS V10具备以下核心能力微内核架构支持按需加载降低资源占用国密算法支持满足等保和密评合规要求国产软硬件生态适配完整适配鲲鹏、飞腾、海光等国产芯片及统信、麒麟等国产操作系统企业级集群高可用支持会话复制、集群部署和故障自动转移随着Spring生态全面拥抱AI国产中间件在“AI应用服务器”这一新赛道上的持续跟进为政企用户的AI转型提供了自主可控的底层选择。七、总结本文从零开始构建了一个完整的企业级AI应用涵盖了Spring AI 2.0的三大核心能力能力核心API解决什么问题结构化输出ChatClient.entity().validateSchema()让AI返回类型安全的数据支持自纠错工具调用ToolChatClient.tools()让AI调用业务方法执行实际操作MCP服务器McpToolMcpResource让外部AI客户端调用你的业务能力Spring AI 2.0 的使命是“连接企业数据和API与AI模型”。当这套连接建立在Spring Boot 4.1提供的生产级基础设施gRPC、SSRF防护、OpenTelemetry之上Java开发者终于可以用自己最熟悉的方式大规模构建可靠、可观测、可维护的AI应用——无需切换技术栈无需Python背景。所有的示例代码都可以直接复制到你的项目中运行。下一步不妨试着将OrderTools替换为你自己的业务工具让AI真正成为你系统的“智能伙伴”。