AI產(chǎn)品經(jīng)理進(jìn)階:萬字深析大模型的MCP(上)

0 評(píng)論 1661 瀏覽 10 收藏 22 分鐘

隨著人工智能技術(shù)的飛速發(fā)展,如何讓AI系統(tǒng)更高效地與外部數(shù)據(jù)源和工具進(jìn)行交互,成為了一個(gè)亟待解決的問題。本文將深入探討一種名為MCP(Model Context Protocol)的新興技術(shù),供大家學(xué)習(xí)。

做Agent產(chǎn)品抵達(dá)深水區(qū)時(shí),你總會(huì)遇到MCP(Model Context Protocol)這個(gè)怪獸,今天我們一起來打掉他。

簡(jiǎn)單理解:

MCP的核心價(jià)值就在于統(tǒng)一標(biāo)準(zhǔn)、消除隔閡。

它把AI和外界連接的方式從“煙囪林立”變成了“道路縱橫”,讓信息和指令能夠自由流通。

讓我們先通過幾個(gè)熟悉的場(chǎng)景建立一個(gè)感性的認(rèn)知:

通俗類比解釋MCP

“萬能插座”

可以把MCP想象成給所有AI程序制定了統(tǒng)一的“插座標(biāo)準(zhǔn)”。過去,不同的AI(插頭)要連接不同的數(shù)據(jù)源(電源),往往需要各種各樣的轉(zhuǎn)換適配器;而MCP就好比全國統(tǒng)一了插座形狀,讓任何AI插頭都能直接插入任何數(shù)據(jù)源插座使用。這個(gè)統(tǒng)一接口大大方便了AI取用數(shù)據(jù),就像電器有了標(biāo)準(zhǔn)電源后隨處都能通電一樣。

“通用翻譯官”

MCP又像是AI與外界系統(tǒng)之間的通用語言翻譯官。每種數(shù)據(jù)源本來有自己的“語言”(接口/API),每個(gè)AI模型也有自己的“理解方式”。MCP制定了一種大家都懂的語言:數(shù)據(jù)源把信息用MCP語言表達(dá)出來,AI也用MCP語言提出請(qǐng)求。這樣雙方即使“母語”不同,也能在MCP翻譯下無障礙溝通。比如AI不會(huì)直接說“給我文件X”,而是通過MCP提出標(biāo)準(zhǔn)化請(qǐng)求,文件系統(tǒng)也通過MCP以標(biāo)準(zhǔn)格式回應(yīng)。所有交流都有共同的語法和詞匯,避免了誤解和交流障礙。

“AI的USB-C接口”

正如前文所述,官方將MCP比作AI領(lǐng)域的USB-C接口。類比來看,不同的AI助手就像不同的電子設(shè)備,以前每個(gè)設(shè)備需要不同的數(shù)據(jù)線連不同的外設(shè)(比如老式手機(jī)數(shù)據(jù)線各不相同),而MCP提供了一個(gè)統(tǒng)一的細(xì)窄接口,讓AI能夠即插即用各種外設(shè)。例如,通過MCP,一個(gè)AI助手今天可以連U盤(數(shù)據(jù)庫),明天插打印機(jī)(郵件系統(tǒng)),后天接顯示器(報(bào)告生成)——接口都一樣,只是功能不同。就像USB-C讓我們少了無數(shù)轉(zhuǎn)換頭和線纜,MCP也讓AI集成少了無數(shù)專有API和腳本。對(duì)于終端用戶來說,這意味著AI助手將變得更加多才多藝且使用方便,因?yàn)楸澈髲?fù)雜的連接都被這個(gè)看不見的“USB-C”標(biāo)準(zhǔn)屏蔽掉了。

MCP的基本概念和定義

