【Spring Boot 4】Spring Boot 4.0 AI Agent实战:Skills Agent + MCP协议集成

Spring AI 2.0实战:Java多模型、Tools、MCP与Agent完整打通指南 在Java后端开发中,AI能力接入正从简单的API调用转向复杂的智能体编排。Spring AI作为Java生态中的AI框架,以统一抽象层屏蔽多厂商差异,使开发者能通过ChatModel、ChatClient等核心组件快速集成大模型。其核心原理在于将模型调用、工具函数与上下文管理封装为可复用的Spring Bean,结合Tools机制让模型能够动态调用外部业务方法,借助MCP协议实现标准化工具接入,并通过Skills沉淀领域技能模板。这套技术体系的价值在于:开发者无需深入底层SDK,即可构建具备自主规划与决策 阅读详情

【Spring Boot 4】Spring Boot 4.0 AI Agent实战:Skills Agent + MCP协议集成

📖 首屏导读 · 本教程配套付费专栏:《大模型工程师修炼手记》 19.9 元(AI 编程 · Agent 实战 · 本文同主题系统课程)· 《AI时代程序员的自我提升》 49.9 元(AI 时代成长方法论)

单篇不过瘾?订阅解锁全量源码、实战与答疑;文末附资料包领取方式 ↓

Java开发者如何用Spring Boot 4.0构建企业级AI Agent?本文从ChatClient核心API、Skills Agent渐进式披露设计、MCP协议标准化工具集成三个维度,带你完成一个完整的AI Agent工程化方案。

前言

2026年6月,Spring Boot 4.1.0 GA正式发布,基于Spring Framework 7.0全面重构。与此同时,Spring AI 2.0.0 GA同步发布,标志着Java生态中AI Agent开发正式进入"生产级"时代。

作为一名在LLM工程化领域持续深耕的技术博主,我的付费专栏"大模型工程师修炼手记"(30篇系列)已经覆盖了大模型从微调、部署、推理优化到RAG系统的全链路工程化知识。而本文,是专栏在AI Agent工程化实战方向的重要补充——将Spring生态的工程化基因与大模型的智能决策能力结合,为Java开发者打开Agent开发的新范式。

本文你将学到:

  • Spring Boot 4.0 + Spring AI 2.0的Agent全景架构设计
  • ChatClient作为AI交互统一入口的核心API与三种调用模式
  • Skills Agent渐进式披露(Progressive Disclosure)设计模式的原理与实践
  • Function Calling、MCP协议、Skills Agent三种工具调用模式的深度对比与选型
  • 基于Spring Boot 4.0的MCP协议完整集成实战
  • 生产环境下的性能优化策略

一、Spring Boot 4.0 + AI Agent全景架构

1.1 Spring Boot 4.1.0 GA核心变化

Spring Boot 4.1.0 GA是一次里程碑式的升级,其核心变化体现在以下几个方面:

底层架构重构: 基于Spring Framework 7.0构建,最低要求Java 17,推荐Java 21+。全面拥抱虚拟线程(Virtual Threads),对AI Agent场景下的大量IO密集型调用(如流式推理、工具链编排)提供了天然的性能优势。Spring Framework 7.0引入的RouterFunction增强和反应式编程模型升级,也为Agent的异步编排奠定了基础。

自动配置增强: Spring Boot 4.0重构了自动配置引擎,引入了条件化配置的优先级排序机制。对于AI Agent场景,这意味着多模型供应商(OpenAI、Anthropic、Ollama等)的自动配置可以更优雅地共存与切换。

启动性能优化: 通过AOT(Ahead-of-Time)编译和GraalVM原生镜像的深度整合,Spring Boot 4.0应用的启动时间进一步缩短,这对需要快速扩缩容的Agent服务尤为重要。

1.2 Spring AI 2.0.0 GA的Agent能力矩阵

Spring AI 2.0.0 GA是Spring生态在AI领域的集大成之作,其Agent能力矩阵涵盖以下关键维度:

能力域核心组件说明
模型接入ChatModel / EmbeddingModel统一的模型抽象层,支持OpenAI、Anthropic、Ollama、通义千问等20+模型
交互入口ChatClientFluent API设计的统一交互入口,支持同步、流式、工具调用三种模式
工具调用@Tool / @McpTool声明式工具定义,支持Function Calling和MCP两种协议
Agent编排SkillsAgent渐进式披露设计模式,按需加载工具能力
记忆管理ChatMemory对话上下文管理,支持多种存储后端
结构化输出BeanOutputConverter将模型输出直接映射为Java对象

Spring Boot 4.0 AI Agent架构全景

上图展示了Spring Boot 4.0 AI Agent的完整架构分层。从底层的模型适配层,到中间的工具协议层(Function Calling + MCP),再到上层的Agent编排层(Skills Agent),每一层都保持了Spring生态一贯的抽象一致性和可扩展性。


二、ChatClient:AI交互的统一入口

2.1 ChatClient核心API设计理念

在Spring AI 2.0之前,开发者直接与ChatModel交互,需要手动处理Prompt拼接、参数注入、响应解析等底层细节。Spring AI 2.0引入的ChatClient是对这些底层操作的高层抽象,其设计理念借鉴了Spring Data的Repository抽象和Spring Web的WebClient设计——用Fluent API屏蔽复杂性,用默认约定减少配置量。

