- 這就是MCP
- 艾逗筆(@idoubi)
- 8字
- 2025-08-07 17:41:58
1.2 MCP是如何誕生的
1.2.1 大模型視角
2022年11月30日,OpenAI發(fā)布了ChatGPT——一款基于大模型的對(duì)話產(chǎn)品。ChatGPT以驚人的交互體驗(yàn)迅速出圈(用戶(hù)通過(guò)自然語(yǔ)言對(duì)話即可完成編程、寫(xiě)作、推理等復(fù)雜任務(wù)),讓“大模型”這一原本只在技術(shù)社區(qū)流傳的概念首次進(jìn)入了公眾視野。業(yè)界迅速達(dá)成共識(shí):大模型將成為下一代人機(jī)交互的核心載體。
在之后的時(shí)間里,大模型技術(shù)有了飛速發(fā)展,通過(guò)對(duì)話助手與大模型對(duì)話,逐漸成了人們上網(wǎng)獲取信息的主要途徑。
然而,大模型是通過(guò)歷史數(shù)據(jù)進(jìn)行訓(xùn)練的,這些數(shù)據(jù)在訓(xùn)練時(shí)就已經(jīng)固定。模型訓(xùn)練完成后,其知識(shí)就停留在訓(xùn)練時(shí)的狀態(tài),無(wú)法自動(dòng)獲取訓(xùn)練之后的新信息。也就是說(shuō),大模型的“靜態(tài)知識(shí)”與動(dòng)態(tài)世界的“實(shí)時(shí)需求”之間存在根本性矛盾。
為了突破這一矛盾,解決大模型對(duì)訓(xùn)練后信息的獲取問(wèn)題,行業(yè)探索出兩類(lèi)主要的解決方案。
第一類(lèi):模型微調(diào)
模型微調(diào)的基本原理是在預(yù)訓(xùn)練好的大模型的基礎(chǔ)上,使用新的數(shù)據(jù)集進(jìn)行額外的訓(xùn)練。通常情況下,模型的基本架構(gòu)保持不變,只調(diào)整全部或者部分參數(shù),從而使模型學(xué)習(xí)新的知識(shí)或適應(yīng)特定任務(wù)。
相比從頭訓(xùn)練,模型微調(diào)需要的計(jì)算資源更少,能夠更高效地實(shí)現(xiàn)模型的定制化。它的主要局限性在于,模型微調(diào)仍然是一個(gè)“先訓(xùn)練后部署”的方案,雖然在解決某些專(zhuān)業(yè)領(lǐng)域問(wèn)題時(shí)補(bǔ)充了新知識(shí),但不適用于對(duì)時(shí)效性要求高的場(chǎng)景,比如獲取實(shí)時(shí)新聞、天氣信息等。
第二類(lèi):上下文補(bǔ)充
上下文補(bǔ)充指的是為大模型提供外部知識(shí)庫(kù)或信息源的技術(shù)方案,旨在讓大模型突破知識(shí)的時(shí)效性限制,能夠訪問(wèn)專(zhuān)業(yè)領(lǐng)域信息,從而提高回答的準(zhǔn)確性、時(shí)效性和可靠性。
與模型微調(diào)不同,上下文補(bǔ)充不需要改變模型參數(shù)重新訓(xùn)練,而是在模型生成回答時(shí)實(shí)時(shí)提供相關(guān)信息作為輸入上下文,讓模型能夠基于這些最新的信息進(jìn)行推理。基于補(bǔ)充的上下文信息,大模型能夠回答與訓(xùn)練之后發(fā)生的事件相關(guān)的問(wèn)題,彌補(bǔ)靜態(tài)知識(shí)與動(dòng)態(tài)世界之間的鴻溝。
MCP的核心在于C,也就是上下文(Context),從這個(gè)角度來(lái)看,MCP誕生的初衷就是給大模型補(bǔ)充上下文。
在MCP之前,行業(yè)存在如下幾種為大模型補(bǔ)充上下文的主流方案。
1. 記憶存儲(chǔ)
記憶存儲(chǔ)通常由大模型客戶(hù)端實(shí)現(xiàn)。客戶(hù)端會(huì)將用戶(hù)與大模型的每輪對(duì)話內(nèi)容記錄下來(lái),并設(shè)定一定的記憶容量。當(dāng)用戶(hù)提出新問(wèn)題時(shí),系統(tǒng)會(huì)從記憶庫(kù)中提取與當(dāng)前對(duì)話相關(guān)的信息,作為補(bǔ)充上下文提供給大模型,從而使模型的回答更加連貫,就像賦予了模型“記憶”能力。
不過(guò),這種記憶機(jī)制也存在一定的局限性,模型的“記憶”能力主要受限于大模型支持的上下文長(zhǎng)度。如果每次都將同一個(gè)會(huì)話的全部歷史內(nèi)容傳入模型,容易因上下文窗口限制而導(dǎo)致信息截?cái)啵欢魞H選取與當(dāng)前問(wèn)題相關(guān)的歷史內(nèi)容,則對(duì)客戶(hù)端的實(shí)現(xiàn)能力提出了更高的要求,需要依賴(lài)相似度匹配等技術(shù)來(lái)篩選最相關(guān)的信息。
2. RAG
RAG(retrieval-augmented generation,檢索增強(qiáng)生成)是一種讓大模型獲取實(shí)時(shí)信息的重要技術(shù),其工作原理是:當(dāng)用戶(hù)發(fā)出提問(wèn)時(shí),AI應(yīng)用通過(guò)向量檢索、關(guān)鍵詞匹配等方式,從外部知識(shí)庫(kù)或數(shù)據(jù)源檢索相關(guān)信息,再把檢索到的信息作為上下文提供給大模型,讓大模型基于補(bǔ)充的信息進(jìn)行回答。
RAG的交互流程如圖1-5所示。

