動態

詳情 返回 返回

[MCP][01]簡介與概念 - 動態 詳情

簡介

MCP(全稱為Model Context Protocol,模型上下文協議)是一種面向大模型交互過程的通用上下文協議標準。其核心目標在於為模型構建一個結構化、可控、可擴展的語義執行環境,使語言模型能夠在統一的上下文管理體系下進行任務調度、工具調用、資源協作與狀態保持,從而突破傳統Prompt Engineering在多輪交互、指令組合與行為穩定性方面的瓶頸。

在傳統的大模型應用中,模型本身只能被動地接收輸入、產生輸出,要讓它調用外部工具或訪問自定義的上下文,就需要在代碼裏逐條寫好 API 調用、認證、錯誤處理的邏輯,既繁瑣又難以維護。MCP的初衷,就是將這些"上下文管理"和"工具調用"能力抽象成一個標準化的通信協議,讓大模型應用只需關注"我想用什麼資源",由專門的 MCP 服務端來真正執行調用、管理狀態、返回結果。

MCP 官方GitHub

有一種説法是,傳統的大模型應用叫做Prompt Engineering,而MCP出現後,大模型應用開發應該叫做Context Engineering。傳統的提示工程常常依賴於簡單的字符串拼接,這種方式有幾個問題:

  • 歧義性:模型可能難以區分哪些是指令,哪些是用户輸入,哪些是檢索到的數據。
  • 提示注入風險:如果提示中包含惡意指令,例如ignore all previous instructions,模型可能被欺騙。
  • 脆弱性:格式的微小變化(比如多一個換行符)都可能導致模型性能下降。
  • 難以維護:當上下文變得更復雜時(例如,多個數據源、工具定義、歷史消息),這種拼接方式會變得一團糟(親身體驗,塞了一堆歷史消息後,模型的回答越拐越遠)

核心概念

MCP-skill-map

Tools(工具)

工具是AI模型可以調用以執行特定操作的函數。它們允許模型與外部系統交互,執行有副作用的操作,如:

  • 調用API獲取實時數據
  • 查詢或修改數據庫
  • 執行代碼或腳本
  • 發送郵件或消息
  • 文件操作

工具由模型控制,這意味着AI決定是否以及何時使用它們。工具調用可能會產生副作用,其結果可以反饋到對話中。

sequenceDiagram participant l as LLM participant c as Client participant s as Server Note over c,s: Discovery c ->> s: tools/list s -->> c: List of tools Note over l,c: Tool Selection l ->> c: Select tool to use Note over c,s: Invocation c ->> s: tools/call s -->> c: Tool result c ->> l: Process result Note over c,s: Updates s -->> c: tools/list_changed c ->> s: tools/list s -->> c: Updated tools

Resources(資源)

資源是提供給模型的只讀上下文單元(數據源)。它們可以是:

  • 文件內容
  • 數據庫記錄
  • API響應
  • 知識庫內容

資源由應用程序控制,託管方或開發人員決定公開哪些數據以及如何公開。讀取資源沒有副作用,類似於僅獲取數據的GET請求。資源提供可在需要時注入模型上下文的內容(例如,在問答場景中檢索到的文檔)。

Prompts(提示模板)

提示模板是可重複使用的提示模板或指令,可以根據需要調用。它們由用户控制或由開發人員預定義。提示可能包含常見任務或指導性工作流程的模板(例如,代碼審查模板或問答格式)。

提示模板的關鍵特性包括:

  • 參數化:支持動態參數輸入
  • 資源整合:可嵌入資源上下文供模型參考
  • 多輪交互:支持構建多輪對話流程
  • 統一發現:通過標準接口註冊和調用

Sampling(採樣)

採樣是工具與LLM交互以生成文本的機制。通過採樣,工具可以請求LLM生成文本內容,例如生成詩歌、文章或其他文本內容。採樣允許工具利用LLM的能力來創建內容,而不僅限於執行預定義的操作。

Elicitation(徵詢)

