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.pswp.cn/diannao/79892.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/79892.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/79892.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++_csp-j算法 (3)

弗洛伊德算法(Floyd) Floyd算法又稱為插點法,是一種利用動態規劃的思想尋找給定的加權圖中多源點之間最短路徑的算法,與Dijkstra算法類似。該算法名稱以創始人之一、1978年圖靈獎獲得者、斯坦福大學計算機科學系教授羅伯特弗洛伊…

QT常見輸入類控件及其屬性

Line Edit QLineEdit用來表示單行輸入框,可以輸入一段文本,但是不能換行 核心屬性: 核心信號 信號 說明 void cursorPositionChanged(int old,int new) 當鼠標移動時發出此型號,old為先前位置,new為新位置 void …

【k8s系列1】一主兩從結構的環境準備

環境準備 虛擬機軟件準備及安裝,這里就不詳細展開了,可以看文章:【一、虛擬機vmware安裝】 linux環境準備及下載,下載鏡像centOS7.9,以前也有寫過這個步驟的文章,可以看:【二、安裝centOS】 開始進入正題…

【C++類和數據抽象】類的作用域

目錄 一、類的作用域基本概念 1.1 什么是類的作用域 1.2 作用域層次體系 1.3 類作用域的特點 1.4 基本訪問規則 二、訪問控制三劍客 2.1 public:開放接口 2.2 private:數據封裝 2.3 protected:繼承通道 2.4 跨作用域訪問示例 三…

opencv圖片顏色識別,顏色的替換

圖片顏色識別 1. RGB顏色空間2. 顏色加法2.1使用numpy對圖像進行加法2.2使用opencv加法(cv2.add) 3 顏色加權加法(cv2.addWeighted())4. HSV顏色空間5. 制作掩膜4. 與運算(cv2.bitwise_and)5.顏色的替換7 R…

ADC數據不穩定的解決方案

問題如圖: 解決方案:上圖第一個通道后來接入GND,就穩定了 上圖第一個通道后來接入VCC,就穩定了

Spark(18)Yarn-概述

Hadoop三大核心組件:HDFS、MapReduce和YARN 一)Yarn的概念 YARN(Yet Another Resource Negotiator,另一種資源協調者)是一個通用資源管理系統和調度平臺,可為上層應用提供統一的資源管理和調度。它的引入為集群在利用率,資源統一管…

Flowith AI,解鎖下一代「知識交易市場」

前言 最近幾周自媒體號都在瘋狂推Manus,看了幾篇測評后,突然在某個時間節點,在特工的文章下,發現了很小眾的Flowith。 被這段評論給心動到,于是先去注冊了下賬號。一翻探索過后,發現比我想象中要有趣的多&…

Maxscript調用Newtonsoft.Json解析Json

Maxscript調用Newtonsoft.Json解析Json_newtonsoft.json maxscript-CSDN博客

搭建用友U9Cloud ERP及UAP IDE環境

應用環境 Microsoft Windows 10.0.19045.5487 x64 專業工作站版 22H2Internet Information Services - 10.0.19041.4522Microsoft SQL Server 2019 - 15.0.2130.3 (X64)Microsoft SQL Server Reporing Services 2019 - 15.0.9218.715SQL Server Management Studio -18.6 laster…

github新建一個遠程倉庫并添加了README.md,本地git倉庫無法push

1.本地git倉庫與遠程倉庫綁定 2.push時報錯,本地的 main 分支落后于遠程倉庫的 main 分支(即遠程有更新,但你本地沒有),需要拉取遠程的倉庫--->在merge合并(解決沖突)--->push 3.但是git …

我用deepseek做了一個提取壓縮文件夾下pdf和word文件工具

由于最近需要把大量的壓縮文件的pdf和word文件統一復制到一個文件夾中。 我們一般正常操作方式的是把一個壓縮文件一個一個解壓,然后在把一個的解壓好的文件夾下文件復制到另外一個文件夾中。 這個也需太繁瑣了,從以往統計的需要花費兩個小時間&#x…

企業網絡安全合規風險高、運營不穩定,要怎么解決?

在數字化浪潮中,數據已然成為企業的核心資產,其重要性不言而喻。然而,數據泄露風險也時刻威脅著企業的生存與發展。不少企業在歷經數據泄露的慘痛教訓后,紛紛選擇部署數據防泄露系統。那么,企業部署數據防泄露系統前后…

C#—Lazy<T> 類型(延遲初始化/懶加載模式)

C# 的 Lazy<T> 類型 Lazy<T> 是 C# 中的一個類&#xff0c;用于實現延遲初始化&#xff08;懶加載&#xff09;模式。它提供了一種線程安全的方式來延遲創建大型或資源密集型對象&#xff0c;直到第一次實際需要時才進行初始化。 主要特點 延遲初始化&#xff1a…

C++之unordered封裝

目錄 一、哈希表的修改 1.1、哈希表節點結構 1.2、迭代器 1.3、哈希表結構 1.4、完整代碼 二、unordered_map的實現 二、unordered_set的實現 一、哈希表的修改 注意&#xff1a;這里我們使用哈希桶來封裝unordered_map和unordered_set。 1.1、哈希表節點結構 templa…

[滲透測試]滲透測試靶場docker搭建 — —全集

[滲透測試]滲透測試靶場docker搭建 — —全集 對于初學者來說&#xff0c;僅僅了解漏洞原理是不夠的&#xff0c;還需要進行實操。對于公網上的服務我們肯定不能輕易驗證某些漏洞&#xff0c;否則可能觸犯法律。這是就需要用到靶場。 本文主要給大家介紹幾種常見漏洞對應的靶場…

Docker如何更換鏡像源提高拉取速度

在國內&#xff0c;由于網絡政策和限制&#xff0c;直接訪問DockerHub速度很慢&#xff0c;尤其是在拉取大型鏡像時。為了解決這個問題&#xff0c;常用的方法就是更換鏡像源。本文將詳細介紹如何更換Docker鏡像源&#xff0c;并提供當前可用的鏡像源。 換源方法 方法1&#x…

第一篇:從哲學到管理——實踐論與矛盾論如何重塑企業思維

引言&#xff1a;當革命哲學照亮現代商業 1937年&#xff0c;毛澤東在戰火中寫就的《實踐論》《矛盾論》&#xff0c;為中國共產黨提供了認識世界的方法論。今天&#xff0c;這兩部著作正成為企業破解管理困局的“思維操作系統”&#xff1a; 戰略模糊&#xff1a;據Gartner統…

云原生--基礎篇-2--云計算概述(云計算是云原生的基礎,IaaS、PaaS和SaaS服務模型)

1、云計算概念 云計算是一種通過互聯網提供計算資源&#xff08;包括服務器、存儲、數據庫、網絡、軟件等&#xff09;和服務的技術模式。用戶無需擁有和維護物理硬件&#xff0c;而是可以根據需要租用這些資源&#xff0c;并按使用量付費。 2、云計算特點 &#xff08;1&am…

一級濾波器設計:IL_cmdm > 80dB

目錄 背景 目的 操作 仿真測試 搭建仿真模型 插入損耗測試 優化設計后重新測試 思考 背景 在選購共模電感時&#xff0c;規格書中通常會提供插損曲線或者阻抗-頻率曲線&#xff0c;但這些數據都是在特定條件下測試獲得的。如果將其集中在我們的樣機中性能會如何&#…