Spring AI+MCP强强联合:三步打造智能体开发王炸组合!

article/2025/8/14 16:20:11

环境:SpringBoot3.4.2



1. 简介

1.1 什么是MCP

Model Context Protocol(MCP)模型上下文协议是一种标准化协议,它让大模型能够更容易地和外部的数据、工具连接起来。你可以把MCP想象成一个通用的插头或者接口,就像USB-C一样,不管是什么设备,只要插上这个接口,就能和电脑、充电器等连接起来。

注意,它连接的不是物理设备,而是AI模型和外部的数据源、工具等。有了MCP,AI模型就能更方便地获取外部的信息,完成更多的任务。比如,通过MCP,AI模型可以操作电脑读写文件,或者模拟浏览器操作等。

1.2 为什么需要MCP

首先,MCP提供了一个标准化的接口,使得AI模型能够轻松地与各种外部工具和数据源进行交互,无需为每个工具或数据源单独开发集成代码。

其次,MCP还解决了数据孤岛问题,通过统一协议连接分散的数据源,使AI模型能够实时访问和利用最新的数据。

总的来说,MCP就像是一个桥梁,让AI模型与外部世界更好地连接起来,从而发挥出更大的价值和潜力。

1.3 Java与MCP架构

  • 客户端/服务器层:McpClient负责处理客户端操作,而McpServer则管理服务器端协议操作。两者都利用McpSession来进行通信管理。

  • 会话层(McpSession):通过DefaultMcpSession实现来管理通信模式和状态。

  • 传输层(McpTransport):处理JSON-RPC消息的序列化和反序列化,并支持多种传输实现。

MCP Client


MCP客户端是模型上下文协议(MCP)架构中的关键组件,负责建立和管理与MCP服务器的连接。它实现了协议的客户端部分,如下图所示:

Java MCP Client Architecture

MCP Server


MCP服务器是模型上下文协议(MCP)架构中的基础组件,它为客户端提供工具、资源和功能。它实现了协议的服务器端部分,如下图所示:

Java MCP Server Architecture

Spring AI 提供了相对应的Spring Boot staters来非常方便的进行 MCP 的集成。接下来,我们将详细的完成一个完整的MCP应用案例。

2. 实战案例

2.1 服务端开发

我们将在 MCP 服务端提供2个外部功能:查询天气预报、获取IP地址详细信息。

引入依赖

<dependency>  <groupId>com.alibaba.cloud.ai</groupId>  <artifactId>spring-ai-alibaba-starter</artifactId>  <version>1.0.0-M6.1</version></dependency><dependency>  <groupId>org.springframework.ai</groupId>  <artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId></dependency><dependency>  <groupId>org.springframework.ai</groupId>  <artifactId>spring-ai-mcp-server-webflux-spring-boot-starter</artifactId></dependency>

说明:

  • 引入alibaba-starter我们将使用阿里的大模型

  • 引入mcp-server-webflux,以支持基于 Spring WebFlux 的 SSE(服务器发送事件)服务器传输

配置文件

​​​​​​​

spring:  ai:    dashscope:      api-key: sk-xxxooo      base-url: https://dashscope.aliyuncs.com/compatible-mode/v1      chat:        options:          stream: true          model: qwen-turbo---spring:  ai:    mcp:      server:        enabled: true        name: ai_mcp_server        version: 1.0.0        type: ASYNC        sse-message-endpoint: /mcp/message

以上我们就完成了基本的配置。接下来,我们需要提供2个外部工具。

工具编写

获取天气预报

​​​​​​​

public class CommonTool {    @Tool(description = "获取当前天气预报")  WeatherResponse getCurrentWeather(WeatherRequest request) {    System.err.printf("准备查询【%s】天气预报%n", request.city()) ;    RestClient client = RestClient.create(URI.create("https://api.vvhan.com")) ;    Map<?, ?> result = client.get()        .uri("/api/weather?city={0}", request.city())        .retrieve()        .body(Map.class) ;    try {      return new WeatherResponse(new ObjectMapper().writeValueAsString(result)) ;    } catch (JsonProcessingException e) {      throw new RuntimeException(e) ;    }  }    @Tool(description = "获取IP地址详细信息")  String getIpAddressInfo(String ip) {    System.err.printf("准备查询【%s】详细信息%n", ip) ;    RestClient client = RestClient.create(URI.create("https://api.vvhan.com")) ;    Map<?, ?> result = client.get()        .uri("/api/ipInfo?ip={0}", ip)        .retrieve()        .body(Map.class) ;    try {      return new ObjectMapper().writeValueAsString(result) ;    } catch (JsonProcessingException e) {      throw new RuntimeException(e) ;    }  }}

