Spring AI 多 Tool + 多 MCP 服务完整实战(支付场景)

我在《金融支付架构实战指南》一书主要讲解的是理论和实现。未涉及到AI结合部分。本文结合AI来做支付实践,给支付带来新的想象力。

Spring AI 真正强大的地方: 同时支持 N 个本地 @Tool + N 个远程 MCP Server,AI 自动路由、自动串行 / 并行调用。

你可以实现:

  • 一句话:支付宝付款 50 → 调用支付宝 MCP

  • 一句话:查微信订单 → 调用微信 MCP

  • 一句话:先支付宝支付,再查订单,再开发票 → AI 自动调用 3 个 MCP/Tool

本文提供完整可运行工程

  1. 本地多 @Tool(支付、查单、退款)

  2. 多个独立 MCP Server(支付宝 MCP、微信 MCP、订单 MCP)

  3. Spring AI 客户端自动发现 + 自动调用

  4. 全套代码,无删减、可直接启动


一、整体架构(最清晰)

用户对话
    ↓
Spring AI ChatClient(自动调度)
    ↓         ↓
本地@Tool    远程 MCP Server(独立微服务)
支付/查单    支付宝MCP | 微信MCP | 订单MCP

二、场景 1:本地多 @Tool(最常用)

1. 工具类(支付 + 查询 + 退款)

@Component
@RequiredArgsConstructor
public class PaymentTools {

    private final AlipayUtil alipayUtil;

    // 工具1:支付
    @Tool(description = "用户需要支付、下单、购买时调用,传入商品名和金额")
    public String pay(
            @ToolParam(description = "商品名称") String subject,
            @ToolParam(description = "金额元") String totalAmount) {
        String orderNo = "LOCAL_" + UUID.randomUUID().toString().replace("-", "");
        return alipayUtil.createPagePay(orderNo, subject, totalAmount);
    }

    // 工具2:查订单
    @Tool(description = "查询订单支付状态,传入订单号")
    public String queryOrder(String orderNo) {
        return "订单:" + orderNo + " → 状态:已支付";
    }

    // 工具3:退款
    @Tool(description = "对订单发起退款,传入订单号和退款金额")
    public String refund(String orderNo, String refundAmount) {
        return "订单:" + orderNo + " → 退款:" + refundAmount + "元 处理中";
    }
}

2. 控制器(一次性绑定所有工具)

@RestController
@RequiredArgsConstructor
public class AiController {
    private final ChatClient chatClient;
    private final PaymentTools paymentTools;

    @GetMapping("/ai/chat")
    public String chat(@RequestParam String msg) {
        return chatClient.prompt()
                .user(msg)
                .tools(paymentTools) // 自动加载类里所有@Tool
                .call()
                .content();
    }
}

3. 测试(AI 自动识别)

  • 帮我付30元开通会员 → 调用 pay ()

  • 查询订单LOCAL_XXX → 调用 queryOrder ()

  • 把订单XXX退15元 → 调用 refund ()

  • 先付20再查订单 → AI 自动连续调用两个工具


三、场景 2:多 MCP Server(企业级微服务)

重点:

MCP = 把工具独立部署为远程服务,Spring AI 自动调用。

你可以启动 3 个独立 MCP 服务

  • AlipayMCPServer(8091)

  • WechatMCPServer(8092)

  • OrderMCPServer(8093)

Spring AI 客户端会自动发现所有工具


第一步:给 AI 客户端添加 MCP 依赖

<!-- MCP 客户端 -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId>
</dependency>

第二步:application.yml 配置多个 MCP

spring:
  ai:
    mcp:
      client:
        servers:
          # 支付宝 MCP
          alipay:
            url: http://127.0.0.1:8091/mcp
          # 微信支付 MCP
          wechat:
            url: http://127.0.0.1:8092/mcp
          # 订单查询 MCP
          order:
            url: http://127.0.0.1:8093/mcp

三、真正可运行:MCP Server 完整代码(补全缺失!)

1)支付宝 MCP Server(独立项目)

pom.xml

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
</dependency>

application.yml

server:
  port: 8091
spring:
  ai:
    mcp:
      server:
        path: /mcp

支付宝 MCP 工具(暴露给 AI 调用)

@Component
public class AlipayMcpTools {

    private final AlipayUtil alipayUtil = new AlipayUtil(); // 可注入

    @Tool(description = "【支付宝】发起支付,传入商品名与金额")
    public String alipayPay(String subject, String totalAmount) {
        String orderNo = "ALI_MCP_" + UUID.randomUUID();
        return alipayUtil.createPagePay(orderNo, subject, totalAmount);
    }
}

启动类

@SpringBootApplication
public class AlipayMcpServer {
    public static void main(String[] args) {
        SpringApplication.run(AlipayMcpServer.class, args);
    }
}

2)微信支付 MCP Server(8092)

一模一样结构,只改端口和工具:

@Tool(description = "【微信支付】发起支付,传入商品名与金额")
public String wechatPay(String subject, String totalAmount) {
    return "微信支付订单创建:" + totalAmount + "元 → " + subject;
}

3)订单查询 MCP Server(8093)

@Tool(description = "【订单服务】查询任意订单状态")
public String queryOrder(String orderNo) {
    return "MCP 查询结果:订单" + orderNo + " 已支付";
}

四、AI 客户端调用(零代码!)

控制器完全不用改!

@GetMapping("/ai/chat")
public String chat(@RequestParam String msg) {
    return chatClient.prompt()
            .user(msg)
            .tools() // ← 不填,自动加载:本地Tool + 所有MCP工具
            .call()
            .content();
}

五、超级震撼测试效果

测试 1:支付宝支付

帮我用支付宝付50元开通会员

→ AI 自动调用 Alipay MCP 的 alipayPay

测试 2:微信支付

帮我用微信付30元买课程

→ AI 自动调用 Wechat MCP 的 wechatPay

测试 3:跨 MCP 串行调用(AI 自动多步执行)

用支付宝付20元,然后帮我查一下订单状态

→ 调用 Alipay MCP → 再调用 Order MCP → 自动返回最终结果

测试 4:本地 Tool + MCP 混合调用

先本地支付,再用MCP查订单

→ 全部自动调度


六、关键原理(必须懂)

1. Spring AI 自动做了什么?

  • 启动时拉取所有 MCP Server 的工具列表

  • 合并本地 @Tool

  • 交给大模型做Function Calling 路由

2. 工具冲突?完全不会

描述里写清楚归属即可

3. 调用模式

  • 单选:单意图 → 调一个工具

  • 串行:多意图 → 自动连续调用

  • 并行:模型支持 → 同时调多个


七、生产级最佳实践

  1. MCP 单独部署,解耦 AI 服务

  2. MCP 内部做鉴权、验签、限流、熔断

  3. 工具 description 越精准,AI 越不会错

  4. 本地 Tool 适合轻逻辑,MCP 适合微服务 / 第三方支付

  5. 本地 Tool + MCP 可混合使用,Spring AI 原生支持


八、总结

Spring AI 支持:

✅ 本地多 @Tool

✅ 多个远程 MCP Server

✅ 自动识别、自动路由、自动串行调用

✅ 支付 + 查单 + 退款 + 微信 + 支付宝 全套打通

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值