圖1-5 RAG的交互流程
RAG技術(shù)的主要優(yōu)勢(shì)是:不需要重新訓(xùn)練模型(成本低);可以靈活更新知識(shí)庫(kù)(保持信息的新鮮度)。因此,RAG可以用于聯(lián)網(wǎng)查詢(xún)實(shí)時(shí)信息、跟本地文檔(知識(shí)庫(kù))對(duì)話等場(chǎng)景。
RAG技術(shù)的局限性在于:大模型的最終回答效果依賴(lài)于檢索到的信息質(zhì)量。因此,檢索步驟非常關(guān)鍵,需要基于高效、準(zhǔn)確的檢索算法和優(yōu)質(zhì)的數(shù)據(jù)源,而在實(shí)際應(yīng)用中,這兩點(diǎn)往往很難同時(shí)滿足。
3. 函數(shù)調(diào)用
函數(shù)調(diào)用(function calling)是一種讓大模型執(zhí)行特定任務(wù)的機(jī)制,允許大模型將自然語(yǔ)言請(qǐng)求轉(zhuǎn)換為具體的函數(shù)調(diào)用,供AI應(yīng)用調(diào)用外部工具,并將結(jié)果反饋給用戶(hù)。
函數(shù)調(diào)用的工作原理是:當(dāng)用戶(hù)發(fā)出提問(wèn)時(shí),AI應(yīng)用會(huì)將集成的函數(shù)列表作為上下文發(fā)送給大模型。大模型根據(jù)用戶(hù)輸入判斷具體調(diào)用的函數(shù),并生成相應(yīng)的調(diào)用參數(shù)。隨后,AI應(yīng)用執(zhí)行該函數(shù)并將結(jié)果發(fā)送給大模型,作為補(bǔ)充信息供其生成最終的總結(jié)或回答。
函數(shù)調(diào)用的交互流程如圖1-6所示。