注册工具

​​​​​​​

@Configurationpublic class ToolsConfig {  @Bean  ToolCallbackProvider tools() {    ToolCallback[] toolCallbacks = ToolCallbacks.from(new CommonTool()) ;    return ToolCallbackProvider.from(toolCallbacks) ;  }}

如上所述,我们就成功构建了一个仅包含两个外部工具的MCP服务器。

启动服务

图片

  • 默认开启了一个/see端点(其实,还有一个消息传输的端点)

  • 提示注册了2个工具(也不知道给个空格的)

     

接下来,我们进行客户端的开发。

2.2 客户端开发

引入依赖

​​​​​​​

<dependency>  <groupId>org.springframework.ai</groupId>  <artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId></dependency><dependency>  <groupId>org.springframework.ai</groupId>  <artifactId>spring-ai-mcp-client-webflux-spring-boot-starter</artifactId></dependency><dependency>  <groupId>com.alibaba.cloud.ai</groupId>  <artifactId>spring-ai-alibaba-starter</artifactId>  <version>1.0.0-M6.1</version></dependency>

注意,这里引入的是mcp-client包。

配置文件

​​​​​​​

spring:  ai:    mcp:      client:        enable: true        name: ai-mcp-client        initialized: true        type: ASYNC        sse:          connections:            server1:              url: http://localhost:8888

我们配置了一个MCP服务端地址,你可以配置多个按照上面的方式。

完成以上的配置后,我们就可以配置ChatClient,然后进行接口的调用了。

@RestController@RequestMapping("/tools")public class ToolController {  private final ChatClient chatClient ;  public ToolController(ChatClient.Builder aiClientBuilder, ToolCallbackProvider mcpTools) {    this.chatClient = aiClientBuilder        .defaultTools(mcpTools)        .build() ;  }    @GetMapping("/weather")  public ResponseEntity<String> getCurrentWeather(String prompt) {    System.err.println(prompt) ;    String response = this.chatClient        .prompt(prompt)        .call().content() ;    return ResponseEntity.ok(response) ;  }    @GetMapping("/ip")  public ResponseEntity<String> getIpAddressInfo(String prompt) {    System.err.println(prompt) ;    String response = this.chatClient        .prompt(prompt)        .call().content() ;    return ResponseEntity.ok(response) ;  }}

在构造函数中,我们直接注入了ToolCallbackProvider,当我们系统启动时会自动的从配置的服务端进行查找有哪些可用的工具。

启动服务

控制台将输出如下从MCP Server获取的工具:

​​​​​​​

i.m.s.M Line:151 - Received JSON message: {  "jsonrpc": "2.0",  "id": "66d12dae-1",  "result": {    "tools": [      {        "name": "getCurrentWeather",        "description": "获取当前天气预报",         "inputSchema": {           "type": "object",           "properties": {             "request": {               "type": "object",               "properties": {                 "city": {                   "type": "string",                   "description": "城市"                 }               },               "required": ["city"]             }           },           "required": ["request"],           "additionalProperties": false         }       },       {         "name": "getIpAddressInfo",         "description": "获取IP地址详细信息",         "inputSchema": {           "type": "object",           "properties": {             "ip": {               "type": "string"             }           },           "required": ["ip"],           "additionalProperties": false         }       }    ]  }}

测试结果

图片

图片

成功!!!

​​​​​​​

 大模型&AI产品经理如何学习

求大家的点赞和收藏,我花2万买的大模型学习资料免费共享给你们,来看看有哪些东西。

1.学习路线图

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。


2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己整理的大模型视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方图片前往获取

3.技术文档和电子书 

这里主要整理了大模型相关PDF书籍、行业报告、文档,有几百本,都是目前行业最新的。



4.LLM面试题和面经合集


这里主要整理了行业目前最新的大模型面试题和各种大厂offer面经合集。



👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集***

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓


http://www.hkcw.cn/article/rIQEWipCFm.shtml

相关文章

如何在Pycharm中插入AI插件(OpenAI及DeepSeeK)