Model Context Protocol(MCP)是由Anthropic在2024年底提出并開源的一種開放標(biāo)準(zhǔn)協(xié)議,用于連接大型語言模型(LLM)等AI系統(tǒng)與各種外部數(shù)據(jù)源和工具。簡(jiǎn)單來說,MCP為AI模型提供了一個(gè)統(tǒng)一接口,讓模型能夠方便、安全地訪問所需的數(shù)據(jù)和功能,而不再被“困”在封閉的知識(shí)范圍內(nèi)。官方將MCP比喻為AI應(yīng)用的“USB-C接口”——正如USB-C為電子設(shè)備提供了標(biāo)準(zhǔn)化的連接方式,MCP也提供了標(biāo)準(zhǔn)化方式將AI模型連接到不同的數(shù)據(jù)源和工具。換句話說,以前每新增一種數(shù)據(jù)源都需要定制開發(fā)對(duì)接代碼,而現(xiàn)在有了MCP這個(gè)“通用插頭”,AI與任何數(shù)據(jù)源對(duì)接都可以按照統(tǒng)一規(guī)則進(jìn)行。

MCP本質(zhì)上定義了一套通用語言和接口,用于讓AI模型與外部系統(tǒng)交換“上下文”信息(即模型需要的額外信息或操作指令)。例如,通過MCP,像Claude這樣的對(duì)話模型可以直接查詢數(shù)據(jù)庫、調(diào)用API、讀取文件,獲取實(shí)時(shí)的信息用于回答問題。MCP的目標(biāo)是提高AI助手響應(yīng)的相關(guān)性和準(zhǔn)確性,讓模型的知識(shí)和能力不再局限于訓(xùn)練語料,而是能動(dòng)態(tài)擴(kuò)展到用戶自己的數(shù)據(jù)和現(xiàn)有工具中。正因如此,可以把MCP視作一個(gè)AI領(lǐng)域的通用翻譯器:Anthropic公司人士形象地描述,他們的愿景是“構(gòu)建一個(gè)AI可以連接任意數(shù)據(jù)源的世界”,而MCP則充當(dāng)了其中的“通用翻譯器”。

起源與發(fā)展背景

MCP誕生于AI應(yīng)用迅猛發(fā)展的背景下。隨著GPT-4、Claude等大模型在推理能力和回答質(zhì)量上取得突破,如何讓AI與企業(yè)自身的數(shù)據(jù)和系統(tǒng)對(duì)接成為新的挑戰(zhàn)。在MCP出現(xiàn)之前,不同AI助手接入數(shù)據(jù)庫、文件系統(tǒng)、第三方應(yīng)用等通常都需要編寫定制的集成代碼。例如,開發(fā)者可能使用LangChain框架編寫Python腳本,讓某個(gè)LLM能查詢自家數(shù)據(jù)庫;而如果換成另一個(gè)LLM模型或另一個(gè)數(shù)據(jù)源,又要重新適配新的代碼。這種“M×N集成難題”日益突出:M種不同的大模型與N種不同的數(shù)據(jù)/工具要兩兩集成,需要開發(fā)和維護(hù)大量碎片化的連接器。這不僅開發(fā)成本高、容易出錯(cuò),而且難以規(guī)?;?cái)U(kuò)展AI系統(tǒng)的能力。

為了解決上述痛點(diǎn),Anthropic于2024年11月25日正式發(fā)布并開源了MCP規(guī)范和SDK,嘗試將其打造為AI數(shù)據(jù)集成的行業(yè)標(biāo)準(zhǔn)。Anthropic在發(fā)布MCP時(shí)強(qiáng)調(diào),它是一個(gè)“通用開放標(biāo)準(zhǔn)”,旨在取代過去碎片化的集成方式,為AI系統(tǒng)訪問數(shù)據(jù)提供一種更簡(jiǎn)單可靠的方案。MCP通過標(biāo)準(zhǔn)化LLM與外部資源交互的接口,試圖像USB或HTTP那樣建立統(tǒng)一的“協(xié)議層”,從根本上減少重復(fù)勞動(dòng)和集成復(fù)雜度。Anthropic的工程師在社區(qū)討論中也指出,希望MCP能夠真正解決“每個(gè)模型對(duì)接每個(gè)工具”需要單獨(dú)實(shí)現(xiàn)的問題,從而讓業(yè)界一次集成、處處運(yùn)行。