ChatClient的核心设计原则有三条:

  1. Fluent链式调用: 所有配置通过方法链完成,代码即文档
  2. 默认值合理: 开箱即用的配置能满足80%的场景
  3. 可组合可覆盖: 全局默认配置 + 请求级覆盖,灵活而不混乱

2.2 同步/流式/工具调用三种模式

ChatClient支持三种调用模式,覆盖了从简单对话到复杂Agent编排的全部场景:

同步模式: 最基础的调用方式,适用于单轮对话或简单的问答场景。调用call()方法,阻塞等待模型响应完成。

// 同步调用 - 最简单的形式
String response = chatClient.prompt()
    .user("请用Java写一个快速排序算法")
    .call()
    .content();

流式模式: 适用于需要实时展示生成过程的场景,如聊天界面、实时翻译等。调用stream()方法,返回Flux<String>响应式流。

// 流式调用 - 实时输出
Flux<String> stream = chatClient.prompt()
    .user("请详细解释Spring Boot自动配置原理")
    .stream()
    .content();

// 在WebFlux环境中直接返回SSE
@GetMapping(value = "/chat/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> streamChat(@RequestParam String message) {
    return chatClient.prompt()
        .user(message)
        .stream()
        .content();
}

工具调用模式: Agent能力的核心,允许模型自主决定调用外部工具。通过tools()方法注入工具函数,模型根据用户意图自动选择和执行。

// 工具调用模式
String response = chatClient.prompt()
    .user("查询北京今天的天气并给出出行建议")
    .tools(weatherService.getWeatherFunction(), mapService.getRouteFunction())
    .call()
    .content();

2.3 ChatClient配置与基础用法

以下是一个完整的ChatClient配置示例,展示了如何在Spring Boot 4.0中进行生产级配置:

@Configuration
public class ChatClientConfig {

    @Bean
    public ChatClient chatClient(ChatClient.Builder builder) {
        return builder
            // 全局系统提示词
            .defaultSystem("""
                你是一个专业的Java技术助手,精通Spring生态全家桶。
                回答时请结合代码示例,确保技术准确性。
                如果问题超出你的知识范围,请诚实告知。
                """)
            // 全局默认工具
            .defaultTools(codeSearchTool, documentationTool)
            // 启用结构化输出
            .defaultAdvisors(new MessageChatMemoryAdvisor(chatMemory))
            // 默认温度参数
            .defaultOptions(ChatOptions.builder()
                .temperature(0.7)
                .topP(0.9)
                .build())
            .build();
    }
}

ChatClient调用流程

上图展示了ChatClient从请求构建到响应返回的完整调用链路。用户请求经过System Prompt注入、工具注册、Advisor链处理、模型调用、工具执行循环、响应解析等多个阶段,最终返回结构化结果。其中Advisor链的设计借鉴了Servlet Filter的理念,可以在调用链中插入记忆管理、日志审计、Token计量等横切关注点。


三、Skills Agent:渐进式披露的Agent设计模式

3.1 Skills Agent核心概念

Skills Agent是Spring AI 2.0中引入的一种Agent设计模式,其核心思想源自UI/UX设计领域的渐进式披露(Progressive Disclosure)原则。

传统Function Calling的做法是将所有可用工具的描述一次性注入到模型的上下文中。当工具数量较少(10个以内)时,这种方式工作良好。但在企业级Agent场景中,工具数量往往达到数十甚至上百个——数据库查询工具、API调用工具、文件操作工具、消息通知工具……一次性注入所有工具描述会带来两个严重问题:

  1. Token浪费: 每个工具的描述占用数百Token,100个工具就是数万Token的固定开销
  2. 选择噪声: 过多的工具选项会降低模型的选择准确率,类似于"选择的悖论"

Skills Agent的解决方案是:不一次性暴露所有工具,而是根据用户意图分层级、按需加载工具。就像手机App不会把所有功能都堆在首屏,而是通过分类、搜索、层级导航来逐步引导用户找到所需功能。

具体来说,Skills Agent将工具组织为两层结构:

  • 技能层(Skills): 高层能力描述,每个Skill是一组相关工具的"入口"。Skill的描述简洁精炼,Token开销小
  • 工具层(Tools): 具体的执行函数,隶属于某个Skill。只有在模型选择了某个Skill后,该Skill下的具体工具才会被加载到上下文中

3.2 与传统Function Calling的区别

为了更清晰地理解Skills Agent的价值,我们对比一下传统Function Calling和Skills Agent的差异:

传统Function Calling流程:

用户提问 → [注入全部100个工具描述] → 模型选择工具 → 执行工具 → 返回结果

Skills Agent流程:

用户提问 → [注入10个Skill描述] → 模型选择Skill → [注入该Skill下的5个工具描述] → 模型选择工具 → 执行工具 → 返回结果

在工具数量较多的场景中,Skills Agent的优势尤为明显:初始上下文中的Token开销从"100个工具的完整描述"降为"10个Skill的简短描述",减少了约80%的Token消耗。同时,模型每次只需要在较小的工具集中做选择,准确率显著提升。

3.3 Skills Agent配置

以下是一个Skills Agent的配置示例,展示了如何定义技能层级和工具注册:

@Configuration
public class SkillsAgentConfig {

    @Bean
    public SkillsAgent skillsAgent(ChatClient.Builder builder) {
        return SkillsAgent.builder(builder)
            // 定义技能组 - 数据查询技能
            .skill("database_query", "数据库查询能力,支持SQL查询、表结构查询、数据统计")
                .tool("executeSql", this::executeSql, 
                    "执行SQL查询语句,返回查询结果")
                .tool("describeTable", this::describeTable, 
                    "查询数据库表的字段结构和索引信息")
                .tool("getDataStats", this::getDataStats, 
                    "获取表的数据量统计和分布信息")
            // 定义技能组 - API集成技能
            .skill("api_integration", "外部API集成能力,支持REST API调用和数据转换")
                .tool("callRestApi", this::callRestApi,
                    "调用外部REST API并返回结构化响应")
                .tool("transformData", this::transformData,
                    "对API响应数据进行格式转换和字段映射")
            // 定义技能组 - 文件操作技能
            .skill("file_operations", "文件处理能力,支持读写、搜索、格式转换")
                .tool("readFile", this::readFile,
                    "读取文件内容,支持txt、csv、json等格式")
                .tool("searchFiles", this::searchFiles,
                    "在指定目录中搜索匹配的文件")
            .build();
    }

    // 调用Skills Agent
    public String chat(String userMessage) {
        return skillsAgent.chat(userMessage);
    }
}

Skills Agent渐进式披露

上图展示了Skills Agent的两阶段工具加载过程。第一阶段,模型基于用户意图从技能列表中选择合适的Skill(相当于"选择进入哪个功能模块");第二阶段,被选中的Skill下的具体工具被加载,模型再从中选择需要执行的工具函数。这种两阶段设计既减少了Token开销,又提高了工具选择的精确度。


四、三种工具调用模式对比:Function Calling vs MCP vs Skills

在Spring AI 2.0中,开发者有三种方式让Agent调用外部工具。理解它们的差异和适用场景,是做好技术选型的关键。

4.1 九维度对比

维度Function CallingMCP协议Skills Agent
工具定义方式Java方法 + @Tool注解@McpTool注解 + MCP协议分层Skill + Tool结构
协议类型HTTP直连模型API标准化MCP协议(HTTP/SSE)基于Function Calling上层封装
工具发现编译时静态注册运行时动态发现两阶段渐进式发现
跨语言支持不支持(绑定Java)天然支持(JSON协议)不支持(绑定Java)
Token效率低(全量注入)中(按Server分组)高(按需加载)
工具数量上限20-30个为宜100+(按Server拆分)100+(按Skill拆分)
部署独立性工具与Agent同进程工具可独立部署为Server工具与Agent同进程
适合场景工具少、快速原型多团队协作、跨服务复杂Agent、多技能场景
生产就绪度成熟稳定快速成熟中较新,持续演进

三种工具调用模式对比

4.2 选型建议

基于实战经验,我给出以下选型建议:

选Function Calling的场景: - 工具数量在10个以内,无需复杂的工具管理 - 快速原型验证或个人项目 - 团队纯Java技术栈,不涉及跨语言协作

选MCP协议的场景: - 多个团队分别维护不同的工具服务,需要标准化接口 - 工具服务需要独立部署、独立扩缩容 - 存在跨语言工具实现(Python算法服务、Go高性能服务等) - 需要工具的运行时动态发现和热更新

选Skills Agent的场景: - 工具数量多(30+),需要精细化的工具组织 - 对Token消耗敏感,需要优化上下文长度 - Agent能力需要分层管理(基础能力 + 高级能力 + 专家能力) - 需要动态调整Agent的能力边界

生产环境的最佳实践是组合使用: 用MCP协议解决跨服务的工具标准化问题,用Skills Agent解决单Agent内的工具组织与Token优化问题。在下一节的实战中,我们将展示这种组合方案的具体实现。


五、实战:Spring Boot 4.0 + MCP协议集成

5.1 MCP依赖配置

MCP(Model Context Protocol)是Anthropic提出的开放式协议,用于标准化AI模型与外部工具之间的通信。Spring AI 2.0通过spring-ai-starter-mcp-client提供了第一公民级别的MCP支持。

首先,在pom.xml中添加MCP相关依赖:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>4.1.0</version>
</parent>

<dependencies>
    <!-- Spring Boot Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring AI OpenAI Starter -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-starter-model-openai</artifactId>
    </dependency>

    <!-- Spring AI MCP Client -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-starter-mcp-client</artifactId>
    </dependency>

    <!-- Spring AI MCP Server (SSE传输) -->
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-bom</artifactId>
            <version>2.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

5.2 MCP Client端配置

application.yml配置:

spring:
  ai:
    openai:
      api-key: ${OPENAI_API_KEY}
      chat:
        options:
          model: gpt-4o
          temperature: 0.7
    mcp:
      client:
        # 配置MCP Server连接
        servers-configuration: classpath:mcp-servers.json

mcp-servers.json配置:

{
  "mcpServers": {
    "database-tools": {
      "transport": "sse",
      "url": "http://localhost:8081/mcp"
    },
    "weather-tools": {
      "transport": "sse",
      "url": "http://localhost:8082/mcp"
    },
    "document-tools": {
      "transport": "sse",
      "url": "http://localhost:8083/mcp"
    }
  }
}

