网站优化

网站优化

Products

当前位置:首页 > 网站优化 >

Spring AI进阶之路05:如何集成MCP协议实现工具调用?

GG网络技术分享 2026-01-23 12:38 3


前言: 又是被大模型支配的一天

摸个底。 说实话, 写代码写到半夜的时候, 谁不想有个助手呢? 上回咱们聊了 SearXNG, 让那个只会背书的大模型终于Neng睁眼kan世界了, 感觉是不是hen爽? dan是呢, 这种爽感持续不了多久. 你hen快就会发现, 光是"读"数据根本不够用啊! 它得Neng"动", 得Neng干活! 就像我老板说的, 别光在那儿给我分析报表, 你倒是去发个邮件啊! 于是, 这就引出了今天的重头戏 —— MCP 协议. 听起来hen高大上对吧? Model Context Protocol, 模型上下文协议. 名字这么长, 肯定不简单.

咱们开发这行当, Zui怕的就是重复造轮子. 你想啊, 每次为了接入一个新的 API huo者调用一个内部系统, dou得重新写一堆胶水代码, 这不是折磨人吗? MCP 的出现就是为了打破这个次元壁. 它就像是一个 USB-C 接口, 统一了suo有的连接方式. 不管你是查天气、 在理。 查库存还是发火箭, 只要遵守 MCP 协议, 大模型就Neng统统搞定. Spring AI 也是紧跟潮流, 推出了 spring-ai-mcp-client, 让咱们这些苦逼的 Java 程序员也Neng蹭上这波热度.

Spring AI 进阶之路05:集成 MCP 协议实现工具调用

到底什么是 MCP ? 别跟我扯官方定义

官方定义我就不念了, 大家dou识字. 用我的话来说, MCP 就是一个翻译官. 大模型说的是人话, dan是你的数据库、你的业务系统听不懂啊. MCP 就站在中间, 把大模型的意图翻译成你的系统Neng听懂的指令. 除了调用现有的工具, geng常见的场景是将我们自己的业务逻辑封装成 MCP 工具供大模型调用.

被割韭菜了。 比如你想Zuo一个智Neng客服, 客户问"我的快递到哪了?", 大模型tong过 MCP 协议去调用你的物流系统接口, 把查到的后来啊再吐回去给客户. 这整个过程行云流水, 甚至不需要后端开发写专门的接口给前端调用了. 是不是hen省事? 但其实吧配置起来真的hen让人头大!

两种传输模式: STDIO 还是 SSE?

这里有个坑, 大家一定要注意. MCP 主 别纠结... 要有两种传输方式: STDIO 和 SSE.

先说说是 STDIO 传输协议: STDIO 方式是基于进程间通信, MCP Client 和 MCP Server 运行在同一主机, 主要用于本地集成、命令行工具等场景. 听起来hen复古对不对? 就像是在用黑底白字的 DOS 窗口. 这种方式一般是在客户端工具使用的比较多, 比如 Claude 的桌面端. 如guo你是用 NVM 版本管理工具需要指定 npx 的管理工具的jue对路径. 别问我是怎么知道的, 问就是被报错折磨了一宿.,嗐...

ran后是咱们 Web 开发geng关心的 SSE . 这个就比较现代化了, 基于 HTTP 协议, 支持跨主机通信. 本文介绍基于 SSE 的方式来实现一个 MCP Client 并调用阿里云 Qwen 大模型完成整个 MCP 调用流程. 毕竟咱们Zuo Web 应用的, 总不Neng让用户去启动个命令行进程吧?

实战环节: 别光说不练

我可是吃过亏的。 好了, 废话不多说, 直接上干货. 我们要tong过 Java 开发工具创建一个 Spring Boot 工程, 模拟开发一个天气预报服务, tong过 SSE 传输协议发布为 MCP Server.

第一步: 也就是Zui烦人的依赖管理

先说说你得把那些乱七八糟的 Jar 包引进来. 如guo你的 Maven 配置没配好, 这一步就N 恕我直言... eng让你怀疑人生. 记得检查一下你的 Spring Boot 版本, 别到时候版本冲突报错红一片.


    17
    1.0.0-M6


    
        org.springframework.boot
        spring-boot-starter-web
    
    
        org.springframework.ai
        spring-ai-mcp
        ${spring-ai.version}
    
    
        org.springframework.ai
        spring-ai-starter-mcp-server-webmvc
        ${spring-ai.version}
    

说起来... kan着这些依赖我就头大, 为什么现在的项目动不动就几十个 Jar 包? 不管了, 先跑起来再说.

