SpringAI MCP实战:从理论到代码、从设计Agent再到构建MCP服务,嘎嘎强!

对于企业级应用而言,MCP的价值不仅在于技术实现,更重要的是它提供了一种AI与传统业务系统融合的新范式。随着MCP生态的不断完善,我们有理由相信,这种"对话即服务"的模式将在企业数字化升级中发挥越来越重要的作用。还是那句话:AI早就无限可能!

MCP(模型上下文协议)技术已经火热了一段时间,最近冰河也正在利用MCP来优化业务场景。借此机会,深入研究了SpringAI框架中的MCP实现。

与以往的技术学习路径不同,AI领域的学习更加注重理论指导实践——因为AI技术本身仍在快速演进,坚实的理论基础比单纯的代码实践更为重要。

一、构建智能业务Agent的设计思路
假设我们需要实现"智能套餐推荐"功能:用户通过自然对话表达需求,系统自动分析并推荐合适的套餐,生成支付链接供用户完成购买。传统方案需要用户经过多个步骤——选择类型、浏览套餐、填写信息等,涉及复杂的页面跳转和交互。

构建这样一个智能Agent,需要从三个核心层面进行设计:

1.1 大脑:大模型的能力定制
以大模型作为决策核心,负责理解用户意图并提取关键信息。例如,当用户表达"我最近经常加班到很晚,总觉得肩颈酸痛,眼睛干涩"时,模型需要识别出"职场人群"、"久坐办公"、"肩颈护理"、"眼部疲劳"等关键特征。

又例如,当用户表达"工作三年感觉遇到了技术瓶颈,想要系统学习但不知道从哪开始"时,模型需要识别出"职业发展阶段"、"技能提升需求"、"学习规划"、"技术成长"等关键特征。

通用大模型虽然强大,但往往无法直接满足特定业务需求。我们需要通过两个关键手段进行定制:

角色定义提示词:通过精心设计的提示词,让模型理解其作为"套餐推荐专家"的角色定位,掌握业务领域的专业知识和对话风格。

动态知识注入:模型本身不具备企业内部数据,需要通过RAG(检索增强生成)技术为其提供业务知识支撑。但这里有个关键考量——套餐数据频繁变化,传统的静态知识库更新机制显然不够高效。

1.2 手脚:MCP接口的能力扩展
既然套餐数据实时变化,为什么不直接让AI访问现有的业务接口呢?这就是MCP的价值所在。我们可以将现有的RESTful接口封装为MCP接口,让AI能够直接查询实时数据、获取相关信息、创建支付订单等。

1.3 架构总结与平台选择
综合来看,构建智能Agent需要完成三个核心任务:

(1)选择合适的大模型,并通过提示词工程进行角色定制

(2)构建知识库体系,为模型提供业务背景知识

(3)开发MCP接口,让AI能够操作业务系统

但在实施过程中,我们面临几个技术挑战:

对话状态管理:大模型本身是无状态的,需要额外维护对话历史
向量数据库:知识库需要使用专门的向量数据库技术
模型对接:不同模型的API对接存在兼容性问题
考虑到这些复杂性,手动构建整个Agent体系效率较低。我们选择基于Dify等专业平台进行开发,这样能够专注于业务逻辑的实现,而非基础设施的搭建。

二、实战:构建天气查询MCP服务
为了验证技术可行性,我们先从一个相对简单的天气查询MCP服务开始验证。这里,使用SpringAI框架将其封装为MCP服务。

PS:基于开放的天气API:https://api.open-meteo.com/v1

2.1 环境配置
项目依赖(pom.xml):

要求JDK 17及以上版本
 

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.4.5</version>
    <relativePath/>
</parent>
 
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-mcp-server-spring-boot-autoconfigure</artifactId>
        <version>1.0.0-M6</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.ai</groupId>
        <artifactId>spring-ai-mcp</artifactId>
        <version>1.0.0-M6</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>io.modelcontextprotocol.sdk</groupId>
        <artifactId>mcp-spring-webflux</artifactId>
        <version>0.8.0</version>
        <scope>compile</scope>
    </dependency>
</dependencies>
2.2 应用配置
server:
  port:8082
 
spring:
ai:
    mcp:
      server:
        name:my-weather-server
        sse-endpoint:/sse
        sse-message-endpoint:/mcp/messages
        type:ASYNC
        version:0.0.1
