MCP模型上下文協議以及交互流程

1. MCP 是什么

  • 全稱:Model Context Protocol

  • 定位:讓大語言模型(LLM)能在“上下文”之外,按統一格式訪問外部數據、調用插件、持久化狀態。

  • 動機:以前每家框架(LangChain、LlamaIndex 等)都有自己的“工具調用/記憶”規范,很難互通;MCP 就是做一個“HTTP/JSON-RPC”風格的公共協議。

2. 結構 & 概念

MCP 定義了幾類對象/消息:

名稱作用
resources模型可直接訪問的數據(文件、數據庫、API、消息流)
prompts可復用的 prompt 模板,外部系統可以動態注入
tools可調用的外部函數或 API,帶參數 schema
sessions一次上下文交互(可包含用戶消息、模型回復、工具調用)
capabilities服務端聲明自己支持哪些功能(資源、工具、訂閱、推送等)

協議本質是 JSON-RPC 2.0 風格(雙向流),模型和外部“上下文服務器”之間通過 WebSocket 或 HTTP(SSE/gRPC)傳遞消息。

3. 消息交互流程

角色與數據流(逐步)

  1. 用戶 → MCP客戶端

    • 用戶的輸入(語音、文字等)先進到你自己寫的“前端/適配層”,這個層里包含 MCP 客戶端。

    • MCP 客戶端在收到用戶輸入前,已經向 MCP 服務器拿過一遍 tools/resources/prompts 列表,存著最新的能力元數據。

  2. MCP客戶端 → LLM

    • MCP 客戶端把用戶輸入 + 工具/資源描述(以及任何 session 上下文)拼成一份上下文,一起發給 LLM。

    • 對于支持 function-calling 的模型,這一步就是把 functions 參數傳進去;對于不支持的模型,就把工具描述寫在 system prompt 里。

  3. LLM 推理

    • 如果它覺得自己能直接回答,就直接返回自然語言。

    • 如果它覺得需要外部數據/工具,就按你提供的工具描述生成一條 工具調用請求tool_call 或 JSON)。

  4. LLM → MCP客戶端

    • 這個“工具調用消息”不會直接給用戶,模型返回給 MCP 客戶端。

  5. MCP客戶端 → MCP服務器

    • MCP 客戶端檢查工具名和參數是否合法,然后調用 MCP 服務器的 tools/callresources/read 等 API。

  6. MCP服務器 執行

    • 調后端 API、查數據庫、讀文件,返回 JSON 結果。

  7. MCP客戶端 → LLM(tool_result)

    • MCP 客戶端把結果包成 “tool_result” 消息再發回給 LLM,讓模型繼續推理生成自然語言。

  8. LLM → MCP客戶端 → 用戶

    • LLM 生成最終的對話文本。

    • MCP 客戶端把這個文本轉發回給用戶界面/設備。

sequenceDiagramparticipant User as 用戶participant MCPClient as MCP客戶端(含前端)participant LLM as AI(LLM)participant MCPServer as MCP服務器User->>MCPClient: 用戶輸入MCPClient->>LLM: 用戶輸入 + 工具/資源描述LLM-->>MCPClient: ①直接回答 或 ②tool_call JSONalt 直接回答MCPClient->>User: 轉發 LLM 的自然語言回答else tool_callMCPClient->>MCPServer: 調用工具/資源MCPServer-->>MCPClient: 工具結果MCPClient->>LLM: tool_resultLLM-->>MCPClient: 最終自然語言回答MCPClient->>User: 轉發回答end

關鍵點(回答你的問題)

  • 最后一句話(自然語言回答)總是由 LLM 生成的,因為只有模型能把外部數據變成人能讀懂的話。

  • 真正“發回用戶”的動作通常由 MCP 客戶端來做,因為客戶端是“會話的中間人”,它既能調模型、又能調 MCP 服務器、又能跟你的前端交互。

  • 也就是說:

    • 生成者:LLM

    • 發送者:MCP 客戶端(它把 LLM 的回答發給用戶)