作為一項(xiàng)開放項(xiàng)目,MCP從一開始就采取開源協(xié)作的模式。Anthropic提供了詳細(xì)的協(xié)議規(guī)范、參考實(shí)現(xiàn)以及多種語言的SDK(如Python、TypeScript、Java等)供開發(fā)者使用。同時(shí),他們建立了開放的連接器倉庫,鼓勵(lì)社區(qū)貢獻(xiàn)各種數(shù)據(jù)源的MCP服務(wù)器實(shí)現(xiàn)。在發(fā)布之初,Anthropic已公布了Google Drive、Slack、GitHub、Git、Postgres數(shù)據(jù)庫、Puppeteer等常用系統(tǒng)的預(yù)構(gòu)建MCP連接器,方便開發(fā)者快速將Claude這類AI助手接入這些系統(tǒng)。一些早期采用者(如Block公司和Apollo等)已將MCP集成到自己的平臺(tái)中,另外如Zed、Replit、Codeium、Sourcegraph等開發(fā)工具廠商也在與MCP合作,利用它讓AI代理更好地檢索編碼任務(wù)相關(guān)的上下文信息。不過需要注意的是,當(dāng)前MCP主要在Claude系列模型和部分支持MCP的客戶端中使用。雖然MCP面向所有AI廠商開放,但要真正成為通用標(biāo)準(zhǔn),還取決于更多模型提供商和應(yīng)用開發(fā)者的支持。這也是MCP未來面臨的一個(gè)重要挑戰(zhàn):推動(dòng)行業(yè)廣泛認(rèn)可其價(jià)值,將“開放標(biāo)準(zhǔn)”轉(zhuǎn)化為事實(shí)上的標(biāo)準(zhǔn)。

MCP的核心原理和技術(shù)架構(gòu)

架構(gòu)概覽

MCP采用客戶端-服務(wù)器的分布式架構(gòu)。具體而言,包括以下組件:

  • MCP Host(主機(jī)應(yīng)用):運(yùn)行AI模型或代理的宿主程序,如Claude桌面版、某IDE中的AI助手等。主機(jī)應(yīng)用通過內(nèi)置的MCP客戶端與外部建立連接,是連接的發(fā)起方。
  • MCP Client(客戶端):嵌入在主機(jī)應(yīng)用中的協(xié)議客戶端組件。每個(gè)MCP客戶端與一個(gè)特定的MCP服務(wù)器保持一對(duì)一的連接,用于向服務(wù)器發(fā)送請(qǐng)求或接收響應(yīng)。一個(gè)主機(jī)應(yīng)用中可以運(yùn)行多個(gè)MCP客戶端,從而同時(shí)連接多個(gè)不同的服務(wù)器。
  • MCP Server(服務(wù)器):獨(dú)立運(yùn)行的輕量程序,封裝了某一數(shù)據(jù)源或服務(wù)的具體能力,通過標(biāo)準(zhǔn)化的MCP接口對(duì)外提供。每個(gè)MCP服務(wù)器相當(dāng)于一個(gè)“適配器”,將底層的數(shù)據(jù)源/工具(本地文件、數(shù)據(jù)庫、第三方API等)的功能以統(tǒng)一格式暴露出來,供客戶端調(diào)用。
  • 本地?cái)?shù)據(jù)源:部署在用戶本地環(huán)境中的數(shù)據(jù)資源,例如本機(jī)文件系統(tǒng)、數(shù)據(jù)庫、應(yīng)用服務(wù)等。MCP服務(wù)器可以受控地訪問這些資源,并將內(nèi)容提供給AI模型使用。例如,一個(gè)本地MCP服務(wù)器可以讀取電腦文件或查詢本地SQLite數(shù)據(jù)庫,然后將結(jié)果發(fā)給模型作為參考。
  • 遠(yuǎn)程服務(wù):通過網(wǎng)絡(luò)提供的外部系統(tǒng)或在線服務(wù)(通常通過HTTP API訪問)。MCP服務(wù)器也可以連接到這些遠(yuǎn)程服務(wù)獲取數(shù)據(jù)。比如,可以有一個(gè)MCP服務(wù)器連接Slack的Web API,代表AI助手執(zhí)行發(fā)送消息、讀取頻道記錄等操作。