2.3 核心服务实现

(1)应用启动类

@SpringBootApplication
public class Application {
 
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
 
    @Bean
    public ToolCallbackProvider weatherTools(OpenMeteoService openMeteoService) {
        return MethodToolCallbackProvider.builder()
                .toolObjects(openMeteoService)
                .build();
    }
}

(2)天气服务实现

通过@Tool注解将业务方法暴露为MCP工具。

@Service
publicclass OpenMeteoService {
 
    privatefinal WebClient webClient;
 
    public OpenMeteoService(WebClient.Builder webClientBuilder) {
        this.webClient = webClientBuilder
                .baseUrl("https://api.open-meteo.com/v1")
                .build();
    }
 
    @Tool(description = "根据经纬度获取天气预报")
    public String getWeatherForecastByLocation(
            @ToolParam(description = "纬度,例如:39.9042") String latitude,
            @ToolParam(description = "经度,例如:116.4074") String longitude) {
 
        try {
            String response = webClient.get()
                    .uri(uriBuilder -> uriBuilder
                            .path("/forecast")
                            .queryParam("latitude", latitude)
                            .queryParam("longitude", longitude)
                            .queryParam("current", "temperature_2m,wind_speed_10m")
                            .queryParam("timezone", "auto")
                            .build())
                    .retrieve()
                    .bodyToMono(String.class)
                    .block();
 
            return"当前位置(纬度:" + latitude + ",经度:" + longitude + ")的天气信息:\n" + response;
        } catch (Exception e) {
            return"获取天气信息失败:" + e.getMessage();
        }
    }
 
    @Tool(description = "根据经纬度获取空气质量信息")
    public String getAirQuality(
            @ToolParam(description = "纬度,例如:39.9042") String latitude,
            @ToolParam(description = "经度,例如:116.4074") String longitude) {
 
        // 模拟数据,实际应用中应调用真实API
        return"当前位置(纬度:" + latitude + ",经度:" + longitude + ")的空气质量:\n" +
                "- PM2.5: 15 μg/m³ (优)\n" +
                "- PM10: 28 μg/m³ (良)\n" +
                "- 空气质量指数(AQI): 42 (优)\n" +
                "- 主要污染物: 无";
    }
}

三、MCP服务调试与实践
完成MCP服务开发后,我们需要进行充分的测试验证。类比REST API的开发流程,MCP服务同样需要专业的调试工具和方法。

3.1 使用Inspector进行基础测试
MCP官方提供的Inspector工具相当于传统开发中的Postman,能够直接调用MCP接口进行测试。

安装和使用步骤:

npx @modelcontextprotocol/inspector node build/index.js

通过Inspector界面,我们可以:

  • 查看所有可用的MCP工具列表
  • 直接调用工具方法并查看返回结果
  • 验证参数传递和数据格式的正确性

3.2 集成到AI开发环境

真正的价值在于将MCP服务集成到AI应用中使用。目前主流的AI开发工具都支持MCP协议,包括:

VsCode Cline扩展:在对话窗口中直接使用自然语言调用MCP工具

Dify等AI应用平台:在可视化界面中配置和使用MCP工具。

自定义SpringAI客户端:根据业务需求开发专用的客户端应用。

需要注意的是,不同工具对MCP的支持程度有所差异。例如,当前版本的Cursor由于客户端限制,暂时无法直接调用我们开发的MCP服务。

四、总结
通过实战构建查询天气的MCP服务,我们验证了SpringAI MCP技术的可行性。从技术架构上看,MCP为AI应用提供了一种标准化的能力扩展机制,让大模型能够安全、可控地访问外部系统和服务。

对于企业级应用而言,MCP的价值不仅在于技术实现,更重要的是它提供了一种AI与传统业务系统融合的新范式。随着MCP生态的不断完善,我们有理由相信,这种"对话即服务"的模式将在企业数字化升级中发挥越来越重要的作用。还是那句话:AI早就无限可能!

如果你想更深入地学习大模型,以下是一些非常有价值的学习资源,这些资源将帮助你从不同角度学习大模型,提升你的实践能力。

    学习资源推荐 如果你想更深入地学习大模型,以下是一些非常有价值的学习资源,这些资源将帮助你从不同角度学习大模型,提升你的实践能力。

AI大模型学习福利

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。


因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

四、AI大模型商业化落地方案

因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值