当前位置: 首页 > news >正文

java 使用 spring AI 实战MCP

最近在腾讯云edgeone的直播中了解到了MCP,随着了解发现MCP确实是一个未来发展的趋势
MCP :全称 Model Context Protocol 是一种专为人工智能模型设计的通信协议,于2024年11月由Anthropic推出的开放标准。它旨在解决复杂AI系统中多个模型或组件之间的协同、状态管理和资源优化问题,以及AI应用与外部数据源和工具集成中的挑战。
MCP 是一个开放协议,用于标准化应用程序向大语言模型提供上下文的方式。它类似 AI 应用的 USB–C 端口,MCP 连接 AI 模型与不同数据源和工具,能帮助构建基于大语言模型的智能体和复杂工作流,。MCP 具有一系列预构建的集成、可灵活切换 LLM 提供商和遵循客户端 – 服务器架构等特点。

访问地址:https://modelcontextprotocol.io/introduction

在这里插入图片描述
github :https://github.com/modelcontextprotocol

在这里插入图片描述
解决了什么问题:传统上,AI模型与外部数据源的集成需要为每个数据源开发自定义接口,既耗时又容易出错。MCP通过提供一个统一协议,简化了这一过程,开发者可以轻松连接到多个数据源,而无需重复编写代码。这减少了开发复杂性,并降低了维护和安全风险。

功能

  • 上下文状态管理
  • 动态上下文传递:允许模型在处理请求时保留和共享关键信息(如用户历史对话、当前任务状态),确保连贯性。
  • 版本控制:管理不同模型版本的上下文兼容性,避免因升级导致的逻辑冲突。
  • 分布式处理:支持跨服务器、跨设备并行处理,降低延迟并提高吞吐量。
  • 数据隔离:通过加密通道和访问控制确保敏感数据(如用户隐私信息)仅在授权范围内流动。
  • 审计日志:记录模型交互轨迹,便于合规性检查和责任追溯。
  • 缓存机制:对高频查询结果进行缓存,减少重复计算。
  • 模块化设计:支持插件式扩展(如新增自定义指令处理器或集成特定工具API)。
  • 多模态支持:原生适配文本、图像、音频等多种数据格式,简化多模态应用开发。
  • 上下文融合:将物流结果与用户历史偏好(如偏爱快递公司A)结合,生成个性化回复。
  • 反馈闭环:记录用户对回复的满意度,动态优化后续响应策略。

组件

  • ContextManager:管理用户会话上下文(历史消息、订单号、偏好等)。
  • IntentClassifier:自然语言理解模型,识别用户意图(如查询订单、投诉建议)。
  • ServiceRouter:根据意图路由到对应服务(如订单查询API、天气查询模型)。
  • DialoguePolicy:对话策略模型,决定回复策略(如确认信息、追问细节)。

源码:https://github.com/modelcontextprotocol/java-sdk
在这里插入图片描述
源码大家可以拉下来看看做了解,这里偶遇一篇讲MCP Java SDK源码的文章:https://www.51cto.com/article/810408.html

MCP Server 平台 : https://mcp.so/zh

案例:10分钟搞定高德地图MCP!我用AI解决了约会地点选择难题 ,这个案例虽然不是java实现的,但是也很值得大家了解和学习,这个类似的demo我在腾讯云edgeone的直播中有看到相似的案例

在了解MCP信息浏览github时发现一个项目有记录MCP相关
https://github.com/punkpeye/awesome-mcp-servers/blob/main/README-zh.md
在这里插入图片描述
检索java相关发现有个 spring-ai-mcp
在这里插入图片描述
在这里插入图片描述
点进来就到了spring ai 文档中了,原先用过spring ai 调用本地大模型进行聊天,刚好有所了解
在这里插入图片描述
开始 spring aimcp
首先电脑需要有 npx 环境 ,如果没有自行百度进行安装
在这里插入图片描述

在 MCP Server 平台。找一个现成的server进行使用
在这里插入图片描述
找一个操作文件的server
在这里插入图片描述
找到 NPX 留着备用