圖1-6 函數(shù)調(diào)用的交互流程
函數(shù)調(diào)用擴(kuò)大了大模型的能力邊界,通過(guò)函數(shù)調(diào)用的方式,大模型既能外掛各種類(lèi)型的數(shù)據(jù),也能執(zhí)行各種類(lèi)型的操作。
函數(shù)調(diào)用vs RAG
函數(shù)調(diào)用跟RAG在外掛數(shù)據(jù)方面的主要區(qū)別在于:RAG是由AI應(yīng)用根據(jù)用戶(hù)輸入直接前往固定的信息源查詢(xún)相關(guān)內(nèi)容,然后將其作為補(bǔ)充上下文提供給大模型來(lái)回答問(wèn)題;而函數(shù)調(diào)用是AI應(yīng)用通過(guò)工具函數(shù)提前集成多個(gè)數(shù)據(jù)源,由大模型進(jìn)行調(diào)度,AI應(yīng)用再動(dòng)態(tài)讀取這些數(shù)據(jù)源,最后將其作為補(bǔ)充上下文提供給大模型來(lái)回答問(wèn)題。
自O(shè)penAI于2023年6月首次在其GPT系列模型中支持函數(shù)調(diào)用機(jī)制以來(lái),各大模型廠商紛紛跟進(jìn),函數(shù)調(diào)用已經(jīng)成為大模型外掛數(shù)據(jù)的標(biāo)配。
然而,17個(gè)月之后,MCP出現(xiàn)了。
4. MCP
我們可以認(rèn)為,MCP是在函數(shù)調(diào)用的基礎(chǔ)上做了進(jìn)一步的升級(jí)和抽象,目的是讓AI應(yīng)用更加簡(jiǎn)單、高效、安全地對(duì)接外部資源,更好地為大模型補(bǔ)充上下文信息。因此,接下來(lái)我們用對(duì)比講解函數(shù)調(diào)用和MCP的方式來(lái)了解MCP。
函數(shù)調(diào)用是一種交互范式,其本質(zhì)是一種設(shè)計(jì)模式,定義了AI應(yīng)用與外部函數(shù)的調(diào)用規(guī)范。
從用戶(hù)視角看,函數(shù)調(diào)用的交互流程涉及三個(gè)角色:AI應(yīng)用、函數(shù)、大模型;核心交互流程涉及兩大核心步驟:函數(shù)選擇和函數(shù)調(diào)用。
函數(shù)選擇:AI應(yīng)用把函數(shù)列表和用戶(hù)提問(wèn)發(fā)送給大模型,大模型識(shí)別用戶(hù)意圖,挑選最適合的函數(shù)來(lái)滿足用戶(hù)需求。
函數(shù)調(diào)用:應(yīng)用通過(guò)大模型返回的函數(shù)名稱(chēng)和參數(shù),調(diào)用函數(shù)獲取外部數(shù)據(jù)。
圖1-6已經(jīng)介紹了函數(shù)調(diào)用的交互流程,此處不再贅述。
MCP是一套通信協(xié)議,其本質(zhì)是為AI應(yīng)用與外部工具交互而制定的標(biāo)準(zhǔn)化接口規(guī)范、數(shù)據(jù)格式和通信契約。
MCP定義了三個(gè)角色:MCP主機(jī)、MCP客戶(hù)端、MCP服務(wù)器。跟函數(shù)調(diào)用相比,MCP相當(dāng)于是把“MCP客戶(hù)端-MCP服務(wù)器”作為一個(gè)黑盒使用。
從用戶(hù)視角看,MCP的交互流程也涉及三個(gè)角色:AI應(yīng)用、黑盒(MCP客戶(hù)端MCP服務(wù)器)、大模型。MCP的交互流程(以調(diào)用工具為例)如下所示(注意,只提及了核心步驟)。
AI應(yīng)用把用戶(hù)提問(wèn)發(fā)送給黑盒中的MCP客戶(hù)端。
黑盒中的客戶(hù)端請(qǐng)求黑盒中的MCP服務(wù)器,獲取MCP服務(wù)器定義的工具列表。
AI應(yīng)用把工具列表和用戶(hù)提問(wèn)發(fā)送給大模型,由大模型進(jìn)行工具選擇。
AI應(yīng)用根據(jù)大模型返回的工具調(diào)用參數(shù),通過(guò)黑盒中的MCP客戶(hù)端,向黑盒中的MCP服務(wù)器發(fā)起工具調(diào)用請(qǐng)求。
黑盒中的MCP服務(wù)器請(qǐng)求外部數(shù)據(jù)或服務(wù),將結(jié)果返回給MCP客戶(hù)端。
AI應(yīng)用得到黑盒返回的外部數(shù)據(jù),作為上下文信息發(fā)送給大模型生成回答。
可以用一幅圖概括MCP的交互流程,如圖1-7所示。