Java配置类:

@Configuration
public class McpClientConfig {

    @Bean
    public ChatClient agentChatClient(
            ChatClient.Builder builder,
            List<McpToolCallbackProvider> mcpToolProviders) {

        // 收集所有MCP Server的工具
        List<ToolCallback> allMcpTools = mcpToolProviders.stream()
            .flatMap(provider -> provider.getToolCallbacks().stream())
            .toList();

        return builder
            .defaultSystem("""
                你是一个智能助手,可以查询数据库、获取天气信息、
                搜索和分析文档。请根据用户需求选择合适的工具来完成任务。
                """)
            .defaultTools(allMcpTools.toArray(new ToolCallback[0]))
            .defaultAdvisors(
                new MessageChatMemoryAdvisor(chatMemory),
                new SimpleLoggerAdvisor()
            )
            .build();
    }
}

5.3 MCP Server端实现

MCP Server使用@McpTool注解声明式定义工具,Spring AI会自动将其暴露为标准的MCP协议端点:

@RestController
public class DatabaseMcpServer {

    private final JdbcTemplate jdbcTemplate;

    public DatabaseMcpServer(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @McpTool(description = "执行SQL查询并返回结果集。支持SELECT语句,自动限制返回1000行。")
    public QueryResult executeQuery(
            @ToolParam(description = "要执行的SQL查询语句") String sql) {

        // 安全校验:仅允许SELECT语句
        if (!sql.trim().toUpperCase().startsWith("SELECT")) {
            throw new IllegalArgumentException("仅支持SELECT查询语句");
        }

        List<Map<String, Object>> results = jdbcTemplate.queryForList(sql);
        return new QueryResult(results.size(), results);
    }

    @McpTool(description = "获取指定数据库表的 schema 信息,包括字段名、类型和注释。")
    public TableSchema describeTable(
            @ToolParam(description = "数据库名称") String database,
            @ToolParam(description = "表名称") String tableName) {

        String sql = """
            SELECT COLUMN_NAME, COLUMN_TYPE, COLUMN_COMMENT 
            FROM INFORMATION_SCHEMA.COLUMNS 
            WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?
            ORDER BY ORDINAL_POSITION
            """;

        List<Map<String, Object>> columns = jdbcTemplate.queryForList(
            sql, database, tableName);
        return new TableSchema(tableName, columns);
    }

    @McpTool(description = "列出指定数据库中的所有表,返回表名和行数。")
    public List<TableInfo> listTables(
            @ToolParam(description = "数据库名称") String database) {

        String sql = """
            SELECT TABLE_NAME, TABLE_ROWS, CREATE_TIME 
            FROM INFORMATION_SCHEMA.TABLES 
            WHERE TABLE_SCHEMA = ? 
            ORDER BY TABLE_NAME
            """;

        return jdbcTemplate.queryForList(sql, database).stream()
            .map(row -> new TableInfo(
                (String) row.get("TABLE_NAME"),
                ((Number) row.get("TABLE_ROWS")).longValue(),
                (String) row.get("CREATE_TIME")
            ))
            .toList();
    }

    // DTO定义
    record QueryResult(int rowCount, List<Map<String, Object>> data) {}
    record TableSchema(String tableName, List<Map<String, Object>> columns) {}
    record TableInfo(String name, long rows, String createTime) {}
}

5.4 完整的Agent调用链路代码示例

下面是一个完整的Controller,展示了从用户请求到Agent执行的完整链路:

@RestController
@RequestMapping("/api/agent")
public class AgentController {

    private final ChatClient chatClient;

    public AgentController(ChatClient chatClient) {
        this.chatClient = chatClient;
    }

    @PostMapping("/chat")
    public AgentResponse chat(@RequestBody ChatRequest request) {
        long startTime = System.currentTimeMillis();

        String response = chatClient.prompt()
            .user(request.getMessage())
            .call()
            .content();

        long duration = System.currentTimeMillis() - startTime;

        return new AgentResponse(
            response,
            duration,
            "success"
        );
    }

    @PostMapping("/chat/stream")
    public SseEmitter streamChat(@RequestBody ChatRequest request) {
        SseEmitter emitter = new SseEmitter(60_000L);

        chatClient.prompt()
            .user(request.getMessage())
            .stream()
            .content()
            .subscribe(
                chunk -> {
                    try {
                        emitter.send(SseEmitter.event()
                            .data(chunk));
                    } catch (IOException e) {
                        emitter.completeWithError(e);
                    }
                },
                error -> emitter.completeWithError(error),
                emitter::complete
            );

        return emitter;
    }
}

record ChatRequest(String message) {}
record AgentResponse(String content, long durationMs, String status) {}

当用户发送"查询order表中最近7天的订单总额"这样的请求时,完整的执行链路如下:

