MCP 和 Function Calling:概念
隨著人工智能的快速發(fā)展,大型語言模型(LLMs)逐漸深入到我們生活與工作的各個方面。然而,盡管模型強大,但其能力仍存在局限性,比如在實時信息獲取和復(fù)雜任務(wù)執(zhí)行方面仍有不足。
RAG(檢索增強生成)現(xiàn)在在企業(yè)的 AI 應(yīng)用中使用很廣泛,就是為了解決模型的信息不夠?qū)崟r,且沒有垂直領(lǐng)域知識的問題。
RAG 雖然厲害,但主要還是應(yīng)用在智能知識問答領(lǐng)域,大模型想要有更強的能力,就需要有效、安全地與外界進行互動,這就誕生了 Function Calling 和 MCP 。
Function Calling 依賴大模型的能力,MCP 是一種通用協(xié)議。
本文從概念層面談?wù)?Function Calling 和 MCP ,下一篇寫幾個代碼例子。
Function Calling(函數(shù)調(diào)用)介紹
概念
Function Calling 是特定大模型(如 OpenAI 的 GPT-4、Qwen2 等)提供的一種機制,使模型能夠主動生成結(jié)構(gòu)化輸出,以調(diào)用外部系統(tǒng)中預(yù)定義的函數(shù)或 API。
執(zhí)行流程
通常我們說大模型調(diào)用 API,但這種說法并不完全準(zhǔn)確,執(zhí)行過程如下圖:
- Agent 程序是我們開發(fā)的 AI 程序,在程序中會預(yù)先向大模型注冊外部函數(shù)接口(建議不超過 20 個)。
- 用戶通過自然語言發(fā)起請求,Agent 接收到請求。
- Agent 程序?qū)⒂脩粽埱筇峤唤o大模型,模型首先解析語義并評估是否需要調(diào)用外部工具。
- 模型如果判斷需要調(diào)用函數(shù),將生成包含工具 ID 和輸入?yún)?shù)的調(diào)用指令,并返回給 Agent 程序。
- Agent 程序接收到模型返回的調(diào)用指令后,執(zhí)行對工具函數(shù)的調(diào)用。
- 工具函數(shù)執(zhí)行后將結(jié)果返回給 Agent 程序。
- Agent 程序?qū)⒑瘮?shù)返回的結(jié)果和自定義提示詞一起反饋給大模型。
- 大模型融合工具返回的數(shù)據(jù)與原始上下文,生成最終結(jié)果,并返回給 Agent 。
- Agent 程序?qū)⒔Y(jié)果輸出呈現(xiàn)給終端用戶。
特點
- 主動調(diào)用:模型能夠識別用戶的自然語言意圖,決定是否調(diào)用工具,并生成調(diào)用指令。
- 實時反饋:模型生成的函數(shù)調(diào)用指令,由 Agent 程序執(zhí)行后,再次反饋給模型,使模型生成實時和精準(zhǔn)的回應(yīng)。
- 具體實現(xiàn)靈活:沒有嚴(yán)格的標(biāo)準(zhǔn)通信協(xié)議要求,通信格式取決于具體模型廠商。這是個特點,也是個弊端。
MCP(Model Context Protocol)介紹
概念
MCP(Model Context Protocol,模型上下文協(xié)議)是 Anthropic 公司在 2024 年 11 月推出的一種標(biāo)準(zhǔn)協(xié)議。它的目的是給 AI 模型(如大語言模型)和外部數(shù)據(jù)源或工具之間建立起統(tǒng)一的通信接口。
可以簡單類比為 AI 的 USB 接口,無論是 AI 模型還是外部工具,只要符合 MCP 標(biāo)準(zhǔn),就可以實現(xiàn)快速“即插即用”的連接,不需要為每個工具單獨編寫接口程序。也沒有變成語言的限制,就像前后端分離后,基于 WebAPI 的規(guī)范就可以,什么語言都能寫接口。
現(xiàn)在 OpenAI 也支持了 MCP 。
特點
- 開放性:MCP 是開放標(biāo)準(zhǔn),任何開發(fā)者或服務(wù)商均可基于此協(xié)議開發(fā) API,避免重復(fù)造輪子,推動生態(tài)共建,目前已有大量 MCP 集合站(如:https://mcp.so)。
- 標(biāo)準(zhǔn)化:采用 JSON-RPC 2.0 標(biāo)準(zhǔn)通信,確保交互統(tǒng)一、高效。
- AI 增強:MCP 可將 AI 應(yīng)用從簡單問答升級為可執(zhí)行復(fù)雜任務(wù)的工具,如管理代碼、處理文件、連接外部系統(tǒng)。例如,Claude 通過 MCP 接入 GitHub 后,可完成項目創(chuàng)建、提交代碼請求等復(fù)雜操作。
- 安全性:MCP 數(shù)據(jù)交互基于標(biāo)準(zhǔn)協(xié)議,便于控制數(shù)據(jù)流、防止泄露。服務(wù)器內(nèi)置安全機制,可保護 API 密鑰不泄露給大模型提供商,主機可授權(quán)客戶端連接,確保連接安全可控。
- 兼容性:MCP 支持文件內(nèi)容、數(shù)據(jù)庫記錄、API 響應(yīng)、實時數(shù)據(jù)、截圖圖像、日志文件等幾乎所有數(shù)據(jù)格式,適用于多樣的數(shù)據(jù)交互場景。
- 擴展性:MCP 提供提示詞模板(Prompts)、工具(Tools)、采樣(Sampling)等功能,可靈活擴展 AI 應(yīng)用與數(shù)據(jù)源交互能力。開發(fā)者可根據(jù)需求定制提示模板或使用工具擴展數(shù)據(jù)處理功能。
核心架構(gòu)
MCP 采用客戶端-服務(wù)器(Client-Server)架構(gòu),包括以下組件:
- MCP Host:發(fā)起請求的 AI 應(yīng)用程序或工具,如 Claude Desktop、Cursor、Windsurf 等。
- MCP Client:位于 Host 內(nèi)部,保持與 MCP Server 的一對一連接,負(fù)責(zé)消息路由、能力管理和協(xié)議協(xié)商。
- MCP Server:提供上下文數(shù)據(jù)、工具和提示詞模板的服務(wù)端組件,負(fù)責(zé)響應(yīng)客戶端請求,提供外部資源訪問。
- 資源與工具:包括本地或遠程的數(shù)據(jù)資源(如文件、數(shù)據(jù)庫)及可被模型調(diào)用的功能(工具),支持 AI 模型實時獲取外部信息并執(zhí)行任務(wù)。
調(diào)用步驟
- 宿主程序(客戶端)中配置相關(guān)的 MCP Server ,并建立與 MCP Server 的連接。
- 用戶使用自然語言進行提問,宿主程序?qū)⑻崾驹~(整合了用戶問題)和 MCP Server 提供的工具,一起給大模型。
- 大模型理解后產(chǎn)生調(diào)用指令,宿主程序?qū)⒄{(diào)用指令通過 Client 發(fā)送給 MCP Server 。
- MCP Server 收到請求后,解析請求內(nèi)容,執(zhí)行相應(yīng)操作(如搜索網(wǎng)絡(luò)信息、記錄筆記等),然后將處理結(jié)果封裝成響應(yīng)消息,發(fā)送回客戶端。
MCP 與 Function Calling 的關(guān)系和區(qū)別
關(guān)系
大模型就像是一個大腦,MCP 與 Function Calling 都是為了讓大模型能開口說話,動手做事。Function Calling 可視為 MCP 生態(tài)下的一種具體功能實現(xiàn)形式,尤其是在工具調(diào)用(Tools)這一概念上,兩者高度相似。
區(qū)別
交互模式:
- MCP:支持交互式、持續(xù)性的上下文管理,AI 可以與外部資源多輪互動。
- Function Calling:簡單的請求-響應(yīng)模式,單次調(diào)用執(zhí)行特定任務(wù),無交互延續(xù)性。
定位:
- MCP:一種開放的標(biāo)準(zhǔn)協(xié)議,定義通用通信架構(gòu)和數(shù)據(jù)格式(類似于 USB 標(biāo)準(zhǔn))。
- Function Calling:特定模型廠商提供的擴展能力。
通信協(xié)議標(biāo)準(zhǔn)化:
- MCP:嚴(yán)格遵守 JSON-RPC 2.0,具備高度標(biāo)準(zhǔn)化和互操作性。
- Function Calling:無統(tǒng)一標(biāo)準(zhǔn),協(xié)議依賴具體模型廠商實現(xiàn)。
生態(tài)開放程度:
- MCP:生態(tài)開放,社區(qū)共建為主,任意開發(fā)者或服務(wù)商可自由接入。
- Function Calling:生態(tài)相對封閉,依賴特定模型廠商支持。
希望本文對您有所幫助!