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