5. 協議格式(簡例)

列出工具

{"jsonrpc": "2.0","id": "1","method": "tools/list"
}

響應

{"jsonrpc": "2.0","id": "1","result": {"tools": [{"name": "search_contacts","description": "Search contacts by name","input_schema": {"type": "object","properties": {"query": {"type": "string"}},"required": ["query"]}}]}
}

調用工具

{"jsonrpc": "2.0","id": "2","method": "tools/call","params": {"name": "search_contacts","arguments": {"query": "Alice"}}
}

6. 應用場景

  • 統一模型插件生態(比如 OpenAI Assistant、Claude Workbench、LangChain agent 都能用同一協議)。

  • 本地/企業內部數據(CRM、ERP、數據庫、知識庫)接入模型。

  • 安全地持久化模型“記憶”。

7.MCP 的標準工作方式

角色作用
AI(LLM)只做推理:理解用戶話 → 生成自然語言或工具調用請求(JSON)。它本身不知道“天氣 API 在哪”。
MCP 客戶端嵌在 AI 運行環境里的適配層。負責:- 向 MCP Server 拉取工具列表、資源列表- 把 LLM 生成的“工具調用 JSON”包裝成協議請求發出去- 把響應結果再送回給 LLM。
MCP 服務器工具/資源的實際托管地,負責執行真正的 API/數據庫操作,并按 MCP 協議返回結果。

時序(以查天氣為例)

sequenceDiagram
participant User as 用戶
participant AI as LLM
participant MCPClient as MCP客戶端
participant MCPServer as MCP服務器

? ? User->>AI: “幫我查一下北京的天氣”
Note right of AI: LLM推理<br>發現自己不能回答
AI->>MCPClient: 生成工具調用JSON {name:"get_weather",args:{"city":"北京"}}
MCPClient->>MCPServer: tools/call(get_weather,{"city":"北京"})
MCPServer-->>MCPClient: {"result":"晴 28℃"}
MCPClient-->>AI: 返回工具結果
AI->>User: “北京今天晴,28℃”

LLM 的“工具調用消息”是什么樣子

在 MCP/Assistants 框架里,模型輸出的其實是一個 結構化消息,類似這樣:

{"type": "tool_call","name": "get_weather","arguments": {"city": "北京"}
}

這個消息不會直接給用戶,而是交給 MCP 客戶端去執行。

然后客戶端執行工具 → 把結果打包成一條 “tool_result” 消息送回模型;模型再在上下文里用這個結果生成給用戶的自然語言回復。


MCP調用流程可以簡化為一句話:

LLM 只“決定要不要用哪個工具 + 怎么調用”,真正執行工具和返回結果都是 MCP 客戶端+服務器干的

流程是這樣的 llm可以請求的除了工具 還可以請求資源、提示詞等其他東西

所以標準交互模式:

  1. LLM → MCP客戶端:list_tools / list_resources / list_prompts

  2. MCP客戶端 → MCP服務器:按 JSON-RPC 發請求

  3. MCP服務器 → MCP客戶端:返回可用項列表

  4. LLM 決定用哪個 → 發起具體調用

  5. MCP服務器執行 → 把結果返回給 LLM

總的來說,MCP 給模型開放了“資源/提示詞/工具/上下文”等一整套統一接口,模型并不需要知道背后是數據庫、API 還是文件,只管按 MCP 協議去“列/讀/調”。用戶只看見 MCP 客戶端,模型負責生成回答或工具調用,客戶端負責把所有東西串起來并最終把模型回答送回用戶。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/922129.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/922129.shtml
英文地址,請注明出處:http://en.pswp.cn/news/922129.shtml

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

相關文章

MySQLTransactionRollbackException

問題描述mysql部署1主3從&#xff0c;昨天發現主庫有大量報警錯誤&#xff1a;Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction ; Deadlock found when trying to get lock; …

Redis環境搭建指南:Windows/Linux/Docker多場景安裝與配置

