圖解「模型上下文協(xié)議(MCP)」:從與傳統(tǒng) API 的比較入手
最近,關(guān)于模型上下文協(xié)議(MCP)的討論非常熱烈。你一定聽說過它。
今天,讓我們一起來了解一下模型上下文協(xié)議(MCP)。
直觀地說,MCP 就像 AI 應(yīng)用的 USB-C 接口。
正如 USB-C 為設(shè)備連接各種配件提供了標(biāo)準(zhǔn)化方案,MCP 也將 AI 應(yīng)用連接到不同數(shù)據(jù)源和工具的方式標(biāo)準(zhǔn)化了。
1.gif
接下來從技術(shù)角度進(jìn)行深入探討。
MCP 的核心遵循客戶端-服務(wù)器(client-server)架構(gòu),Host 應(yīng)用程序可以連接到多個(gè) Server。
它包含三個(gè)主要組件:
- Host
- Client
- Server
在我們進(jìn)行深入探討之前,先來了解一下整體架構(gòu)??
2.gif
Host 代表任何提供 AI 交互環(huán)境、訪問外部工具和數(shù)據(jù)源并運(yùn)行 MCP Client 的 AI 應(yīng)用(如 Claude 桌面版、Cursor)。
MCP Client 在 Host 內(nèi)運(yùn)行,實(shí)現(xiàn)與 MCP Servers 的通信。
image.png
MCP Server 對外開放特定能力,并提供對數(shù)據(jù)源的訪問權(quán)限,包括:
image.png
- Tools:使大語言模型能夠通過你的 Server 執(zhí)行操作。
- Resources:將 Server 上的數(shù)據(jù)和內(nèi)容開放給大語言模型。
- Prompts:創(chuàng)建可復(fù)用的提示詞模板和工作流程。
要構(gòu)建屬于你自己的 MCP 系統(tǒng),理解客戶端-服務(wù)器通信機(jī)制是必不可少的。
現(xiàn)在我們來解析客戶端與服務(wù)器的通信流程。
本文將對該過程進(jìn)行逐步拆解,請看下方這張示意圖...
3.gif
首先進(jìn)行 Capability Exchange(譯者注:Capability Exchange(能力交換)是一種動(dòng)態(tài)服務(wù)發(fā)現(xiàn)與適配機(jī)制,是MCP連接建立的必經(jīng)步驟,類似于“握手協(xié)議”。),流程如下:
- 客戶端發(fā)送初始請求,獲取服務(wù)器能力信息
- 服務(wù)器返回其能力信息詳情
- 例如當(dāng)天氣 API 服務(wù)器被調(diào)用時(shí),它可以返回可用的“tools”、“prompts templates”及其他資源供客戶端使用
交換完成后,客戶端確認(rèn)連接成功,然后繼續(xù)交換消息。
這種機(jī)制非常強(qiáng)大,原因如下:
在傳統(tǒng)的 API 架構(gòu)中:
- 如果你的 API 最初需要兩個(gè)參數(shù)(例如,天氣服務(wù)的 location 參數(shù)(譯者注:地理位置)和 date 參數(shù)(譯者注:日期)),用戶需嚴(yán)格按此參數(shù)結(jié)構(gòu)構(gòu)建應(yīng)用。
image.png
- 之后,如果你決定為該 API 添加第三個(gè)必選參數(shù)(例如,unit參數(shù)(譯者注:溫度單位)),將API “契約”進(jìn)行變更。
image.png
- 這意味著該 API 的所有用戶都必須更新代碼,增加對新參數(shù)的支持,如果未及時(shí)更新,他們的請求可能會(huì)失敗、報(bào)錯(cuò)或提供不完整的結(jié)果。
image.png
MCP 的設(shè)計(jì)解決了這個(gè)問題,具體方法如下:
- MCP 引入了一種動(dòng)態(tài)、靈活的方法,與傳統(tǒng) API 形成鮮明對比。
- 當(dāng) Client(例如 Claude Desktop 這類 AI 應(yīng)用)連接 MCP Server(例如天氣服務(wù))時(shí),會(huì)發(fā)送初始請求,以便了解 Server 的能力。
- Server 的響應(yīng)包含可用的 tools、resources、prompts 以及相關(guān)參數(shù)的詳細(xì)信息。例如,若天氣 API 最初僅支持 location 和 date 參數(shù),服務(wù)器會(huì)通過能力交換告知這些信息。
當(dāng)新增 unit 參數(shù)時(shí),MCP Server 可在下次進(jìn)行能力交換時(shí)動(dòng)態(tài)更新能力描述。Client 無需硬編碼或預(yù)定義參數(shù),只需查詢 Server 的最新能力并自動(dòng)適配。
這樣,Client 就能使用更新后的新功能(例如在其請求中包含 unit 參數(shù)),實(shí)時(shí)調(diào)整行為,而無需重寫或重新部署代碼。
希望本文能闡明 MCP 的作用。
后續(xù)我們將探索如何創(chuàng)建自定義的 MCP servers 并圍繞它們構(gòu)建實(shí)踐演示,敬請期待!
Thanks for reading!
Hope you have enjoyed and learned new things from this blog!