一文詳解 MCP 與 Function Calling

0 評論 1161 瀏覽 1 收藏 11 分鐘

隨著 AI 原生應(yīng)用的興起,MCP(Multi-step Calling Protocol)與 Function Calling 正在成為連接模型能力與業(yè)務(wù)邏輯的關(guān)鍵橋梁。本文將帶你深入理解 MCP 的設(shè)計理念與 Function Calling 的底層機(jī)制,結(jié)合典型應(yīng)用場景,厘清它們在智能體架構(gòu)中的角色分工與協(xié)同路徑。

隨著大語言模型(LLM)的浪潮奔涌而至,我們不再滿足于其潛能被禁錮在簡單的問答模式中。我們渴望它能像人類一樣,執(zhí)行更復(fù)雜的現(xiàn)實任務(wù)。然而,一個根本性的問題浮現(xiàn)眼前。

無論是基于訓(xùn)練數(shù)據(jù)還是外接知識庫,LLM在本質(zhì)上都是一個“靜態(tài)的缸中大腦”。它與人類在執(zhí)行任務(wù)時有著許許多多的的區(qū)別,而在這些區(qū)別中有一個影響模型能力的關(guān)鍵區(qū)別——與真實世界的實時交互能力。

設(shè)想一個場景:當(dāng)被問及“今天上海天氣如何?”,我們不會基于過去的記憶去推斷,也不會想去查閱一本記錄著歷年上海天氣的“指南”,而是會立即打開天氣應(yīng)用,獲取一個實時的、準(zhǔn)確的答案,也就是說,我們能用恰當(dāng)?shù)男袆樱溄悠饋砦锢硎澜纾ū粏柕降膯栴})和數(shù)據(jù)世界(天氣預(yù)報中記錄的實時信息)。

那么,如何讓“缸中大腦”也能像我們一樣,擁有“打開天氣預(yù)報”這種執(zhí)行能力?這便是我們今天要探討的核心技術(shù):Function CallingMCP。

由于這些名詞Function Calling、MCP都是海外創(chuàng)造的詞匯,我們需要對這些詞匯先有個簡單的理解對齊。

什么是Function Calling?

我們知道,大語言模型的能力本質(zhì)上就是在接收文本序列、生成文本序列,也就是一臺Sequence to Sequence的機(jī)器,因此要讓大模型具備與真實世界獨立交互的能力,我們只能在文本的層面做一些改造。這種改造分為兩個方面:首先要讓模型理解它能夠和哪些真實數(shù)據(jù)交互,即它能夠使用哪些工具獲取實時數(shù)據(jù)。其次就要讓它知道它如何正確“打開”這個工具。這兩項能力組合起來,就是Function Calling的能力。

讓我們結(jié)合一個如何實現(xiàn)FunctionCalling的例子來進(jìn)一步對齊:

我們現(xiàn)在有一個能夠語義理解的模型,還有一張表格,里面存放著世界上所有地區(qū)的實時天氣情況。

我們在不給予模型任何額外背景的情況下,它是一臺能夠根據(jù)已有知識對用戶輸入產(chǎn)生合理輸出的機(jī)器,如果我問它:“今天上海天氣怎么樣?”,這個問題會轉(zhuǎn)化成向量,在模型大腦中一通計算,最后給出一個模型已有知識中它認(rèn)為最能回答這個問題的答案,它可能是“還不錯”,也可能是“我的門口有兩棵樹,一棵是棗樹,另一棵還是棗樹”,它的回答內(nèi)容,取決于我們用了什么“靜態(tài)數(shù)據(jù)”訓(xùn)練它,以及提供了什么“靜態(tài)”知識庫供它訪問,它沒有獲取實時信息的能力。

那么,我們?nèi)绾巫屗ゴ蜷_那張實時更新的表格,并從里面查信息呢?你肯定已經(jīng)想到了,我們可以將查表格的能力抽象成一個接口,由模型來向接口發(fā)送請求并攜帶對應(yīng)參數(shù)來獲取數(shù)值,也就是這么做:

這一次,在我們問出“今天上海天氣怎么樣”的時候,同步給模型一個“靜態(tài)知識”:你可以調(diào)用一個工具,叫做get_weather來獲取天氣,這個工具的描述如下:

也就是說,模型收到的輸入如下:

而當(dāng)我們的模型接收到問題輸入的時候,它會經(jīng)過分析,判斷出需要調(diào)用get_weather這個工具,并且從工具列表中判斷得到它需要一個location參數(shù),于是輸出一個型如下的格式請求:

到這一步Function Calling也就結(jié)束了。也就是說,什么是Function Calling其實可以用下面一句話描述清楚:

Function Calling就是指模型根據(jù)用戶提供的工具列表,分析用戶的問題需要調(diào)用什么工具,并且按照符合工具列表的要求生成對應(yīng)工具請求的輸出的能力。也就是判斷工具選型、生成工具請求兩項能力。

什么是MCP?

MCP,我們都知道它是一個“協(xié)議”。而它究竟有什么用、和我們剛剛講的Function Calling有什么關(guān)系呢?請看下圖:

在我們開始分析這張圖之前,我們需要明晰一件事:MCP和Function Calling有什么關(guān)系?

我們知道Function Calling指的是模型根據(jù)用戶問題,拆分問題、生成工具請求的能力。我們可以將Fucntion Calling理解為一種能力,而MCP則是“施展這種能力的舞臺”。

MCP,全稱是模型上下文協(xié)議(Model Context Protocol),我們不去講MCP到底是如何實現(xiàn)的,但是我們需要知道它是如何在Function Calling的基礎(chǔ)上搭建并工作的。

MCP的核心是MCP Server,它是一個裝載著大量工具的服務(wù),能夠提供給模型工具列表(Function Calling中提到的那種),也能夠接收模型生成的請求并且獲得結(jié)果返回給模型。也就是圖中的紅色核心。

這么講可能還是無法理解MCP是什么,沒關(guān)系,我們用例子來講明,代碼預(yù)警。

如何搭建MCP Server?

當(dāng)我們有一個模型,我們想給它提供實時與股票市場交互的能力,我們可以構(gòu)建一個獲取股票價格的MCP Server如下:

如果你不會python,也沒關(guān)系,你只需要注意到我們定義了一個工具get_stock_price,并且將其添加在一個名為stocks_server的MCP Server中即可。

到這一步,也就相當(dāng)于我們給MCP Server中添加了查詢股票價格的接口,接下來就是將MCP Server和調(diào)用模型的客戶端進(jìn)行綁定:

當(dāng)我們做到這一步,成功將MCP Server注入給模型之后,我們需要做的就是詢問模型股票價格,模型便可以自動調(diào)用工具獲取實時信息了,整個過程看起來好像和Function Calling沒有關(guān)系,但是其實MCP的實現(xiàn)正是基于Function Calling實現(xiàn)的。

整體回顧

讓我們再次回到起點。一個被禁錮在“缸中”的語言模型,如何才能與真實世界交互?

答案,是一個優(yōu)雅的分層協(xié)作架構(gòu)。

首先,我們依賴模型與生俱來的天賦能力——Function Calling。它讓模型能夠讀懂“工具說明書”,并將我們的自然語言指令,轉(zhuǎn)化為精確的、機(jī)器可以理解的“行動計劃(JSON)”。這是“決策生成”的環(huán)節(jié),完全由模型的認(rèn)知智能驅(qū)動 。

其次,我們構(gòu)建了一個標(biāo)準(zhǔn)化的執(zhí)行舞臺——MCP (模型上下文協(xié)議)。通過編寫MCP Server,我們?yōu)槟P偷哪芰Υ罱艘粋€穩(wěn)定、可靠且可擴(kuò)展的外部環(huán)境 。它負(fù)責(zé)提供工具、執(zhí)行指令、處理反饋,將模型的“計劃”轉(zhuǎn)化為真實世界的“行動”。這是“決策執(zhí)行”的環(huán)節(jié),由我們開發(fā)者的工程能力保障。

能力(Function Calling)與舞臺(MCP)的分離,正是這套架構(gòu)的精髓所在。它讓AI回歸其最擅長的認(rèn)知與推理,讓開發(fā)者專注于構(gòu)建穩(wěn)定可靠的工具與服務(wù)。這種清晰的職責(zé)劃分,最終共同成就了一個真正強(qiáng)大且有執(zhí)行力的AI Agent。

本文由 @石耳叫Ria 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載

題圖來自Unsplash,基于CC0協(xié)議

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!