在这里插入图片描述

初始化项目
在这里插入图片描述

pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.yxy</groupId><artifactId>spring-ai-mcp</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><name>spring-ai-mcp</name><url>http://maven.apache.org</url><properties><java.version>17</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>3.2.4</version></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId><version>1.0.0-M6</version></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-ollama-spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><version>3.2.4</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target></configuration></plugin></plugins></build><dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>1.0.0-M6</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement></project>

在这里插入图片描述

application.yml
配置文件 ollama 配置的我原先本地部署的千问模型 大家自行更改
还有就是一个mcp的配置,需要指定mcpsevers的json文件

spring:application:name: spring-ai-mcpai:ollama:base-url: http://localhost:11434chat:options:model: qwen2.5-coder:7bmcp:client:enabled: truename: mcp-clientversion: 1.0.0type: SYNCrequest-timeout: 30sstdio:servers-configuration: classpath:/mcp-servers-config.json

mcp-servers-config.json
我这里是使用的操作文件的server,大家想测试其他的只需要在这个配置文件进行配置
而我这里是windows上使用,所以将 MCP Server 平台 复制过来的命令做了个调整

{"mcpServers": {"filesystem": {"command": "cmd","args": ["/c","npx","-y","@modelcontextprotocol/server-filesystem","F:\\web"]}}
}

OllamaController

package org.yxy.controller;import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.mcp.SyncMcpToolCallbackProvider;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
public class OllamaController {@Resourceprivate OllamaChatModel ollamaChatModel;@Resourceprivate SyncMcpToolCallbackProvider toolCallbackProvider;@GetMapping("/ai/ollama")public String ollama(@RequestParam(value = "msg") String msg) {ChatClient chatClient = ChatClient.builder(ollamaChatModel).defaultTools(toolCallbackProvider.getToolCallbacks()).build();String content = chatClient.prompt(msg).call().content();System.out.println(content);return content;}}

运行后浏览器直接访问
在这里插入图片描述

如果半天没有响应大家稍等下,本地环境有限,会有点慢
在这里插入图片描述
在这里插入图片描述
简易版demo已实现了,进行下一步
在这里插入图片描述
当我们配置的type是同步使用时就使用同步的依赖,这个可以在多client时进行使用
在这里插入图片描述
所有注册的MCP工具通过ToolCallbackProvider实例以ToolCallback列表的形式提供
在这里插入图片描述
就是我们这里的demo使用的是操作file的Server,这里可以看到其提供的工具
在这里插入图片描述
我让其帮我创建一个文件夹
在这里插入图片描述

在这里插入图片描述
在我打断点请求查看时发现创建成功了
这里的 toolCallbackProvider.getToolCallbacks()[9]是 list_allowed_directories方法所在数组中的位置,本想查看来着,结果创建成功了

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://www.mrgr.cn/news/96860.html

相关文章:

  • es自定义ik分词器中文词库实现热更新
  • java项目分享-分布式电商项目附软件链接
  • C++ 新特性 | C++ 11 | 左值、右值与将亡值
  • Windows 实战-evtx 文件分析--笔记
  • 1.4 基于模拟退火改进蛇算法优化VGG13SE网络超参数的故障诊断模型
  • VMware上的windows虚拟机安装使用Docker方法
  • 3D 地图渲染-区域纹理图添加
  • C++中的继承
  • 推导Bias² + Variance + σ²_ε
  • 【11408学习记录】从混乱到清晰:还原+断开+简化,彻底攻破英语分裂式长难句
  • Spring Boot 工程创建详解
  • arcgis10.8 Toolbox中没有找到conversion tools模块
  • GitHub 趋势日报 (2025年04月01日)
  • Kubernetes 入门篇之 Node 安装与部署
  • Windows 实战-evtx 文件分析--做题笔记
  • Pycharm(十二)列表练习题
  • 视图函数的应用
  • SuperMap GIS基础产品FAQ集锦(20250402)
  • .Net8项目使用docker、docker-compose部署步骤
  • 3、nFR52xx蓝牙学习(点亮第一个LED灯)