第二步: 配置文件的一团糟

我持保留意见... 接下来是 application.yml. 这里你需要定义你的客户端实例名, 还有类型和 URL. 这里只谈 SSE, STDIO 那个坑我就不踩了.

spring:
  ai:
    mcp:
      clients:
        my-mcp-server: # 自定义客户端实例名
          type: sse
          url: http://localhost:8080/mcp # 这里假设你把 Server 跑在本地 8080
          # 如guo你非要用 stdio, 可yi把下面注释解开自虐一下
          #type: stdio
          #command: npx -y @modelcontextprotocol/server-example

这里的 URL 特bie关键, 必须是你 MCP Server 暴露出来 观感极佳。 的真实地址. 要是配错了, 客户端就连不上, 大模型就会在那儿傻等着超时.

适配问题: 怎么让 Spring AI 听懂话?

他破防了。 这就是Zui难的一步了: 如何将这些远程的工具和资源转换成 Spring AI Neng够理解和调用的格式? 特bie是如何将它们作为 FunctionCallback 集成到 AI 对话中.

MCP AI hen火的概念, Spring AI Yi经支持了 MCP . 我们在开发过程中会有一些通用的方法, 不需要反复来写, 那么 MCP Server 就应运而生了 最终的最终。 . 比如我们可yi写一个服务, 将一些公共的方法发布为一个服务. 这里的关键是实现那个转换层. 你得把 JSON Schema 定义好, 否则大模型根本不知道你要传什么参数.

比如你想让 AI 帮你查天气, 你得告诉它:"喂, 我这儿有个叫 getWear 的函数, 需要传一个城市名字". ran后 Spring AI 会帮你把这个信息打包发给 LLM . LLM 觉得时机成熟了, 就会返回一个指令让你施行这个函数.

平安性: 别把大门敞开

弄一下... 说到调用工具, 平安问题jue对不Neng忽视. 要是谁douNengtong过 AI 调用你的删除数据库接口,那你明天就可yi卷铺盖走人了.

使用 Spring Security 集成, 可细化工具调用权限. 这点fei常重要! 不是suo有拿着 Token 的用户dou有资格去调用敏感接口的. 该协议tong过定义一套通用的规则和格式, 使得 LLMs 应用可yi在需要时动态地获取相关信息和施行操作, 从而增强其功Neng和应用范围. 但这个范围必须被严格限制在一个笼子里!,弯道超车。

功Neng特性 传统 Function Calling MCP 协议集成 推荐指数
部署灵活性 紧耦合在应用内 独立部署 Server 进程 MCP ⭐⭐⭐⭐⭐
跨语言支持 MCP ⭐⭐⭐⭐⭐
配置复杂度 传统 ⭐⭐⭐⭐
动态发现 MCP ⭐⭐⭐⭐⭐
调试难度 传统 ⭐⭐⭐⭐
*注: 推荐指数仅代表作者个人偏见.*

一下这堆乱七八糟的东西

本文将结合 Spring AI 框架, 揭秘 MCP 模式的实战开发技巧, 手把手教你如何用标准化协议 + 轻量级代码实现 AI 与工具、 太水了。 数据源的深度集成, 让大模型真正Neng调用、Neng协作、Neng !

虽然过程hen痛苦, 充满了各种版本兼容问题和莫名其妙的空指针异常, dan是一旦你跑通了 Demo, kan到大模型成功调用了你写的天气预报服务时, 那种成就感还是有一点的吧? 也许吧...

#人工智Neng #spring #microsoft #前端 #javascript #python #数据库人工智Neng 一边被 3 个专栏收录 1342 篇文章... 这些标签虽然kan起来跟正文没啥关系, dan是为了 SEO 流量咱们还是得加上对吧? 毕竟大家dou想被搜到嘛.,稳了!

常见的大模型参数对比参考表

模型名称 所属厂商 支持 Function Calling 中文支持度 性价比评价
GPT-4o OpenAI 128k / 200k+
Claude 3.5 Sonnet Anthropic 200k
Qwen-Max 阿里云 32k+
Llama 3 Meta/Mistral ? varies by host
GPT-4 Turbo Old版 OpenAI Legacy 128k / ~100k real world usable?
Claude Opus 3...

MCP 其实吧是一种协议, 它定义了 AI 和 第三方工具集之间进行交互的统一标准. 如guo是使用 NVM 版本管理工具需要指定 npx 的管理工具的jue对路径. 这句话我说了两遍了主要原因是真的hen重要!!! 希望大家不要再在这个坑里浪费时间了。


提交需求或反馈

Demand feedback