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

在这里插入图片描述
githubhttps://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-mcp

  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        options:
          model: qwen2.5-coder:7b

  mcp:
    client:
      enabled: true
      name: mcp-client
      version: 1.0.0
      type: SYNC
      request-timeout: 30s
      stdio:
        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 {



    @Resource
    private OllamaChatModel ollamaChatModel;

    @Resource
    private 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方法所在数组中的位置,本想查看来着,结果创建成功了

在这里插入图片描述

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

<think>好的,用户想找关于Java MCP SDK的文档或教程。首先,我需要确认MCP SDK具体指什么,因为可能有不同的含义。 MCP通常可以指Minecraft Coder Pack,用于修改Minecraft游戏。但用户提到Java,可能和游戏开发相关。另外,也有可能是指Multi-Craft Project或其他企业级开发工具。我需要先验证常见的可能性。 检查现有引用,发现引用[1]提到NDK用于Android开发,引用[3]是关于Android应用的链接,可能用户提到的MCP SDK与Android或游戏开发有关。但用户明确提到Java,所以更可能是指Minecraft的Mod开发工具,即Minecraft Coder Pack(MCP)。 接下来需要确认MCP SDK是否有官方文档。搜索发现,MCP的文档可能分布在社区论坛或GitHub仓库。比如,Minecraft Forge或相关Mod开发社区可能有教程。此外,用户可能需要配置开发环境,使用Gradle或Maven构建项目。 另外,考虑到用户可能混淆了缩写,是否存在其他MCP SDK。例如,某些企业级SDK可能有类似缩写,但根据引用内容,用户可能更倾向于游戏开发相关的资料。需要建议用户确认具体领域,并提供常见可能的资源链接。 最后,生成相关问题,帮助用户进一步明确需求或找到其他相关资源。</think>关于Java MCP SDK的文档或教程,以下是相关信息整理: 1. **定义与用途** - MCP(Mod Coder Pack)是用于Minecraft模组开发的一套工具,可将Minecraft的混淆代码转换为可读形式,方便开发者进行二次开发[^3]。 - 它包含反编译工具、代码映射表和构建系统,支持Java语言开发。 2. **官方资源** - **MCP官方GitHub**: MCP的核心代码和基础文档可在GitHub仓库查看: [MCP GitHub Repository](https://github.com/MinecraftForge/MCP) 包含配置指南和构建脚本示例。 - **Minecraft Forge文档**: 大多数MCP开发者会结合Minecraft Forge使用,其文档提供完整的模组开发教程: [Forge Documentation](https://mcforge.readthedocs.io/) 3. **关键教程** - **环境配置**: 需要安装JDK、Gradle和IDE(如Eclipse或IntelliJ IDEA),配置步骤可参考: ```gradle dependencies { implementation 'net.minecraftforge:forge:1.16.5-36.2.34' } ``` - **代码反编译**: 使用MCP提供的`decompile`命令生成可读源码: ```bash ./gradlew setupDecompWorkspace ``` 4. **社区支持** - **Minecraft Forum**: 开发者常在此分享经验: [Minecraft Mod Development Forum](https://www.minecraftforum.net/forums/mapping-and-modding-java-edition) - **Stack Overflow**: 标签`#minecraft-modding`下有大量技术讨论。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值