這種架構(gòu)下,AI主機(jī)通過MCP客戶端同時(shí)連接多個(gè)MCP服務(wù)器,每個(gè)服務(wù)器各司其職,提供對(duì)一種數(shù)據(jù)源或應(yīng)用的標(biāo)準(zhǔn)化接入。這樣設(shè)計(jì)有幾個(gè)好處:一是模塊化,增加或移除某個(gè)數(shù)據(jù)源只需啟用或停用對(duì)應(yīng)的服務(wù)器,不影響AI主體或其他部分;二是解耦,AI模型與具體數(shù)據(jù)源實(shí)現(xiàn)隔離開,通過協(xié)議交互,不直接依賴數(shù)據(jù)源的內(nèi)部細(xì)節(jié);三是雙向通信,不僅AI可以請(qǐng)求數(shù)據(jù)源,某些情況下數(shù)據(jù)源也能要求AI執(zhí)行操作或生成內(nèi)容,從而支持更復(fù)雜的交互流程。

通信方式

MCP定義了一套基于JSON-RPC 2.0的消息通信協(xié)議。底層傳輸層可以靈活選擇,目前提供了兩種標(biāo)準(zhǔn)傳輸方式:一是標(biāo)準(zhǔn)輸入輸出(STDIO),適用于本地集成(通過進(jìn)程管道通信);二是服務(wù)器發(fā)送事件(SSE)配合HTTP POST,用于需要通過HTTP網(wǎng)絡(luò)連接的場(chǎng)景。開發(fā)者也可以實(shí)現(xiàn)自定義傳輸方式,只要符合MCP傳輸接口要求即可。采用JSON-RPC意味著消息以JSON格式封裝,包括請(qǐng)求(request)、響應(yīng)(response)和通知(notification)三種類型,每條消息帶有方法名稱和參數(shù)等。這種設(shè)計(jì)使得MCP通信類似遠(yuǎn)程過程調(diào)用(RPC),方便表達(dá)“調(diào)用某工具”“讀取某資源”等操作,而且因?yàn)槭褂肑SON,調(diào)試和擴(kuò)展都比較方便(相較于gRPC這類二進(jìn)制協(xié)議,更易于人閱讀和日志記錄)。需要注意的是,MCP協(xié)議在消息級(jí)別管理請(qǐng)求-響應(yīng)的關(guān)聯(lián)、錯(cuò)誤處理等,從而保證多路并發(fā)調(diào)用時(shí)也能正確對(duì)應(yīng)。

關(guān)鍵機(jī)制 – “Primitives”(原語)概念: MCP將AI與外部系統(tǒng)交互的內(nèi)容抽象為幾類原語,以此規(guī)范客戶端和服務(wù)器各自能提供的功能。具體來說,MCP服務(wù)器可以提供三種原語:

  • Prompts(提示):預(yù)先編寫的提示詞或模板,相當(dāng)于一段指導(dǎo)性文字片段,可以插入到模型的輸入中去影響其行為。例如服務(wù)器可以提供一個(gè)“代碼審查提示模板”,供模型在閱讀代碼時(shí)使用。
  • Resources(資源):結(jié)構(gòu)化的數(shù)據(jù)或文檔內(nèi)容,可供客戶端讀取并提供給模型作為上下文。例如從數(shù)據(jù)庫查詢到的一條記錄、用戶的筆記文檔內(nèi)容等,都是資源類型。資源類似于“只讀文件”,模型可以請(qǐng)求某個(gè)資源,服務(wù)器會(huì)返回相應(yīng)的數(shù)據(jù)內(nèi)容。
  • Tools(工具):可以被模型調(diào)用的可執(zhí)行操作或函數(shù)。這是MCP最強(qiáng)大也最具互動(dòng)性的部分,模型可以要求服務(wù)器執(zhí)行某個(gè)工具函數(shù)來獲取信息或改變外部狀態(tài),比如調(diào)用“發(fā)送郵件”工具發(fā)送一封郵件,調(diào)用“查詢天氣”工具獲取天氣數(shù)據(jù)等。由于工具調(diào)用可能帶來副作用和安全風(fēng)險(xiǎn),MCP規(guī)定模型調(diào)用工具必須經(jīng)由用戶批準(zhǔn)后才執(zhí)行。換言之,工具就像模型可用的“按鍵”,但每次按鍵需要真人確認(rèn),避免模型濫用外部操作權(quán)限。