  1. 请求接入: Controller接收用户请求,调用ChatClient
  2. Prompt构建: 注入系统提示词 + 用户消息 + MCP工具描述
  3. 模型推理: 模型分析意图,决定调用executeQuery工具
  4. MCP调用: 通过MCP Client向Database MCP Server发送工具调用请求
  5. 工具执行: MCP Server执行SQL查询,返回结果
  6. 结果回传: 模型基于查询结果生成自然语言回答
  7. 响应返回: 将最终回答返回给用户

整个过程中,开发者只需要关注业务逻辑(工具的实现),而不需要处理协议适配、重试机制、错误处理等基础设施问题——这些都由Spring AI的MCP Client和ChatClient框架自动处理。


六、性能优化与生产实践

6.1 并发调度(Overlap Scheduler)

Agent调用链路中存在大量IO等待时间:模型推理需要等待API响应,工具执行需要等待数据库查询,多个工具之间可能是串行依赖关系。Overlap Scheduler的核心思想是在这些等待时间内启动可以并行的任务,最大化资源利用率。

Spring AI 2.0引入了OverlapScheduler,可以自动分析Agent调用链路中的依赖关系,将无依赖的工具调用并行化执行:

@Configuration
public class OverlapConfig {

    @Bean
    public OverlapScheduler overlapScheduler() {
        return OverlapScheduler.builder()
            .maxConcurrentToolCalls(5)    // 最大并行工具调用数
            .timeout(Duration.ofSeconds(30)) // 单次调度超时
            .build();
    }
}

当Agent需要同时调用多个独立工具时(例如同时查询天气、汇率和新闻),Overlap Scheduler可以将原本串行耗时10秒的操作压缩到3-4秒完成。

6.2 Token优化策略

Token消耗是Agent应用的主要成本来源。以下是在Spring Boot 4.0中的几项关键优化策略:

策略一:Skills Agent减少工具Token。 如前文所述,通过渐进式披露将初始工具描述Token减少80%以上。

策略二:对话窗口裁剪。 通过ChatMemory的窗口策略,控制注入上下文的对话轮数:

@Bean
public ChatMemory chatMemory() {
    return InMemoryChatMemory.builder()
        .maxMessages(20)  // 保留最近20轮对话
        .build();
}

策略三:System Prompt精简。 系统提示词应该精炼到核心指令,避免冗长的背景描述。一个好的System Prompt应该在200个Token以内。

策略四:工具描述优化。 每个工具的description字段是最容易被忽视的Token消耗点。用简洁的祈使句描述工具功能,避免重复语义:

// 差:冗余描述,浪费Token
@Tool(description = "这个工具可以用来执行SQL查询语句,"
    + "你可以在需要查询数据库数据的时候使用这个工具,"
    + "支持各种SELECT查询")
public String query(String sql) { ... }

// 好:简洁精准
@Tool(description = "执行SELECT查询语句,返回数据库查询结果")
public String query(String sql) { ... }

6.3 错误处理与重试

生产环境中,模型API限流、工具调用超时、网络抖动等问题是常态。Spring AI 2.0通过Advisor机制提供了优雅的错误处理和重试策略:

@Configuration
public class ResilienceConfig {

    @Bean
    public ChatClient resilientChatClient(ChatClient.Builder builder) {
        return builder
            .defaultAdvisors(
                // 重试Advisor:模型调用失败时自动重试
                new RetryAdvisor(
                    RetrySettings.builder()
                        .maxAttempts(3)
                        .backoff(BackoffSettings.builder()
                            .initialInterval(Duration.ofMillis(500))
                            .multiplier(2.0)
                            .maxInterval(Duration.ofSeconds(5))
                            .build())
                        .retryableExceptions(
                            RateLimitException.class,
                            TimeoutException.class
                        )
                        .build()
                ),
                // 降级Advisor:所有重试失败后的兜底策略
                new FallbackAdvisor("当前服务繁忙,请稍后重试。")
            )
            .build();
    }
}

对于MCP工具调用的错误处理,Spring AI的MCP Client内置了以下机制:

  • 连接超时自动重连: 与MCP Server的SSE连接断开时,自动尝试重新建立连接
  • 工具调用超时: 单个工具调用超过配置的超时时间后自动中断,避免阻塞整个Agent链路
  • 熔断保护: 当某个MCP Server连续失败超过阈值时,暂时熔断该Server的工具调用,快速返回错误而非无限等待

Overlap调度器

上图展示了Overlap Scheduler在Agent调用链路中的应用。深色区块表示实际的计算/IO操作,浅色区块表示等待时间。通过Overlap调度,原本串行的工具调用被重新编排为并行执行,总耗时从T1+T2+T3降低到max(T1, T2, T3),在有大量独立工具调用的Agent场景中,性能提升可达3-5倍。


总结

Spring Boot 4.1.0 GA + Spring AI 2.0.0 GA的组合,标志着Java开发者在AI Agent领域不再是"追赶者"。ChatClient提供了优雅的统一交互入口,Skills Agent创新性地将渐进式披露设计模式引入Agent工具管理,而MCP协议的集成则让Java Agent具备了与多语言工具生态互通的能力。

对于Java开发者而言,这意味着:

  1. 无需切换技术栈: 用熟悉的Spring Boot构建AI Agent,复用现有的Java生态
  2. 工程化能力完整: 从配置管理、依赖注入到监控运维,Spring Boot的工程化基因天然适配Agent的生产部署
  3. 生态开放性: MCP协议打破了语言边界,Java Agent可以调用Python的算法工具、Go的高性能服务等

"大模型工程师修炼手记"付费专栏持续更新中,已覆盖大模型微调、推理优化、RAG系统、向量数据库、Agent编排等全链路工程化主题。如果你正在或即将踏入大模型工程化领域,欢迎关注专栏,一起构建属于Java开发者的AI工程化知识体系。


作者: Tom·Ge | 专栏: 大模型工程师修炼手记 | 原文首发: CSDN


📚 延伸阅读 · 我的付费专栏

觉得这篇文章对你有帮助?我把同类主题的系统化内容沉淀成了付费专栏,欢迎订阅支持持续输出:

专栏定价内容
大模型工程师修炼手记19.9 元AI 编程 / Agent 深度实战
AI时代程序员的自我提升49.9 元AI 时代成长方法论

💡 一杯咖啡的价格,换来系统化的知识体系;你的订阅,是我持续创作的最大动力。

💬 本文配套代码 / 资料包:欢迎在评论区留言「求代码」,我会私信发送完整资源!

Spring AI 2.0实战:Java开发者快速构建多模型Agent应用 在AI应用开发逐渐成为后端标配的今天,Java开发者面临着从Python生态迁移的困惑。Spring AI作为Java领域的原生AI开发框架,以Spring Boot的自动配置、依赖注入和类型安全为核心,为大模型接入提供了一套完整的工程化解决方案。它通过ChatModel统一多模型调用、@Tool实现函数调用、MCP打通外部工具协议、Skills封装业务能力、Agent编排对话流程,让Java团队无需改变技术栈即可构建企业级AI应用。本文从最基础的ChatModel抽象讲起,逐步剖析Spring AI 2. 阅读详情

相关推荐

Spring AI 2.0实战:Java开发者构建智能客服Agent全流程

Java后端开发者在构建AI应用时,常面临多模型差异、对话状态管理复杂、工具调用集成繁琐等挑战。Spring AI作为Java生态的AI应用开发框架,通过统一ChatModel抽象、ChatClient链式API、@Tool注解函数调用及MCP协议标准化,将大模型接入变成类似操作数据库的工程实践。其2.0版本强化了多模型接入支持,可无缝对接OpenAI、通义千问等厂商,并内置工具调用与Agent编排能力,使业务系统能够快速实现订单查询、天气服务等场景化功能。本文从核心概念出发,详解Spring Boot项目

aoe41606的博客 398

我翻了几十个 Spring Skills 仓库,留下了这 6 个真正能打的

前几天你可能还在看别人讨论 Agent 怎么写 Prompt,转头就已经有人把整套 Spring Boot 最佳实践封装成了一个 SKILL.md,直接让 AI 按规范生成项目。04 | agent-skill-java-spring-framework:专门治 AI 的老代码病。08 | spring-ai-agent-utils:在 Spring Boot 里自己造 Agent。07 | spring-testing-skills:终于有人治 AI 写测试了。

良月柒 1292

Spring AI 2.0实战:多模型接入+Tools+MCP+Skills+Agent全栈开发

大模型应用开发已成为Java后端工程师的新方向,如何将模型能力与现有业务系统深度融合是关键。函数调用(Function Calling)作为连接模型与外部世界的桥梁,让AI能实时查询数据、执行操作;而MCP协议则进一步标准化了工具与数据源的接入方式,使模型可灵活调用远程服务。在此基础上,Skills将常用提示词与处理流程封装为可复用技能,降低复杂任务的失控风险。Agent编排则赋予模型自主规划、多步推理与工具调用的能力,真正实现从「问答」到「行动」的跃迁。本文以Spring Boot为底座,通过Spring

weixin_30983353的博客 364

【Spring Boot 4】Spring Boot 4.0 AI Agent实战:Skills Agent + MCP协议集成_springboot4开发skill-CSDN博客

2026年6月,Spring Boot 4.1.0 GA正式发布,基于Spring Framework 7.0全面重构。与此同时,Spring AI 2.0.0 GA同步发布,标志着Java生态中AI Agent开发正式进入"生产级"时代。作为一名在LLM工程化领域持续深耕的技术博主,我的付费专栏**“大模型工程师修炼手记”**(30篇系列)已经覆盖了大模型从微调、部署、推理优化到RAG系统的全链路工程化知识。

求知若渴、虚心若愚 450

基于立创开源ESP32步进电机驱动板硬件设计与优化实践

本文详细介绍了基于立创开源平台的ESP32步进电机驱动板硬件设计与优化实践。重点解析了ESP32-PICO-D4与A4950驱动芯片的选型搭配、电源电路噪声隔离、PCB布局布线技巧以及保护电路设计,为开发者提供了从原理图到PCB的完整优化方案,有效提升驱动板的性能与稳定性。

7z8x2c4v6b9的博客 638

强化学习(Q-learning、DQN) —— 理论、案例与交互式 GUI 实现

本文详细介绍了强化学习中基于值函数的 Q-learning 算法及深度强化学习的 DQN 方法,从基本理论、数学模型到算法流程均进行了全面阐述。通过迷宫导航、股票交易策略和机器人控制等典型案例,展示了强化学习在处理高维、非线性和时变问题中的强大适应性。为了帮助工程师和研究者更直观地理解强化学习的训练过程,本文还提供了一份基于 Python 与 PyQt6 实现的交互式 GUI 演示系统代码示例,用户可以在线调整参数,实时观察累计奖励和 Q 值的变化,从而更深入地理解算法收敛和策略演化的过程。

闲人编程的博客 1463

SpringBoot 相关 Skills 全景指南

本文系统梳理了Spring Boot开发者所需掌握的完整技能体系,涵盖核心基础、Web开发、数据访问、测试、安全监控及高级扩展六个维度。从自动配置原理、RESTful API设计、SQL/NoSQL集成到单元测试、安全框架应用、异步任务处理等,构建了全面的Spring Boot技能树。文章不仅指导开发者掌握基本功能使用,更深入探讨了生产级应用所需的分布式定时任务、多级缓存等高级特性,为构建健壮、高效、可维护的Spring Boot应用提供了完整的知识框架和学习路径。

m0_73571447的博客 312

从 Integrated Configuration 到 Integration Flow,SAP PI/PO 老配置迁移的一次温和重构

很多还在运行 SAP PI/PO 的系统,Integration Directory 里都积累了不少 Integrated Configuration,也就是日常项目里常说的 ICO。它们可能稳定运行了多年,负责把采购订单、物料主数据、客户主数据、发票、发货通知从一个系统送到另一个系统。问题在于,ICO 这种对象很实用,却不够直观。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 81

10 个使用 Spring Boot 4 的开发技巧,太惊艳了!

Spring Boot 4 不是那种「换个版本号、修几个 bug」的小更新。API 版本管理、HTTP Service Client、RestTestClient、OpenTelemetry Starter……这些都是日常开发里真的会用到的东西。建议做法:新建一个小 demo 项目,把本文技巧 1、2、4 先跑起来,感受一下写法上的变化。等有新项目或者老项目稳定期,再规划完整迁移。

java1234的博客 275

十九、帧间预测编码_2、解码、显示顺序与图像管理、参考帧管理

一、基本概念 1.1H.264的解码顺序和显示顺序: 解码过程中,每一帧的数据按照相应的NAL Unit在码流中的顺序传入解码器进行解码 由于B帧的存在,视频帧在输出时会进行顺序重排 1.2frame_num与POC frame_num:表示解码顺序 POC:表示显示顺序(picture_order_count) 在H.264的码流中,表示解码顺序和显示顺序分别有相应的语法元素表示。这两个值都会在码流中保存,并在读取slice信息时解析(SliceHeader中) 1.3参考帧列表 某一帧图像在解

叮咚的博客 1323

OP-TEE虚拟化支持详解

OP-TEE虚拟化支持解析 OP-TEE提供实验性虚拟化方案,支持多虚拟机共享安全执行环境。核心特性包括: 配置选项:CFG_VIRTUALIZATION启用虚拟化,CFG_VIRT_GUEST_COUNT限制虚拟机数量并分配均等内存资源; Hypervisor协作:需实现虚拟机生命周期通知、SMC参数转换、内存固定等关键协议; 当前限制:仅支持Armv8架构,硬件资源共享有限,采用静态内存配额机制; 架构实现:通过MMU分区切换和扩展内存分配器实现多租户隔离,Nexus核心层管理虚拟机上下文。该方案适用于

Linux内核架构师 106

Spring Boot 4 整合46篇教程,Spring Boot 4 企业级项目开发完整实践指南

兄弟们,鹏磊我这次整了个大活,把 Spring Boot 4 的整合教程都给你整理出来了,一共 46 篇,从基础框架到云原生部署,该有的都有了。

架构师专栏 1782

华为OD技术面真题 - Python开发 - 2

汇总华为OD技术面八股Python八股,高频技术真题并提供详细解答。

qq_45776114的博客 900

【Spring Boot 4】Spring Boot 4.0 AI Agent实战:Skills Agent + MCP协议集成与TaoToken统一通道配置

Spring Boot 4.0 集成 Skills Agent 与 MCP 协议时,用 TaoToken 统一通道配置 application.yml,一个 Base URL 切换多模型。本文交付可复制的技能组定义、MCP 客户端配置与启动验证动作,解决工具注册混乱与多 Key 管理问题。详见 https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_42600128的博客 9

关于Fluent模拟中的动态接触角UDF实现,详细设计

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1134

在 ABAP CDS View 里把 Conversion Functions 用到极致:FLTP 精度、单位换算、货币换算与小数位处理的工程化实践

数据格式转换在真实项目中比业务逻辑更容易引发问题。ABAP CDS中的转换函数(如FLTP_TO_DEC、UNIT_CONVERSION、CURRENCY_CONVERSION和DECIMAL_SHIFT)可帮助在数据库层统一数据口径,避免应用层重复处理。这些函数支持数值精度治理、单位换算、货币转换和小数位调整,能显著提升报表性能并减少逻辑分散。通过将格式转换前移到数据模型层,可以确保服务层和UI层的数据一致性,同时降低接口传输错误风险。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2345

手把手带你用 Spring AI 2.0 搭建 AI Agent 平台

基于 **Spring Boot 4.0.8 + Spring AI 2.0.1 + DeepSeek**,从零搭建一个覆盖 Tool Calling、MCP、RAG、ReAct、Skills、安全认证、弹性容错的 AI Agent 平台。115 个测试用例、五层架构、双环境 Profile,跟着做一遍,Spring AI 2.0 核心能力全部落地。

一起探索IT的世界 1048

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

从Web到AI:Agent Skills CI/CD流水线集成实战指南

Web开发者熟悉的CI/CD流水线,在AI时代正经历革命性重构。当我们在Spring Boot项目中配置Jenkins流水线时,是否思考过:如何将同样的工程化思维注入Agent Skills开发?

沛哥儿的专栏 1851

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

我把 Spring Boot 升级到 4.0.2 后,顺手重构了整个 AI 脚手架:删模块、加 Skills Agent、补 Resume RAG

摘要: Spring Boot 4.0.2升级引发AI工程架构全面重构,从依赖升级(Spring Cloud、LangChain4j等)到模块收敛(淘汰冗余模块,强化Skills Agent和Resume RAG主线),彻底解决历史包袱与文档脱节问题。核心变化包括:Starter体系重定基线、Skills Agent实现工程化闭环(对话管理+前端支持)、Resume RAG落地业务场景(简历解析→检索全链路)。升级暴露的"小问题"(如状态同步、Git管理边界)实际指向架构设计缺陷,最终推

JIANqiao19931029的博客 581

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Agent Skills 不是插件而是 AI 行为包:概念、原理与 Spring Boot 实战

在 AI 编程工具快速迭代的今天,提示词工程与 AI Agent 已成为开发者提升效率的核心手段。然而,很多人对 Agent Skills 的理解仍停留在“插件”层面,导致技能包无法被 AI 正确触发。实际上,Agent Skills 是一组面向 AI 的行为描述与可执行资源,它不依赖钩子或接口,而是由 AI 依据用户意图动态加载,本质上是将可复用的做事方法沉淀为行为包。这种机制解决了传统提示词难以结构化复用的问题,正在重新定义 AI 开发者的能力边界。从技术价值看,它让 AI 不仅能“生成代码”,更能按照

weixin_30847939的博客 273

Web开发者转型AI:Agent Skills团队知识共享机制实战——从GitLab到AI技能库

“企业级知识共享不是功能的堆砌,而是信任的流动” 当你的技能详情页显示:“本技能已为3个团队节省¥840万” 当你的合规检查提示:“缺少人工复核通道(监管禁止项)” 当你的价值报告生成:“张工因技能复用获得季度创新奖金” 你已从Web开发者成长为企业级AI价值架构师。

沛哥儿的专栏 2290

让 AI 学会用工具:基于 LangChain4j 的 Skills Agent 全栈落地实战

本文介绍如何基于 LangChain4j 1.12.2 + Spring Boot 4.0.2 实现一个可独立部署的 Skills Agent 服务。核心思路:工具定义写成 Markdown 文件,AI 自动加载调用;配合 Redis 多轮记忆滑动窗口与摘要压缩解决 context 爆炸问题;前端 Vue3 提供完整的会话管理、模型切换、流式对话界面。附完整架构图、核心代码与五分钟上手指南。

JIANqiao19931029的博客 1445

ai-agent框架spring ai alibaba原理源码(三)外部调用II-1 MCP

本文深入剖析SpringAIAlibaba框架的MCP(模型调用协议)实现原理。作为Java AI Agent框架的核心组件,MCP通过标准化协议实现AI模型与外部系统的交互。文章详细解析了MCP的client/server端自动配置机制:client侧通过SyncMcpToolCallbackProvider提供工具调用能力,server侧通过McpSyncServer处理能力请求。重点分析了注解扫描、能力规格构建等关键技术实现,并阐述了MCP与Web服务的集成方式。该框架支持工具、资源、提示词等多种能力

leehom的博客 488

AI Agent 八股文实战指南:从基础认知到面试通关的 21 章学习路线(CodeGuide 版)

> 本文基于 CodeGuide 仓库中的《AI Agent 八股文小册》课程纲要展开,结合仓库内 AI Agent 智能体脚手架([ai-agent-scaffold](https://link.gitcode.com/i/eaebf8e43bcf2dabbcf303c720103c2c))、AI IDE 编程助手([walicode](https://link.gitcode.com/i/21

gitblog_00835的博客 805

Java + Spring实现Hermes Agent之龙虾、Skills、Mcp和沙箱代码执行环境思路

Agent 跑工具调用经常一轮接一轮,要是只把最终回答推给前端,用户那边就是十几秒甚至几十秒的空白,体验很差,出问题也没法排查。我们的做法是把整个工具调用循环里发生的事情都拆成事件吐到 SSE 流里——token 在出、思考在写、工具被调了、工具返回了什么,前端按事件类型渲染就行。记忆解决了"它记得",但 Agent 还差一块——"它能在你不在的时候干活"。JobRunr 要把这条 lambda 序列化进存储里,参数得是简单可序列化的值,存 ID、跑的时候再去仓库捞,是更稳的做法。

Nk4lH64FV的博客 219
上一篇: 【推理引擎2026年中版】SGLang vs vLLM:Qwen3与GLM-5.1双模型实测对比与选型指南
下一篇: Spring之父Rod Johnson携Embabel归来:Java程序员的Agent时代正式开启
Tom·Ge
博客等级 码龄10年 1657粉丝 570原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tom·Ge

来都来了,点个赞呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值