Redis環境搭建指南&#xff1a;Windows/Linux/Docker多場景安裝與配置 1. Redis安裝方式概覽 1.1 安裝方式對比 安裝方式適用場景優點缺點難度Windows直接安裝開發調試安裝簡單&#xff0c;Windows兼容好性能不如Linux&#xff0c;生產不推薦?Linux源碼編譯生產環境性能最佳…

leetcode.80刪除有序數組中的重復項2

題目描述 給你一個有序數組 nums &#xff0c;請你 原地 刪除重復出現的元素&#xff0c;使得出現次數超過兩次的元素只出現兩次 &#xff0c;返回刪除后數組的新長度。 不要使用額外的數組空間&#xff0c;你必須在 原地 修改輸入數組 并在使用 O(1) 額外空間的條件下完成。…

運動卡新手入門及常見問題處理

1.新手入門1.1 插卡打開包裝&#xff0c;拿出PCI板卡&#xff0c;如下圖&#xff1a;打開電腦機箱蓋&#xff0c;找到PCI插槽&#xff0c;如下圖&#xff08;紅色框部分是PCI槽&#xff0c;有些主板上PCI槽是白色或其他顏色&#xff09;&#xff1a;插入板卡&#xff0c;如下圖…

PRINCE2與PMP項目管理體系對比

在全球范圍內&#xff0c;PRINCE2與PMP是兩大最具影響力的項目管理體系。PRINCE2注重流程和治理結構&#xff0c;強調“控制”與“規范”&#xff1b;而PMP基于PMBOK指南&#xff0c;強調知識體系和方法論的全面性&#xff0c;更關注“工具”與“實踐”。 不同體系的側重點&…

在UniApp跨平臺開發中實現相機自定義濾鏡的鏈式處理架構

以下是進階方案&#xff1a;架構核心設計分層結構$$Pipeline Capture \otimes Filter_1 \otimes Filter_2 \otimes \cdots \otimes Filter_n \otimes Render$$ 其中&#xff1a;$\otimes$ 表示鏈式處理操作符$Capture$ 為原始圖像采集層$Filter_n$ 為可插拔濾鏡單元$Render$ 為…

Mark5 穿越機電調深度解析:設計、選型、控制與實戰(下)

TIM_SetCompare3 (TIM1, T0 + T1 + T2); // W+? break;? case 3:? // U - 導通,V - 導通,W + 導通? TIM_SetCompare1 (TIM1, T0); // U-? TIM_SetCompare2 (TIM1, T0); // V-? TIM_SetCompare3 (TIM1, T0 + T1 + T2); // W+? break;? case 4:? // U - 導通…

背包問題從入門到入土

我在這里介紹4種常見的背包問題&#xff0c;這里我想按易 --> 難程度從01背包&#xff0c;完全背包&#xff0c;分組背包&#xff0c;多重背包的順序介紹。&#xff08;封面附在最后&#xff09;一&#xff0c;01背包問題&#xff08;后面三個背包問題的基礎&#xff09;01背…

Leetcode 18 java

?????1???????141. 環形鏈表1 題目 ?????1???????141. 環形鏈表 給你一個鏈表的頭節點 head &#xff0c;判斷鏈表中是否有環。 如果鏈表中有某個節點&#xff0c;可以通過連續跟蹤 next 指針再次到達&#xff0c;則鏈表中存在環。 為了表示給定鏈表…

Linux 正則表達式詳解(基礎 + 擴展 + 實操)

Linux 正則表達式詳解&#xff08;基礎 擴展 實操&#xff09; 正則表達式&#xff08;Regular Expression&#xff0c;簡稱 RE&#xff09;是 Linux 文本處理的核心工具&#xff0c;用于定義字符匹配模式&#xff0c;配合 grep、sed、awk 等工具可實現文本過濾、查找、替換等…

Json-rpc通信項目(基于C++ Jsoncpp muduo庫)

一、介紹RPC RPC&#xff08;Remote Procedure Call&#xff09;遠程過程調用&#xff0c;一種通過網絡從遠程計算器上請求服務&#xff0c;而不需要了解底層網絡通信細節&#xff0c;RPC可以使用多種網絡協議進行通信&#xff0c;并且在TCP/IP網絡四層模型中跨越了傳輸層和應…