對(duì)應(yīng)地,MCP客戶端提供兩種原語能力用于輔助服務(wù)器完成復(fù)雜任務(wù):

  • Roots(根):這是一種由客戶端提供的文件系統(tǒng)入口或句柄。服務(wù)器可以通過Root來訪問客戶端這側(cè)的本地文件或目錄內(nèi)容。例如客戶端可以授權(quán)服務(wù)器讀取某個(gè)文件夾(作為Root),那么服務(wù)器就能代表模型瀏覽那個(gè)文件夾下的文件內(nèi)容(通常仍以資源形式提供給模型)。Roots機(jī)制確保服務(wù)器只能訪問經(jīng)授權(quán)的本地?cái)?shù)據(jù)范圍,增強(qiáng)安全性。
  • Sampling(采樣):這一機(jī)制允許服務(wù)器向客戶端發(fā)起請(qǐng)求,要求客戶端這側(cè)的LLM模型生成一段文本(即一次補(bǔ)全/推理)。簡(jiǎn)單說,服務(wù)器也可以“反過來”調(diào)用模型,讓模型基于一些額外提示執(zhí)行推理。Sampling可以用于構(gòu)建多輪交互的智能Agent:服務(wù)器在執(zhí)行某工具過程中,發(fā)現(xiàn)需要模型進(jìn)一步推理決定下一步時(shí),就可以用Sampling請(qǐng)求模型產(chǎn)出結(jié)果,再繼續(xù)后續(xù)操作。不過Anthropic也強(qiáng)調(diào)應(yīng)謹(jǐn)慎使用這一機(jī)制,始終保持人類在環(huán)監(jiān)督,以避免AI代理失控循環(huán)調(diào)用模型

通過上述原語分類,MCP清晰地定義了模型與外部交互的意圖類型。例如,讓模型獲取一段參考資料應(yīng)該作為Resource提供,而不是混同于調(diào)用Tool;又如要求模型執(zhí)行某操作就用Tool明確表示。這樣的設(shè)計(jì)使AI系統(tǒng)的上下文管理更結(jié)構(gòu)化:模型知道某段信息是只讀資料還是可執(zhí)行操作,用戶也能對(duì)不同類型請(qǐng)求進(jìn)行針對(duì)性地審批或監(jiān)控。這比起簡(jiǎn)單地給模型一個(gè)隱式“工具插件”要透明得多。Anthropic的開發(fā)者指出,他們最初也考慮過是否把所有交互都當(dāng)作“工具調(diào)用”統(tǒng)一處理,但最終認(rèn)為Prompt和Resource這兩類原語有其獨(dú)特意義,能表達(dá)不同用途的功能,因此保留了多元的原語概念。

工作流程

