Spring AI 跑支付 Tool+MCP:Key 用 TaoToken
2026/9/19 19:14:43 网站建设 项目流程

一、当 Spring AI 同时挂载多个支付工具,Key 这一层该怎么接

在 Spring AI 里把本地@Tool和远程 MCP Server 混着用,是这两年被问得最多的组合场景之一。原因很直接:支付、查单、退款这类动作,天然适合拆成独立工具——本地轻逻辑用@Tool写,第三方支付、订单中心这种跨团队服务用 MCP 暴露成远程工具,让ChatClient在启动时自动发现、运行时自动路由。

但真正跑起来之后,很多人会卡在同一个地方:模型 Key 这一层怎么配。Spring AI 的ChatClient需要一个可用的模型端点,而支付场景里一次对话可能触发三到四次函数调用(先支付、再查单、再退款),每一次调用都要走一遍模型推理。如果 Key 这一层没有统一通道,你很难看清"哪一步调用成功了、哪一步 Token 花在哪"。

这篇就按"本地多@Tool+ 多 MCP Server"的支付实战结构,把模型 Key 这一层改接TaoToken:先打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 创建一个 Key,然后把ChatClient对应的base-url填成https://taotoken.net/api。其余@Tool定义、MCP url、自动路由逻辑,一行都不用动。


二、TaoToken 前置:Key 与 base-url 的对应关系

在动手改配置之前,先把三个东西对齐,后面所有代码都围绕它们展开:

  • 官网入口:https://taotoken.net/?utm_source=taotoken_aicg_blog_end ,注册后在控制台创建 Key。
  • API 端点https://taotoken.net/api,这是 Spring AI 里base-url要填的值。
  • Key 占位YOUR_API_KEY,实际使用时替换成控制台里复制出来的那串。

需要强调的是,TaoToken 在这里扮演的是模型调用通道的角色,不是替代 Spring AI,也不是替代你的支付工具。@Tool还是你写的@Tool,MCP Server 还是你部署的 MCP Server,Spring AI 的自动发现和自动串行/并行调用逻辑完全保留。变的只是"模型请求发往哪里"——从原来直连某家厂商,改成统一走 TaoToken。

这样做的直接好处是:当用户说"先支付宝付款,再查订单,然后退款"时,Spring AI 编排出的每一次函数调用,其 Token 计量、计费和结果回传都走同一条通道,官网控制台能直接看到每一步的调用记录。


三、可复制配置:把 ChatClient 的 base-url 指向 TaoToken

3.1 application.yml 里的模型配置

Spring AI 的 OpenAI 兼容 starter 支持通过base-url覆盖默认端点。把这一段改成:

spring: ai: openai: base-url: https://taotoken.net/api api-key: YOUR_API_KEY chat: options: model: YOUR_MODEL_ID temperature: 0.2 mcp: client: servers: alipay: url: http://127.0.0.1:8091/mcp wechat: url: http://127.0.0.1:8092/mcp order: url: http://127.0.0.1:8093/mcp

注意mcp.client.servers这一段保持原样,三个 MCP Server 的地址不动。模型 Key 这一层只改base-urlapi-key两行。

3.2 本地 @Tool 保持不变

支付、查单、退款三个本地工具照常写:

@Component @RequiredArgsConstructor public class PaymentTools { private final AlipayUtil alipayUtil; @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); } @Tool(description = "查询订单支付状态,传入订单号") public String queryOrder(String orderNo) { return "订单:" + orderNo + " → 状态:已支付"; } @Tool(description = "对订单发起退款,传入订单号和退款金额") public String refund(String orderNo, String refundAmount) { return "订单:" + orderNo + " → 退款:" + refundAmount + "元 处理中"; } }

3.3 控制器一次性绑定本地工具 + MCP

@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(); } }

如果希望 MCP 工具也自动加载,.tools()不传参即可,Spring AI 会把本地@Tool和所有 MCP Server 暴露的工具合并后交给模型做 Function Calling 路由。

3.4 MCP Server 侧无需改动

支付宝 MCP(8091)、微信 MCP(8092)、订单 MCP(8093)三个独立服务的pom.xmlapplication.yml@Tool方法全部保持原样。它们只负责把工具暴露成远程服务,不关心模型 Key 走哪条通道。


四、验证请求:一句话触发多步调用

配置改完后,启动 Spring AI 客户端和三个 MCP Server,然后发一条组合指令:

先支付宝付款 20 元,再查一下订单状态,然后退款 5 元

预期行为是 Spring AI 自动编排出一条多步链路:

  1. 调用支付宝 MCP 的alipayPay,创建支付订单;
  2. 调用订单 MCP 的queryOrder,查询订单状态;
  3. 调用本地PaymentTools.refund,发起退款。

每一步的模型推理请求都发往https://taotoken.net/api。调用完成后,打开 TaoToken 控制台,可以看到这一轮对话里每一次函数调用对应的 Token 消耗和调用结果。如果某一步失败,控制台里也能定位到是哪个工具、哪次请求出的问题。

单独验证时也可以拆开测:

  • 帮我用支付宝付 50 元开通会员→ 命中支付宝 MCP;
  • 帮我用微信付 30 元买课程→ 命中微信 MCP;
  • 查询订单 LOCAL_XXX→ 命中本地queryOrder

五、本篇常见错排查

错误 1:base-url末尾多写了/v1

Spring AI 的 OpenAI 兼容 starter 会自行拼接路径。base-urlhttps://taotoken.net/api即可,不要写成https://taotoken.net/api/v1,否则会出现 404。

错误 2:Key 没替换,仍是YOUR_API_KEY

启动后第一次请求就报 401。检查application.yml里的api-key是否已替换成控制台创建的真实 Key。

错误 3:MCP 工具没被发现

如果.tools()不传参但 MCP 工具没被加载,先确认spring-ai-mcp-client-spring-boot-starter依赖已引入,再确认三个 MCP Server 的/mcp路径可访问。模型 Key 这一层的问题不会导致 MCP 发现失败,两者要分开排查。

错误 4:多步调用只执行了第一步

通常是模型对工具description的理解不够精确。支付场景里建议在描述中写清归属,例如【支付宝】发起支付【订单服务】查询任意订单状态,减少路由歧义。

错误 5:串行调用中途超时

支付类工具本身耗时较长,如果模型侧超时设置过短,会在第二步或第三步中断。检查 Spring AI 的 timeout 配置,必要时调大。


六、语义一致的收尾:Key 走 TaoToken,编排仍归 Spring AI

回到这条场景的主线:本地多@Tool(支付、查单、退款)+ 多个远程 MCP Server(支付宝、微信、订单),由 Spring AI 的ChatClient自动发现、自动串行/并行调用。这套编排能力是 Spring AI 提供的,不需要改。

需要改的只有模型 Key 这一层:把原来从大模型厂商申请密钥、配置到 Spring AI 的地方,换成先到 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 创建 Key,再把base-url填成https://taotoken.net/api。这样每次函数调用的 Token 计量、计费和结果回传都走统一通道,控制台能直接看到哪一步调用成功。

如果你正在做长期编码或 Agent 类项目,需要更稳定的调用额度,可以了解 Coding Plan;如果只是想先验证模型对话链路是否通,可以直接用模型对话页面发一条测试请求。接入过程中遇到配置问题,API Keys 页面和接入文档里有完整的参数说明。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询