圖1-7 MCP的交互流程
函數(shù)調(diào)用vs MCP
在函數(shù)調(diào)用機(jī)制中,函數(shù)是在AI應(yīng)用內(nèi)部直接定義的,與外部數(shù)據(jù)或服務(wù)的對(duì)接是由AI應(yīng)用直接完成的。
而在MCP中,工具是在外部MCP服務(wù)器中定義的,AI應(yīng)用添加了MCP服務(wù)器,就能獲得MCP服務(wù)器定義的工具列表。AI應(yīng)用不直接跟外部數(shù)據(jù)或服務(wù)打交道,而是通過(guò)MCP服務(wù)器來(lái)完成與外部資源的交互。我們可以認(rèn)為,MCP通過(guò)“業(yè)務(wù)外包”的方式,減輕了AI應(yīng)用側(cè)的實(shí)現(xiàn)負(fù)擔(dān)。
函數(shù)調(diào)用機(jī)制的關(guān)鍵在于函數(shù)選擇,依賴(lài)大模型的推理能力。我們平時(shí)說(shuō)某大模型支持函數(shù)調(diào)用能力,對(duì)其正確的理解應(yīng)該是此模型在工具選擇的任務(wù)場(chǎng)景上做了專(zhuān)門(mén)的訓(xùn)練優(yōu)化(函數(shù)描述的嵌入表示、特殊格式訓(xùn)練與指令微調(diào))。支持函數(shù)調(diào)用的模型,在接收到AI應(yīng)用傳遞的工具列表時(shí),能夠根據(jù)用戶(hù)的請(qǐng)求從中精準(zhǔn)選出最合適的工具,并生成結(jié)構(gòu)化的調(diào)用參數(shù)。得益于模型在函數(shù)描述理解和參數(shù)填充方面的專(zhuān)門(mén)訓(xùn)練優(yōu)化,其匹配準(zhǔn)確度通常優(yōu)于未經(jīng)過(guò)相關(guān)訓(xùn)練的模型。而不支持函數(shù)調(diào)用的模型,比如gpt-3.5-turbo,也可以通過(guò)設(shè)置系統(tǒng)提示詞的方式實(shí)現(xiàn)工具選擇的操作,只是匹配準(zhǔn)確度沒(méi)有支持函數(shù)調(diào)用的模型高而已。
MCP是基于函數(shù)調(diào)用機(jī)制的應(yīng)用層協(xié)議,本質(zhì)是為AI應(yīng)用給大模型提供上下文服務(wù)的,MCP跟大模型本身沒(méi)有直接的關(guān)系。
因此,可以說(shuō)某大模型支持或不支持函數(shù)調(diào)用,但不應(yīng)該說(shuō)某大模型支持或不支持MCP。
- 大前端三劍客:Vue+React+Flutter
- Java Web程序開(kāi)發(fā)范例寶典
- GitLab CI/CD 從入門(mén)到實(shí)戰(zhàn)
- 軟件需求與可視化模型(微軟技術(shù)叢書(shū))
- JavaScript框架設(shè)計(jì)
- Android 網(wǎng)絡(luò)開(kāi)發(fā)與應(yīng)用實(shí)戰(zhàn)詳解
- DevOps:企業(yè)級(jí)CI/CD實(shí)戰(zhàn)
- Java高手真經(jīng)·編程基礎(chǔ)卷:Java核心編程技術(shù)
- Swift權(quán)威指南
- 這就是MCP
- 敏捷軟件開(kāi)發(fā):用戶(hù)故事實(shí)戰(zhàn)
- 區(qū)塊鏈:技術(shù)原理與應(yīng)用實(shí)踐
- 混沌工程:通過(guò)可控故障實(shí)驗(yàn)提升軟件系統(tǒng)可靠性
- 軟件質(zhì)量管理指南
- Unity AR/VR開(kāi)發(fā):從新手到專(zhuān)家