在實(shí)際運(yùn)行中,當(dāng)用戶向AI助手提出一個(gè)需要外部信息或操作的問題時(shí),MCP讓這一過程變得自動(dòng)又安全:

  1. 能力發(fā)現(xiàn):首先,主機(jī)應(yīng)用啟動(dòng)時(shí)會(huì)連接配置好的若干MCP服務(wù)器。每個(gè)服務(wù)器會(huì)向客戶端聲明自己提供的Prompts、Resources、Tools列表(通常通過JSON模式定義)及其調(diào)用方法等信息。這樣模型在對(duì)話過程中,就知道有哪些“工具”可用、有哪些資源可以讀取。例如,一個(gè)Slack服務(wù)器可能聲明工具list_channels(列出頻道)、post_message(發(fā)消息)等。
  2. 模型決策調(diào)用:當(dāng)用戶提問需要外部支持時(shí),模型根據(jù)提示和上下文,可能決定調(diào)用某個(gè)工具或請(qǐng)求某個(gè)資源。由于大模型可以生成結(jié)構(gòu)化輸出,Claude等模型能夠按照MCP約定格式提出調(diào)用請(qǐng)求(這通常由MCP客戶端在模型生成內(nèi)容中解析出調(diào)用意圖并執(zhí)行)。例如用戶要求“請(qǐng)把這篇文章發(fā)到Slack頻道X”,模型會(huì)觸發(fā)調(diào)用Slack服務(wù)器的post_message工具,并附上文章內(nèi)容和頻道參數(shù)。
  3. 用戶審批執(zhí)行:MCP客戶端接收到模型的調(diào)用請(qǐng)求后,會(huì)提示人類用戶(例如在Claude桌面版界面中)確認(rèn)是否允許執(zhí)行該操作。如果被拒絕,則向模型返回錯(cuò)誤信息;如果允許,則將請(qǐng)求發(fā)送給對(duì)應(yīng)的MCP服務(wù)器。對(duì)于純讀取類的Resource請(qǐng)求,有時(shí)可按策略自動(dòng)批準(zhǔn)。
  4. 服務(wù)器處理并響應(yīng):MCP服務(wù)器收到請(qǐng)求后,執(zhí)行實(shí)際邏輯。例如Slack服務(wù)器調(diào)用Slack API發(fā)送消息,文件服務(wù)器讀取文件內(nèi)容等。執(zhí)行完成后,服務(wù)器將結(jié)果封裝為響應(yīng)(或資源內(nèi)容)通過MCP協(xié)議發(fā)回客戶端。如果在執(zhí)行過程中需要模型幫助(例如對(duì)長(zhǎng)文本進(jìn)行總結(jié)),服務(wù)器還可以通過Sampling請(qǐng)求模型生成,待模型給出結(jié)果后再繼續(xù)。
  5. 模型利用結(jié)果繼續(xù)對(duì)話:客戶端收到服務(wù)器響應(yīng)后,將結(jié)果提供給模型作為新的上下文。模型據(jù)此產(chǎn)生最終回答或下一步動(dòng)作。例如Slack消息發(fā)送完成后,Claude可以告訴用戶“文章已成功發(fā)布到頻道X”。對(duì)于Resource類數(shù)據(jù),模型會(huì)將其內(nèi)容納入回答的依據(jù),從而給出更準(zhǔn)確的答復(fù)。

通過以上機(jī)制,MCP在AI模型與外部環(huán)境之間搭建了一個(gè)標(biāo)準(zhǔn)化、可控的“橋梁”。它既允許模型擴(kuò)展能力,與真實(shí)世界的數(shù)據(jù)和應(yīng)用交互,又通過明確的接口契約和用戶權(quán)限把控,避免了安全風(fēng)險(xiǎn)。正如一位觀察者所言,MCP的出現(xiàn)使得AI助手有望變得更自主智能,因?yàn)樗鼈兛梢跃S護(hù)跨不同工具和數(shù)據(jù)源的上下文,幫助用戶執(zhí)行更復(fù)雜的任務(wù)。

在技術(shù)實(shí)現(xiàn)細(xì)節(jié)上,MCP的設(shè)計(jì)還借鑒了許多已有成熟理念。例如,其JSON-RPC消息結(jié)構(gòu)與語言服務(wù)器協(xié)議(LSP)有相似之處(LSP也是使用JSON-RPC讓編輯器與編譯器服務(wù)通信);又如將工具調(diào)用與用戶審批結(jié)合,這和OpenAI API中的“函數(shù)調(diào)用”+人類驗(yàn)證思路類似,只是MCP做得更通用、更系統(tǒng)化。此外,MCP還內(nèi)置了安全機(jī)制(如嚴(yán)格的權(quán)限范圍、錯(cuò)誤碼等)來確保魯棒性。例如對(duì)于每個(gè)連接,客戶端和服務(wù)器都會(huì)進(jìn)行能力協(xié)商和版本匹配,保證雙方理解的協(xié)議一致;傳輸層也提供了錯(cuò)誤處理約定,防止死鎖或資源泄露。

整體來看,MCP核心架構(gòu)通過標(biāo)準(zhǔn)協(xié)議+客戶端/服務(wù)器分層,將AI與外部世界有效銜接起來。這種模式讓開發(fā)者“只需針對(duì)MCP編程一次,便可讓各種模型與各種數(shù)據(jù)源對(duì)接”,顯著降低了AI應(yīng)用集成的門檻。

本文由 @AI賈維斯 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載

題圖來自Unsplash,基于CC0協(xié)議

該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 目前還沒評(píng)論,等你發(fā)揮!