作者:Sandi Besen 機(jī)器之心編譯 在人工智能飛速發(fā)展的今天,LLM 的能力令人嘆為觀止,但其局限性也日益凸顯 —— 它們往往被困于訓(xùn)練數(shù)據(jù)的「孤島」,無法直接觸及實時信息或外部工具。 2024 年 11 月,Anthropic 推出了開源協(xié)議 MCP(Model Context Protocol,模型上下文協(xié)議),旨在為 AI 模型與外部數(shù)據(jù)源和工具之間的交互提供一個通用、標(biāo)準(zhǔn)化的連接方式。MCP 的開源性質(zhì)也迅速吸引了開發(fā)社區(qū)的關(guān)注,許多人將其視為 AI 生態(tài)系統(tǒng)標(biāo)準(zhǔn)化的重要一步。 MCP 的好處之一是它們能讓 AI 系統(tǒng)更安全。當(dāng)大家都能用到經(jīng)過嚴(yán)格測試的工具時,公司就不必「重復(fù)造輪子」,這樣既減少了安全隱患,也降低了惡意代碼出現(xiàn)的可能。 ![]() 隨著 MCP 的逐漸普及,其影響力開始在行業(yè)內(nèi)顯現(xiàn)。2025 年 3 月 27 日,OpenAI 也開始支持 MCP 了。 ![]() 谷歌似乎也在考慮是否加入 MCP 大家庭: ![]() 仔細(xì)看 MCP 的相關(guān)資料,會發(fā)現(xiàn)明顯存在信息斷層。雖然有很多解釋「它能做什么」的概述,但當(dāng)你真想了解它是「怎么運作的」時,資料就變得稀少了 —— 特別是對非專業(yè)開發(fā)者來說。目前的資料不是過于表面的介紹,就是太過深奧的源代碼。 近日,一篇博客以淺顯易懂的方式講解了 MCP,讓各種背景的讀者都能理解它的概念和功能,讀者還可以跟著代碼進(jìn)行實踐。 ![]() 博客鏈接:https:///clear-intro-to-mcp/ 讓我們跟隨博客一探究竟(注:本文代碼截圖可能不完整,詳見原文)。 通過類比理解 MCP:餐廳模型 首先,讓我們將 MCP 的概念想象成一家餐廳,其中:
現(xiàn)在,我們來看看這家餐廳的「崗位要求」: 主機(jī)(Host) 智能體運行的環(huán)境。類比餐廳建筑,在 MCP 中,它是智能體或 LLM 實際運行的位置。如果在本地使用 Ollama,用戶即為主機(jī);若使用 Claude 或 GPT,則 Anthropic 或 OpenAI 為主機(jī)。 客戶端(Client) 負(fù)責(zé)從智能體發(fā)送工具調(diào)用請求的環(huán)境。相當(dāng)于將顧客訂單傳遞至廚房的服務(wù)員。實際上是智能體運行的應(yīng)用程序或接口,客戶端通過 MCP 將工具調(diào)用請求傳遞給服務(wù)器。 服務(wù)器(Server) 類似廚房,存儲各種「食譜」或工具。集中管理工具,使智能體能夠便捷訪問。服務(wù)器可以是本地的(用戶啟動)或遠(yuǎn)程的(由提供工具的公司托管)。服務(wù)器上的工具通常按功能或集成方式分組,例如,所有 Slack 相關(guān)工具可集中于「Slack 服務(wù)器」,或所有消息工具可集中于「消息服務(wù)器」。這種組織方式取決于架構(gòu)設(shè)計和開發(fā)者偏好。 智能體(Agent) 系統(tǒng)的「大腦」,由大語言模型驅(qū)動,決定調(diào)用哪些工具完成任務(wù)。當(dāng)確定需要某工具時,向服務(wù)器發(fā)起請求。智能體無需原生理解 MCP,因為它通過每個工具關(guān)聯(lián)的元數(shù)據(jù)學(xué)習(xí)使用方法。工具關(guān)聯(lián)的元數(shù)據(jù)指導(dǎo)智能體如何調(diào)用工具及執(zhí)行方式。需注意,平臺或智能體必須支持 MCP 才能自動處理工具調(diào)用,否則開發(fā)者需編寫復(fù)雜的轉(zhuǎn)換邏輯,包括從架構(gòu)解析元數(shù)據(jù)、以 MCP 格式形成工具調(diào)用請求、將請求映射至正確函數(shù)、執(zhí)行代碼,并以符合 MCP 的格式將結(jié)果返回給智能體。 工具(Tools) 執(zhí)行具體工作的函數(shù),如調(diào)用 API 或自定義代碼。工具存在于服務(wù)器上,可以是:
如何協(xié)同工作 下面詳細(xì)介紹 MCP 的具體工作流程: 服務(wù)器注冊工具:每個工具都需定義名稱、描述、輸入 / 輸出模式及函數(shù)處理程序(執(zhí)行代碼),并注冊到服務(wù)器。這一過程通常通過調(diào)用特定方法或 API,向服務(wù)器聲明「這是一個新工具及其使用方式」。 服務(wù)器暴露元數(shù)據(jù):服務(wù)器啟動或智能體連接時,通過 MCP 協(xié)議暴露工具元數(shù)據(jù)(包括模式和描述)。 智能體發(fā)現(xiàn)工具:智能體通過 MCP 查詢服務(wù)器,了解可用工具集。智能體從工具元數(shù)據(jù)中學(xué)習(xí)如何使用每個工具。這一過程通常在系統(tǒng)啟動時或新工具添加時觸發(fā)。 智能體規(guī)劃工具使用:當(dāng)智能體確定需要某個工具(基于用戶輸入或任務(wù)上下文)時,會按照標(biāo)準(zhǔn)化的 MCP JSON 格式構(gòu)建工具調(diào)用請求,包含工具名稱、符合工具輸入模式的參數(shù)及其他必要元數(shù)據(jù)??蛻舳俗鳛閭鬏攲樱ㄟ^ HTTP 將 MCP 格式的請求發(fā)送至服務(wù)器。 翻譯層執(zhí)行:翻譯層接收智能體的標(biāo)準(zhǔn)化工具調(diào)用(通過 MCP),將請求映射到服務(wù)器上對應(yīng)的函數(shù),執(zhí)行該函數(shù),將結(jié)果格式化回 MCP 格式,然后發(fā)送回智能體。抽象化 MCP 的框架可以完成所有這些工作,開發(fā)者無需編寫翻譯層邏輯(這聽起來是個令人頭疼的事情)。 ![]() MCP Brave 搜索服務(wù)器的 Re-Act 智能體代碼示例 為了理解 MCP 的實際應(yīng)用效果,我們可以使用 IBM 的 beeAI 框架,該框架原生支持 MCP 并為我們處理轉(zhuǎn)換邏輯。如果你計劃運行這段代碼,你需要:
示例 .env 文件 ![]() 示例 mcp_agent.ipynb 1. 導(dǎo)入必要的庫 ![]() 2. 加載環(huán)境變量并設(shè)置系統(tǒng)路徑(如有需要) ![]() 3. 配置日志記錄器 ![]() 4. 加載輔助函數(shù)如 process_agent_events、observer,并創(chuàng)建 ConsoleReader 實例
![]() 5. 設(shè)置 Brave API 密鑰和服務(wù)器參數(shù)。 Anthropic 有一個 MCP 服務(wù)器列表:https:///examples ![]() 6. 創(chuàng)建一個 Brave 工具,它將啟動與 MCP 服務(wù)器的連接,發(fā)現(xiàn)工具,并將發(fā)現(xiàn)的工具返回給智能體,以便它決定對于給定的任務(wù)應(yīng)該調(diào)用哪個工具。 在此情況下,Brave MCP 服務(wù)器上可發(fā)現(xiàn) 2 個工具:
![]() (可選)檢查與 MCP 服務(wù)器的連接,并在將其提供給智能體之前確保它返回所有可用的工具。 ![]() 輸出 ![]() 7. 編寫創(chuàng)建智能體的函數(shù)
注意:您可能會注意到在系統(tǒng)提示詞中添加了一句話:「If you need to use the brave_tool you must use a count of 5.」這是一個臨時解決方案,因為在 Brave 服務(wù)器的 index.ts 文件中發(fā)現(xiàn)了一個錯誤。用戶將為該倉庫貢獻(xiàn)代碼來修復(fù)它。 ![]() 8. 創(chuàng)建主函數(shù)
![]() ![]() 輸出: ![]() MCP 憑借網(wǎng)絡(luò)效應(yīng)、標(biāo)準(zhǔn)化優(yōu)勢、降低開發(fā)成本和行業(yè)門檻以及增強(qiáng)互操作性,未來發(fā)展?jié)摿薮?。但它也面臨挑戰(zhàn),包括工具發(fā)現(xiàn)依賴服務(wù)器、新增故障點、治理需求、安全考慮和延遲問題。 隨著技術(shù)的不斷發(fā)展,我們期待 MCP 能夠克服這些挑戰(zhàn),充分發(fā)揮其潛力,為行業(yè)帶來更多價值。 |
|