1.首先在pycharm找到ai插件&#xff0c;安装 注&#xff1a;有时叫codeGPT&#xff0c;有时叫proxy AI,其实都是同个插件来的&#xff1b;可以通过logo来确认。 2.安装成功后&#xff0c;会在设置-工具里出现CodeGPT 步骤&#xff1a;选择CodeGPT&#xff0c;选择custom op…

拥抱AI未来:Hugging Face平台使用指南与实战技巧

目录 &#x1f354; huggingface介绍 &#x1f354; 使用步骤 2.1 创建一个帐户 2.2 登录 2.3 在huggingface上创建模型仓库 2.4 上传本地模型到平台 1 页面发布步骤介绍 2 git clone操作 3 把我们要上传的模型文件copy到本地mymodel04文件夹中 4 上传本地mymodel04文…

强化学习—多智能体

强化学习—多智能体 多智能体强化学习基本概念多智能体强化学习的挑战主要方法与算法应用领域总结 纳什均衡基本定义直观理解特点应用领域计算方法总结 笔记四种常见设定多智能体下的基本概念单智能体策略梯度方法用在多智能体问题中的问题多智能体强化学习(中心化、去中心化)架…

别卷了!秘塔 AI 把“学不完“变成“暴风吸入“

大家好&#xff0c;我是泽安&#xff0c;见字如面&#xff01; “提到秘塔 AI&#xff0c;80%的人可能一脸懵——但如果你还在用传统方式学习&#xff0c;那你真的亏大了&#xff01;” 2025 年 AI 工具大爆发&#xff0c;但大多数还是“通用型”&#xff0c;而秘塔 AI 却悄悄…

Spring Boot集成Spring Ai框架【详解 搭建Spring Ai项目,以及简单的ai大模型智能体应用,附有图文+示例代码】

文章目录 一.Spring Ai介绍1.0 认识Spring Ai1.1 特征1.1 大模型专业名字介绍1.1.1 RAG(检索增强生成)RAG 的基本原理RAG 的关键技术RAG 的优势RAG 的应用场景 1.1.2 fine-tuning(微调)1.1.3 function-call(函数调用) 1.2 创建简单的Spring Ai项目 二.Spring Ai简单的智能应用2…

如何使用服务器训练AI模型

如何使用服务器训练模型 大家好&#xff0c;这里是肆十二&#xff0c;之前有小伙伴反馈说自己的电脑只有cpu&#xff0c;没有GPU&#xff0c;也想要体验一下使用gpu训练模型&#xff0c;或者有的小伙伴反馈说自己所在的实验室提供了linux的服务器&#xff0c;但是不怎么会用&a…

(4)ModalAI VOXL

文章目录 前言 4.1 购买什么 4.2 硬件设置 4.3 VOXL 摄像机配置 4.4 自动驾驶仪配置 4.4.1 使用 OpticalFlow 进行 EKF3 光源转换 4.5 视频 前言 本文介绍了如何将 ModalAI VOXL-CAM 与 ArduPilot 配合使用&#xff0c;以替代 GPS&#xff0c;从而实现 Loiter、PosHold…

Cursor —— AI编辑器 使用详解

Cursor - The AI Code Editor 一、Cursor 是什么&#xff1f; Cursor 是一款优秀的AI代码编辑器&#xff0c;它内置了 Deepseek-R1、GPT-4、Claude等 AI 模型。 简单说&#xff0c;就是&#xff1a;Cursor VS Code 编辑器 AI 大模型 Cursor 功能特性&#xff08;代码补全、…

开源免费!AI视频分析神器,智能识别画面,1秒提取关键帧!附详细教程

大家好&#xff01;我是羊仔&#xff0c;专注AI工具、智能体、编程。 在AI时代&#xff0c;每天都有各种各样的新鲜事物涌现&#xff0c;简直可以用“日新月异”来形容。 羊仔就是个喜欢在AI世界里瞎折腾的人&#xff0c;专门给大家伙儿挖掘那些好用又好玩的AI工具。 今天&am…

Browser-Use WebUI:让AI自动使用浏览器帮你查询信息执行任务

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

从零开始:如何用Python训练一个AI模型(超详细教程)

引言 人工智能&#xff08;AI&#xff09;——一个熟悉又神秘的词汇。我们常听说它可以生成诗歌、编写代码、创作艺术&#xff0c;甚至回答各种问题。然而&#xff0c;当你想亲手实现一个“AI 模型”时&#xff0c;却可能感到无从下手。这篇教程正是为你准备的&#xff0c;将带…

