這才是MCP 爆火的原因!
現(xiàn)在很多人讓大模型調(diào)用外部工具,最常見的做法就是 Function Calling。
乍一看,能調(diào)起來沒問題。但真要接多個服務、跑一個完整流程,F(xiàn)unction Calling 就顯得太粗糙了——定義繁瑣、結(jié)構(gòu)不統(tǒng)一、模型換一個就得重寫一遍。
本質(zhì)上,它解決的只是“能不能調(diào)用”,但沒解決“怎么標準、高效地調(diào)用”。
而 MCP 出現(xiàn),就是為了解決這個“工程化不成體系”的問題。
我認為 Function Calling 更像是“你教模型怎么用某個函數(shù)”;而 MCP,是“你把這些函數(shù)變成服務,模型自然知道怎么用”。
MCP像是給你寫的工具函數(shù)裝了一個“USB標準口”,以后不管哪個模型來,都能直接插上用。
一、什么是 MCP?
MCP(Model Context Protocol)是一套協(xié)議,專門讓大模型更穩(wěn)、更方便地調(diào)用外部服務。
它不是工具、不是框架,而是像 HTTP、SQL 一樣的“語言規(guī)范”,
讓大模型在面對不同的工具時,說話有標準,調(diào)用有格式,接入有規(guī)矩。
我們先明確一點:MCP 不會幫你寫代碼,你該寫服務還是得寫服務。
那 MCP 到底解決了啥?
很多人一聽 MCP 就頭大,總覺得它是某種框架或者平臺,但其實本質(zhì)非常簡單。
場景設(shè)定:調(diào)用一個“查天氣”的工具
我們希望:大模型收到一句自然語言,比如“請幫我查一下北京今天的天氣”,就能觸發(fā)一個查天氣的工具,返回結(jié)果。
寫法一:傳統(tǒng) Function Calling 寫法(OpenAI 風格)
你得自己寫一個函數(shù),并且注冊到模型里,同時描述這個函數(shù):
{
"name": "get_weather",
"description": "獲取指定城市的天氣",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "查詢天氣的城市名"
}
},
"required": ["city"]
}
}
然后你在代碼里寫這個函數(shù):
def get_weather(city):
# 調(diào)用真實的天氣 API
return f"{city} 今天多云,最高溫 26°C"
整個流程:
你注冊函數(shù)描述
用戶問話 → 模型判斷要用這個函數(shù) → 填參 → 調(diào)用 → 返回
這樣的問題:
- 函數(shù)定義和調(diào)用分開寫,靠自己綁定;
- 函數(shù)描述得自己寫一遍;
- 多個服務無法統(tǒng)一管理;
- 不能“自動注冊、自動識別”,全部靠人工維護;
- 接入多種服務,寫法冗余、難復用。
寫法二:使用 MCP 協(xié)議 + MCP SDK 實現(xiàn)
第一步:你寫一個“天氣服務”的 MCP Server(可以用 Flask)
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/invoke", methods=["POST"])
def handle():
req = request.get_json()
city = req["params"]["city"]
result = f"{city} 今天多云,最高溫 26°C"
return jsonify({
"status": "ok",
"result": result
})
注意,這個服務只要實現(xiàn)了 /invoke 接口,格式遵循 MCP 協(xié)議,就可以被任意支持 MCP 的模型接入。
第二步:模型那邊(Client)用 MCP SDK 發(fā)請求
from mcp import MCPClient
client = MCPClient("http://your-mcp-server-url")
response = client.invoke(
tool="weather", # 工具名
params={"city": "北京"}
)
print(response["result"])
關(guān)鍵點在這兒:
- MCP 定義了一套【工具格式、參數(shù)結(jié)構(gòu)、通信協(xié)議】;
- 工具只要部署成 MCP Server,就能自動接入;
- 模型這邊只要用 MCP Client 發(fā)請求,就能統(tǒng)一對接任何符合協(xié)議的工具。
總結(jié)一下
我們可以這樣理解:
HTTP 是瀏覽器和服務器之間說話的協(xié)議;
SQL 是你和數(shù)據(jù)庫之間說話的協(xié)議;
MCP 是大模型和外部工具之間說話的協(xié)議。
有了 HTTP,網(wǎng)頁才能統(tǒng)一訪問后端服務,不用每個頁面自己發(fā)明新格式;
有了 MCP,大模型也能統(tǒng)一調(diào)用你寫的工具,不用每個模型手動綁接口、拼參數(shù)、猜格式。
它不是要替你寫業(yè)務代碼,
而是讓模型知道:“你要想用我這個函數(shù),得按照 MCP 的方式來交流?!?/p>
三、最后幾點感悟
MCP 本質(zhì)上不是“新能力”,而是把原本凌亂的工具接入方式,變成了一套大家都能理解、能協(xié)作的規(guī)范。
它不會讓大模型變聰明,但它會讓模型調(diào)用外部服務這件事,更穩(wěn)、更標準、更能規(guī)?;涞亍?/p>
這可能不是最酷炫的技術(shù)方向,但卻是讓大模型真正走向業(yè)務系統(tǒng)的一步關(guān)鍵工程基礎(chǔ)。
不管你做的是 Agent、RAG、還是企業(yè)內(nèi)智能系統(tǒng),理解 MCP、會用 MCP,會是你構(gòu)建長期可維護系統(tǒng)的底座能力之一。
本文轉(zhuǎn)載自???大圣數(shù)據(jù)星球???,作者:大圣