RL【9】:Policy Gradient

系列文章目錄 Fundamental Tools RL【1】&#xff1a;Basic Concepts RL【2】&#xff1a;Bellman Equation RL【3】&#xff1a;Bellman Optimality Equation Algorithm RL【4】&#xff1a;Value Iteration and Policy Iteration RL【5】&#xff1a;Monte Carlo Learnin…

Redis是什么?一篇講透它的定位、特點與應用場景

Redis是什么&#xff1f;一篇講透它的定位、特點與應用場景 1. Redis的定義與核心概念 1.1 什么是Redis&#xff1f; Redis&#xff08;Remote Dictionary Server&#xff09; 是一個開源的、基于內存的數據結構存儲系統&#xff0c;可以用作數據庫、緩存和消息代理。Redis由…

一款免費開源輕量的漏洞情報系統 | 漏洞情報包含:組件漏洞 + 軟件漏洞 + 系統漏洞

工具介紹 bug_search一款免費開源輕量的漏洞情報系統 基于python3 Amis2.9 開發&#xff0c;僅依賴Flask,requests&#xff0c;無需數據庫&#xff0c;Amis是百度開源的低代碼前端框架漏洞情報包含&#xff1a;組件漏洞 軟件漏洞 系統漏洞 增加郵件發送消息報警功能增加釘釘…

詳解在Windows系統中生成ssl證書,實現nginx配置https的方法

目錄一、下載安裝OpenSSL二、證書生成三、修改nginx配置總結Nginx 是一個高性能的HTTP和反向代理web服務器&#xff0c;在進行web項目開發時&#xff0c;大多都是使用nginx對外提供web服務。HTTPS &#xff08;全稱&#xff1a;Hypertext Transfer Protocol Secure [5]&#xf…

AI視覺算法中的OpenCV API (二)

視頻寫入 (FourCC, VideoWriter)? 1. VideoWriter_fourcc - 視頻編碼器四字符代碼 # OpenCV 3.x, 4.x fourcc cv2.VideoWriter_fourcc(M,J,P,G)fourcc cv2.VideoWriter_fourcc(*H264)fourcc cv2.VideoWriter_fourcc(*MJPG) ?FourCC?&#xff1a; 代表 ?Four ?Charac…

分享| 2025年版AIGC數字人實驗室解決方案教學資源解析

AIGC數字人實驗室解決方案構建了涵蓋基礎層、平臺環境層與資源層的多層次教學架構&#xff0c;依托150平方米的實體空間與60人并行授課的規模化支持&#xff0c;為學生提供了技術實踐與創新的高效平臺。其教學資源體系覆蓋AIGC文本生成、圖像生成、數字人應用與智能體開發四大核…

內存大(巨)頁

一、大&#xff08;巨&#xff09;頁 大&#xff08;巨&#xff09;頁&#xff0c;很好理解&#xff0c;就是的大的頁。說這個大頁前&#xff0c;得先把計算機中內存的管理簡單說明一下&#xff0c;否則可能對于一些新手或者把操作系統中內存管理的方法的開發者不太友好。最早的…

langgraph astream使用詳解

langgraph中graph的astream&#xff08;stream&#xff09;方法分別實現異步&#xff08;同步&#xff09;流式應答&#xff0c;在langgraph-api服務也是核心方法&#xff0c;實現與前端的對接&#xff0c;必須要把這個方法弄明白。該方法中最重要的參數是stream_mode&#xff…

【C++】模板進階:非類型參數、模板特化與分離編譯

目錄 1. 非類型模板參數 2. 模板的特化 3. 分離編譯 1. 非類型模板參數 模板參數分類類型形參與非類型形參。 類型形參即&#xff1a;出現在模板參數列表中&#xff0c;跟在class或者typename之類的參數類型名稱。 非類型形參&#xff0c;就是用一個常量作為類(函數)模板…