黄觉凭《藏海传》火出圈 反派角色引关注

《藏海传》中,平津侯庄芦隐成为火出圈的配角之一。这个角色贯穿整部剧,是核心反派,阴鸷多疑且心狠手辣。黄觉饰演的平津侯在剧中权倾朝野,是肖战饰演的男主藏海复仇计划的主要目标。他与多位演员有精彩的对手戏,无论是与藏海之间的对决还是与曹静贤之间的较量,都为观众带…

马斯克再度否认“吸毒成瘾” 澄清媒体报道不实

当地时间5月31日,马斯克在社交平台上回应了有关他“经常服用氯胺酮、摇头丸和迷幻蘑菇”以及“吸毒成瘾导致膀胱问题”的报道。他表示这些说法并不属实,并指责《纽约时报》的报道是胡编乱造。马斯克解释说,几年前他曾尝试过处方氯胺酮,并在X平台上公开谈论过此事。他认为这…

饲养员当大厨 大熊猫吃上美味粽子 创意粽情温暖国宝心

昨天是端午节,长沙生态动物园为大熊猫准备了特别的粽子。饲养员们发挥创意与爱心,为这些国宝打造了一场舌尖上的惊喜。为了让大熊猫吃得健康又开心,饲养员们在食材选择上费尽心思。新鲜的苹果、火龙果、青提、橙子、玉米、圣女果和胡萝卜等被精心挑选出来。粽叶经过严格的清…

专家:中国战机见证中巴友谊 体系化空战显神威

巴参谋长联席会议主席在接受采访时提到,歼-10CE和“枭龙”战机在体系化空战中表现出色。他表示,“阵风”和歼-10CE都是优秀的飞机,但体系化空战是取得胜利的关键。智能技术、网络技术等现代技术的应用对空战胜利起到了重要作用。他特别表扬了中国的歼-10CE和“枭龙”战机,称…

一分钟带你盘点粤港澳车展 七大展馆亮点纷呈

2025粤港澳大湾区国际汽车博览会的展位图已经公布,展会将于5月31日开幕,持续至6月8日,在深圳国际会展中心举行。本次车展设置了7个展馆,每个展馆都有各自的特色和看点。1号馆是比亚迪的专馆,包括比亚迪、腾势、仰望、方程豹等品牌将参展。此外,还将展示比亚迪的多项前沿技…

网友偶遇撒贝宁大喊我去过赛里木湖 美景让人直呼没白活

整理露营装备的北京摄影师小王突然抬头问我:“你见过凌晨五点的赛里木湖吗?”他蹲在帐篷前,手里握着三脚架,镜片上还沾着草屑。“去年我刷到撒老师那句‘白活论’,当天就订了机票。结果你猜怎么着?我在这湖边住了三天,每天换着角度拍,手机相册愣是没一张重复的风景!”…

比亚迪下一步的发展究竟会怎样 技术创新引领未来

在汽车江湖里,比亚迪无疑是一颗耀眼的新星。近年来,它在新能源汽车领域一路狂飙,让无数人为之侧目。那么,比亚迪未来3年的发展空间到底有多大呢?技术创新是比亚迪发展的强劲引擎。以刀片电池为例,凭借高安全性和长续航能力在市场上出尽风头。相关数据显示,搭载刀片电池的…

《折腰》编剧说刘宇宁就是魏劭的样子 铁血柔情的完美诠释

《折腰》的结局让人不舍,这部剧期待已久,突然开播带来了惊喜。短短半个月的追剧时光转瞬即逝,观众们又要从《折腰》的世界中抽离出来。刘宇宁饰演的男主魏劭是一个让人印象深刻的角色。终于迎来了一个不那么传统的古装角色,但他的命运依旧坎坷。坊间流传着关于魏劭的各种说…

专家谈中国新一代导弹技术布局 迈向全球领先

在印巴冲突发生前,非军迷朋友可能对我国的霹雳15E导弹并不熟悉。然而,5月7日印巴之间的一场空战让这款导弹名声大噪,其击落六架战斗机的优异战绩令人惊讶。人们这才意识到,这款起初不起眼的导弹已成为现役空空导弹中最强的存在之一。在我国,霹雳15E只是自用版霹雳15导弹的…