MCP即Model Context Protocol(模型上下文協議),是由Anthropic公司于2024年11月26日推出的開放標準框架,旨在為大型語言模型與外部數據源、工具及系統建立標準化交互協議,以打破AI與數據之間的連接壁壘。
MCP架構與Appium有一定相似性,主要體現在以下方面: - C/S架構:MCP采用客戶端-服務器模型,分為協議層和傳輸層。Appium同樣基于C/S架構,由客戶端和服務器兩部分組成。在MCP中,客戶端嵌入在LLM應用中負責發送請求并接收響應,服務器是輕量級程序,通過標準化接口暴露功能。Appium的客戶端負責編寫和執行測試腳本,服務器是基于Node.js的HTTP服務器,負責接收客戶端請求,解析并在移動設備上執行相應操作。 - 消息通信:MCP在傳輸層使用JSON - RPC 2.0進行消息交換,支持標準輸入輸出和HTTP/SSE等傳輸模式。Appium客戶端與服務器端通過JSON Wire Protocol進行通信。兩者都通過特定的協議來實現客戶端和服務器之間的消息傳遞,以完成相應的任務。 不過,二者也有不同之處。MCP主要用于AI智能體與外部數據源、工具的交互,讓AI模型能連接并訪問外部資源。而Appium是用于移動應用的UI自動化測試,主要針對移動設備上的應用程序進行測試操作。
MCP Server具有提供資源、工具和** prompts(提示)**三大能力。其中最常用的功能通常是提供工具,原因是它能讓LLM與外界系統交互,完成如爬取網頁內容、獲取天氣信息等復雜任務,極大地擴展了LLM的應用范圍和實際能力。
Cursor使用MCP來允許AI訪問和處理多種數據源,包括本地文件、遠程API和數據庫等。 MCP Server的好處包括: - 安全連接:無需將API密鑰等敏感信息直接提供給LLM,由MCP Server自己控制資源訪問。- 受控數據流:所有數據交互通過標準化協議進行,降低數據泄露風險。- 選擇性授權:開發者能精確控制AI可訪問的資源范圍。 以下是一些MCP Server的實例: - PostgreSQL管家:讓AI能夠查詢數據庫,如電商運營者可通過AI自動生成SQL并返回可視化圖表,實現“查上周北京銷量Top10”等功能。- GitHub指揮官:可實現代碼庫智能管理,如開發者說“合并dev分支到master”,AI自動創建PR、檢查沖突、生成更新日志。- 文件魔術師:用于全自動文件處理,例如整理會議錄音時,AI自動轉文字,提取待辦事項,生成會議紀要.md文件。
MCP主要使用JSON - RPC 2.0進行消息通信,支持以下通信方式:
- 標準輸入輸出:適用于簡單的本地測試和開發場景,通過命令行將請求輸入到MCP Server,并從標準輸出獲取響應。 - HTTP:可用于客戶端與服務器在不同主機或網絡環境下的通信,能方便地與各種Web應用和服務集成,通過HTTP請求發送消息,服務器以HTTP響應返回結果。 - Server - Sent Events(SSE):用于實現服務器向客戶端推送實時更新,適用于需要及時獲取模型處理結果或狀態變化的場景,如長輪詢或實時交互的應用。 在實際應用中,HTTP是較為常用的通信方式。因為它具有廣泛的兼容性和成熟的生態系統,幾乎所有的現代編程語言和框架都支持HTTP通信,便于開發人員進行集成和擴展,能輕松實現客戶端與服務器之間的請求和響應交互,適用于多種應用場景,包括Web應用、移動應用等與MCP Server進行通信的場景。
MCP和Function call的區別
MCP和Function Call有以下區別:
- 復雜度:MCP是復雜的協議,涉及結構化數據交換和精細流程控制;Function Call相對簡單,只是模型發出的簡單函數調用指令。 - 上下文管理能力:MCP能深度管理對話上下文,記住用戶偏好和對話歷史;Function Call對上下文理解有限,主要關注函數調用本身。 - 數據交換形式:MCP支持復雜結構化數據交換,可進行多輪對話,交換用戶偏好、狀態信息等;Function Call通常只是簡單地傳遞函數調用所需的參數。 - 功能特性:MCP支持多輪對話、狀態管理、錯誤處理、復雜業務邏輯等復雜功能;Function Call主要用于執行簡單的、預定義的功能,如獲取信息、執行簡單操作。 - 適用場景:MCP適用于智能助手、復雜業務流程、需要多輪交互的場景;Function Call適用于簡單的信息查詢、工具調用等簡單任務。 MCP的優勢在于能處理復雜任務,通過多輪對話和上下文管理,可實現更智能的交互。它提供標準化框架,利于構建開放的插件化AI生態,讓AI模型便捷連接各類外部數據源和工具。不過,MCP也存在生態不成熟,第三方支持工具少,性能有待驗證,大規模并發調用可能有延遲瓶頸,以及模型支持程度不高的問題。 Function Call的優勢是簡單直接,易于實現和理解,能方便地擴展模型功能,讓模型利用外部工具完成基本任務。其劣勢是在處理復雜任務時較為繁瑣,需手動管理對話狀態和上下文,且缺乏統一標準,不同LLM供應商的實現方式存在差異。