新闻详情

新闻详情

首页 / 资讯中心 / 详情

Spring AI 搭建 MCP 服务并实现概率计算:TaoToken 统一 Key 接入与配置骨架

发布时间:2026/11/16 6:34:54来源:尧图网络
Spring AI 搭建 MCP 服务并实现概率计算:TaoToken 统一 Key 接入与配置骨架
1. 从「投档分数 500 对 480」说起为什么要把概率计算塞进 MCP先明确这篇要解决的事在 Spring Boot JDK17 环境里用 Spring AI 搭一个 MCP 服务把「概率计算」这类业务能力暴露成工具再让 Trae 这类 AI 工具通过统一 Key 通道调用它。MCP 全称 Model Context Protocol你可以把它理解成 AI 和外部程序之间的「标准插座」——AI 负责理解你说的话插座负责把参数递给真正干活的 Java 方法。适合谁看手里有传统业务系统、想改造成聊天式交互的后端同学已经在用 Spring Boot 3.x、想试水 MCP 的开发者以及需要在 Trae 里挂自建工具、又不想每个模型单独配 Key 的人。我拿一个具体场景贯穿全文用户说「我的投档分数为 500预计院校要求投档最低分为 480求概率」。这句话里有分数、有院校线AI 不该自己瞎算而应该解析出参数、调用我们写好的概率服务、把结果原样返回。整个过程分两半Java 侧把方法注册成 MCP 工具AI 工具侧通过配置连上这个服务。中间那层「统一 Key 接入」用 TaoToken 来做好处是模型通道和 MCP 通道的凭证管理收在一处换模型不用改业务代码。下面按「环境准备 → 服务端骨架 → 统一 Key 配置 → 验证调用 → 排错」的顺序走命令和配置都能直接抄。2. 前置准备JDK17、Spring Boot 3.2 与 TaoToken 统一 Key2.1 版本对齐别在这步翻车Spring AI 的 MCP starter 对版本比较敏感我实测下来这套组合最稳组件版本说明JDK17MCP starter 要求 17别用 8 或 11Spring Boot3.2.4与 spring-ai-bom 1.0.0-M7 匹配spring-ai-bom1.0.0-M7统一管理 Spring AI 依赖版本Trae1.2支持手动添加 MCP Server注意MCP starter 有三个变体选错传输方式会连不上。STDIO 用spring-ai-starter-mcp-serverSpring MVC 的 SSE 用spring-ai-starter-mcp-server-webmvcWebFlux 的 SSE 用spring-ai-starter-mcp-server-webflux。本文走 STDIO因为 Trae 本地拉起 jar 最省事。2.2 拿一个统一 Key到 TaoToken 控制台创建 API Key这个 Key 同时用于模型对话和后续的通道配置。地址是 https://taotoken.net/api Key 生成后先存好后面settings.json和config.toml都要填。如果你还没决定用哪个模型可以先在模型对话页面试一条确认通道通了再往下走https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodel_chat提示Key 只显示一次建议直接写进本地环境变量或配置文件别贴在聊天记录里。3. 可复制配置MCP 服务端骨架与统一 Key 片段3.1 pom.xml 依赖父工程用 dependencyManagement 锁版本子模块只引实际用到的 starter。关键点spring-ai-bom用import作用域spring-ai-starter-mcp-server-webmvc放在dependencies里。project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion parent groupIdcom.hippo.spring.tools.ai/groupId artifactIdspringboot-ai-demos/artifactId version1.0-SNAPSHOT/version /parent groupIdcom.hippo.spring.tools.ai.springai.mcp/groupId artifactIdspringai-mcp-server-demo/artifactId packagingjar/packaging properties maven.compiler.source17/maven.compiler.source maven.compiler.target17/maven.compiler.target project.build.sourceEncodingUTF-8/project.build.sourceEncoding /properties dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-bom/artifactId version1.0.0-M7/version typepom/type scopeimport/scope /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-parent/artifactId version3.2.4/version /dependency /dependencies /dependencyManagement dependencies dependency groupIdorg.springframework.ai/groupId artifactIdspring-ai-starter-mcp-server-webmvc/artifactId /dependency dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId /dependency /dependencies build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId configuration mainClasscom.hippo.spring.tools.ai.springai.mcp.McpApp/mainClass /configuration executions execution goals goalrepackage/goal /goals /execution /executions /plugin plugin groupIdorg.apache.maven.plugins/groupId artifactIdmaven-compiler-plugin/artifactId configuration source17/source target17/target /configuration /plugin /plugins /build /project3.2 把概率计算注册成 Tool服务接口先定义清楚参数和返回值都用 DTO 包住AI 解析参数时才有明确结构。public interface IJointExecItemService { ProbExecResult getJointExamItemCalculateResult(ValidChainParamsDTO validChainParamsDTO); }实现类上用Tool标注description 写清楚这个工具干什么——AI 就是靠这句话决定要不要调用它。方法内部先做校验链省批次线、院校控制线、分数限制、科目限制校验不过直接返回错误类型通过后再走概率计算。Tool(description 获取统考计算概率结果值) Override public ProbExecResult getJointExamItemCalculateResult(ValidChainParamsDTO validChainParamsDTO) { if (null validChainParamsDTO) { return null; } jointScorePassingLineHandle.next(batchLineHandle); batchLineHandle.next(schoolControllerLineHandle); schoolControllerLineHandle.next(scoreLimitHandle); scoreLimitHandle.next(subjectLimitHandle); ValidChainResultDTO validChainResultDTO jointScorePassingLineHandle.doValid(validChainParamsDTO); if (null ! validChainResultDTO.getLineLimitType()) { return ProbExecResult.error(validChainResultDTO.getLineLimitType()); } return parallelCalculate.getProbability(validChainParamsDTO); }3.3 工具配置类用MethodToolCallbackProvider把多个 service 的Tool方法一次性注册进去这样新增工具只要加 bean 就行。Configuration public class ToolConfig { Bean public ToolCallbackProvider userTools(IUserService userService, IJointExecItemService jointExecItemService) { return MethodToolCallbackProvider.builder() .toolObjects(userService, jointExecItemService) .build(); } }3.4 统一 Key 的 settings.json 与 config.tomlTrae 侧手动添加 MCP Server配置里 command 指向 JDK17 的 javaargs 里带上 STDIO 开关和 jar 路径。这段是 MCP 服务本身的启动配置{ mcpServers: { hippo-mcp-server: { command: /Library/Java/JavaVirtualMachines/liberica-jdk-17.jdk/Contents/Home/bin/java, args: [ -Dspring.ai.mcp.server.stdiotrue, -Dspring.main.web-application-typenone, -Dlogging.pattern.console, -jar, /Users/yourname/target/springai-mcp-server-demo-1.0-SNAPSHOT.jar ], env: {} } } }模型通道的 Key 单独放在 config.toml 里和 MCP 配置解耦。这样换模型只改这一处MCP 服务不用动# TaoToken 统一 Key 通道配置 [provider] name taotoken api_base https://taotoken.net/api api_key sk-你的统一Key [model] default claude-sonnet timeout_seconds 60注意api_base用 https://taotoken.net/api 不要带多余路径Key 建议用环境变量注入别硬编码进仓库。4. 验证请求一次概率计算工具调用的完整动作4.1 打包并确认 jar 可独立启动先mvn clean package产物在 target 下。手动跑一次确认 STDIO 模式能起来java -Dspring.ai.mcp.server.stdiotrue \ -Dspring.main.web-application-typenone \ -Dlogging.pattern.console \ -jar target/springai-mcp-server-demo-1.0-SNAPSHOT.jar启动后进程会挂起等待标准输入这是正常的——STDIO 模式下它不监听端口只等 Trae 通过管道发消息。4.2 在 Trae 里挂载并检查工具注册进入 Trae 主界面右侧对话上方的设置 → MCP → 手动添加把 3.4 的 JSON 贴进去保存。启动后应该能看到注册了三个服务用户信息、计算配置查询、概率计算。如果只显示两个多半是ToolConfig里漏了某个 service。4.3 创建自定义智能体并提问选择「创建自定义智能体」MCP 选刚加的自定义服务工具全选后保存。然后选这个智能体、指定项目保存位置输入我的投档分数为 500预计的院校要求投档最低分为 480求概率。预期行为智能体先分析语义匹配到getJointExamItemCalculateResult工具把 500 和 480 解析成ValidChainParamsDTO的字段调用服务返回概率值。如果它开始自己编答案而不是调工具说明 description 写得不够明确或者工具没注册成功。4.4 用 curl 直连通道做旁路验证想确认 Key 通道本身没问题可以绕过 MCP 直接打一次模型接口curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的统一Key \ -H Content-Type: application/json \ -d { model: claude-sonnet, messages: [{role: user, content: ping}] }返回正常说明 Key 和通道都通问题就缩小到 MCP 配置层了。5. 本篇常见错排查清单5.1 工具没被调用AI 自己编答案最常见。先看 Trae 的 MCP 面板里工具数量对不对再看Tool的 description 是不是太模糊比如写成「计算」就不如「获取统考计算概率结果值」明确。参数 DTO 的字段名也要语义清晰AI 靠字段名做映射。5.2 启动报 web-application-type 冲突STDIO 模式下必须加-Dspring.main.web-application-typenone否则 Spring Boot 会尝试起 Web 容器和 STDIO 抢标准流。如果你用的是 webmvc 变体走 SSE则反过来不能加这个参数。5.3 java 命令找不到或版本不对command里写绝对路径别依赖 PATH。macOS 上可以用/usr/libexec/java_home -v 17查真实路径。Windows 下路径要转义反斜杠。5.4 概率返回 null 或错误类型检查校验链是否被正确串联doValid返回的lineLimitType不为空时会直接返回 error。另外确认parallelCalculate.getProbability对边界值比如分数刚好等于线有处理否则会出现除零或空指针。5.5 Key 通道 401确认api_base是 https://taotoken.net/api 且没有多余斜杠Key 有没有过期请求头是不是Authorization: Bearer。如果 MCP 服务和模型通道用了两个 Key检查是不是混用了。6. 接下来怎么走把通道和工具都收进统一管理到这一步Java 侧的概率计算已经能通过 MCP 被 Trae 调用了模型通道也走统一 Key。下一步建议做两件事一是把更多业务方法加上Tool注册进来让智能体能组合调用二是把 Key 和模型配置集中管理避免每个工具单独配一套凭证。需要长期跑编码或 Agent 任务的可以看 Coding Plan 的额度方案https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding_plan接入文档里有完整的参数说明和示例配置卡住时对着查最快https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdocKey 管理入口在这里新建或轮换都从这进https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapi_keys如果你用的是 Claude Code 这类终端工具Anthropic 兼容通道的配置方式单独整理过https://taotoken.net/api?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentclaude_code最后留一个我踩过的坑STDIO 模式下日志千万别往标准输出打-Dlogging.pattern.console这行就是干这个的去掉它日志会污染协议流表现为 Trae 一直连不上但进程明明活着。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/15 4:54:16

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/15 2:04:12

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/14 17:14:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/15 4:06:36

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