徵詢是一種允許工具向用户請求額外信息或確認的機制。當工具執行過程中需要更多信息才能繼續執行時,可以使用徵詢功能與用户交互。這在處理需要用户確認或提供額外參數的操作時特別有用。

例如,在預訂系統中,如果用户請求的日期已滿,工具可以徵詢用户是否願意選擇其他日期。徵詢機制確保了工具可以在必要時暫停執行,等待用户輸入,從而提供更好的用户體驗。

徵詢的關鍵特性包括:

  • 交互性:允許工具與用户進行雙向溝通
  • 驗證:可以對用户輸入進行驗證,確保數據的正確性
  • 可選性:用户可以選擇接受、拒絕或取消徵詢請求
  • 結構化:支持結構化數據輸入,便於處理複雜信息

Roots(根)

Root表示一次語義執行的起點,攜帶資源引用、執行目標、響應格式等信息,支持多併發執行流。它作為語義執行的基礎輸入結構,可以包含多個Prompt和工具,為模型提供完整的上下文環境。

Logging(日誌記錄)

日誌記錄是MCP中的一個重要功能,允許服務器和工具向客户端發送日誌信息。通過日誌記錄,開發者可以跟蹤工具執行過程、調試問題以及監控系統狀態。MCP支持多種日誌級別,包括調試(debug)、信息(info)、警告(warning)和錯誤(error)等。

Notifications(通知)

通知機制允許服務器向客户端發送實時更新信息,例如資源變更、工具列表更新等。通過通知,客户端可以及時瞭解服務器狀態的變化,並相應地更新用户界面或執行其他操作。常見的通知類型包括資源更新通知、工具列表變更通知、提示列表變更通知等。

組件

MCP Server

Server 是一個獨立的程序或服務,它通過 MCP 協議向 MCP 客户端暴露特定的功能、工具或數據資源。

角色職責:

  • 提供工具/資源:MCP Server 是外部能力(如數據庫、API、文件系統、計算服務等)的封裝器或適配器。它將這些外部能力以標準化、可供大模型調用的形式暴露出來。
  • 執行操作:當接收到 MCP Client 的請求時,MCP Server 負責執行底層操作(例如,查詢數據庫、調用第三方 API、執行代碼等)。
  • 返回結果:將執行結果返回給請求它的 MCP Client。
  • 獨立部署:MCP Server 可以運行在本地機器上,也可以部署在遠程服務器上。

MCP Host

Host 是用户直接交互的應用程序或環境。它通常是AI應用程序的入口點,比如:

  • 一個聊天機器人界面
  • 一個IDE
  • 一個自定義的AI代理應用程序

角色職責:

  • 用户交互:接收用户的請求和輸入,並向用户顯示大模型生成的響應。
  • 協調與編排:負責整個工作流的協調和編排。它決定何時調用大模型,何時需要外部工具或數據,以及如何將它們的結果整合起來。
  • 管理客户端:Host 創建並管理一個或多個 MCP 客户端實例
  • 維護核心上下文:通常由 Host 來維護整個對話歷史和應用程序的全局上下文,而不是將所有信息都暴露給單個服務器。
  • 安全邊界:強制執行客户端和服務器之間的安全邊界和權限控制。

MCP Client

Client 是內置在 Host 應用程序中的一個組件,它作為 Host 和 MCP Server 之間的橋樑。一個Host內可以有多個Client。

角色職責:

  • 協議轉換:將 Host 的請求轉換成MCP協議定義的標準格式,以便MCP Server能夠理解。同時,它也將MCP Server的響應轉換成Host可用的格式。
  • 會話管理:與一個特定的MCP Server建立並維護一對一的連接和會話生命週期。
  • 能力協商:在建立連接時,與MCP Server協商雙方支持的能力和協議版本。
  • 消息路由:負責在Host和其Server之間雙向路由消息。
  • 安全與認證:可以處理與MCP Server之間的認證和授權,確保只有授權的請求才能到達服務器。

References

  • https://zhuanlan.zhihu.com/p/29001189476
user avatar ludangxin 頭像 gogoSandy 頭像
點贊 2 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.