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

Spring AI MCP

MCP是什么

MCP是模型上下文协议(Model Context Protocol)的简称,是一个开源协议,由Anthropic(Claude开发公司)开发,旨在让大型语言模型(LLM)能够以标准化的方式连接到外部数据源和工具。它就像AI应用的通用接口,帮助开发者构建更灵活、更具上下文感知能力的AI应用,而无需为每个AI模型和外部系统组合进行定制集成。MCP被设计为一个通用接口,类似于USB-C端口,允许LLM应用以一致的方式连接到各种数据源和工具,如文件、数据库、API等。

MCP的三个概念

MCP Server

基于各语言的MCP SDK开发的程序或服务。简单来说就是一个后端服务,这个服务提供的方法就是MCP Tool。

MCP Tool

MCP Tool 属于MCP Server,一个MCP Server可以有多个MCP Tool。类似一个类里有多个方法,又或者一个服务里有多个接口。

MCP Client

当一段代码,一个Agent,一个客户端,基于MCP的规范去使用、去调用MCP Server里的MCP Tool时,它就是MCP Client。

MCP的调用流程

调用流程如图所示,其实和function calling是类似的
来自阿里云文章

MCP 案例

MCP 的两种传输协议,以下案例使用 sse (http),另一种是 stdio

MCP Server

基于Spring AI 的 MCP 服务端,提供天气预报的服务
■ 根据地区查询当天天气
■ 根据地区查询近期天气预报

// 定义 Tools
class WeatherServer {private WeatherExec weatherExec ;@Tool(name = "todayWeather", description = "根据地区查询当日天气")public WeatherModel todayWeather(String address) {return weatherExec.todayWeather(address);}@Tool(name = "futureWeather", description = "根据地区查询近期天气预报")public WeatherForecastModel futureWeather(String address) {return weatherExec.futureWeather(address);}}class Config {// 配置 Tools Bean@Beanpublic ToolCallbackProvider toolCallbackProvider(CustomService customService) {return MethodToolCallbackProvider.builder().toolObjects(customService).build();}}

MCP Client

这里仅描述 MCP 客户端和服务端的一些交互,暂不涉及 LLM

建立连接
获取MCP Server 的工具列表
执行一个工具

建立连接

客户端与服务端基于 SSE 建立长连接

curl --location 'http://localhost:8080/sse'

响应 endpoint /mcp/message 即触发事件的接口地址

发送获取 MCP 工具列表事件

触发事件,通过SSE返回结果

curl --location 'http://localhost:8080/mcp/message' \
--header 'Content-Type: application/json' \
--data '{"method": "tools/list","jsonrpc": "2.0","id": "xxx-id-001"
}'

sse 响应 message

{"jsonrpc": "2.0","id": "xxx-id-001","result": {"tools": [{"name": "todayWeather","description": "根据地区查询当日天气","inputSchema": {"type": "object","properties": {"address": {"type": "string"}}}},{...}]}
}

发送执行 MCP 工具事件

触发事件,通过SSE返回结果

curl --location 'http://localhost:8080/mcp/message' \
--header 'Content-Type: application/json' \
--data '{"method": "tools/call","jsonrpc": "2.0","id": "xxx-id-002","params": {"name": "todayWeather","arguments": {"address": "广州"}}
}'

sse 响应 message

{"jsonrpc": "2.0","id": "xxx-id-002","result": {"content": [{"type": "text","type": "text","text": "MCP Server 执行工具返回的数据"}],"isError": false}
}

Agent

MCP + LLM 其实就是个Agent
在这里插入图片描述

  1. 用户向Agent提问
  2. Agent调用MCP Server的接口,获取可用工具列表
  3. Agent调用LLM
    • 非函数调用,直接回复用户
    • 函数调用则继续
  4. Agent调用MCP Server的接口执行工具函数,获取执行结果
  5. 再次调用大模型,获取最终答案
  6. Agent回答用户
http://www.xdnf.cn/news/976.html

相关文章:

  • 计算机组成与体系结构:存储器(Memory)
  • Unity使用Rider的常用快捷键
  • 【显卡占用】kill程序后,显卡仍被占用
  • CAD文件如何导入BigemapPro
  • 基于Python的施工图与竣工图对比小工具开发方案
  • 使用 WinDbg 启动程序并捕获崩溃转储的完整流程
  • ANSYS Fluent -地下市政供热管道泄漏模型-note
  • 职坐标IT培训:人工智能职业跃迁路径
  • Timm 加载本地 huggingface 模型
  • requestAnimationFrame是什么?【前端】
  • Unreal如何实现一个Highlight高亮效果
  • 【PyQt5】@QtCore.pyqtSlot()的作用
  • 深度学习-全连接神经网络-2
  • Fluent 内置双向流固耦合FSI 液舱晃荡仿真计算
  • Java Lambda表达式指南
  • 4月21日复盘
  • 飞控系统的鲁棒性模块详解!
  • GPU软硬件架构协同设计解析
  • 蓝牙WiFi模组rtl8821cs在Android14调
  • 推荐系统/业务,相关知识/概念2
  • 【LaTeX】图片大小调整和并排放置
  • 一文详解卷积神经网络中的卷积层和池化层原理 !!
  • 大模型相关 XSS等 漏洞事件深度剖析
  • 进程和线程(2)
  • 跨境电商行业新周期下的渠道突围策略
  • [python] set
  • JavaScript day5
  • 一文了解相位阵列天线中的真时延
  • 深度学习:人工智能的核心驱动力
  • C语言——数组