MCP(Model Context Protocol)模型上下文協(xié)議介紹 原創(chuàng)
“ MCP協(xié)議是智能體開(kāi)發(fā)中的一項(xiàng)標(biāo)準(zhǔn)協(xié)議,目前市面上智能體的主流開(kāi)發(fā)協(xié)議就是它。”
在智能體領(lǐng)域工具是一個(gè)很重要的組件,大模型通過(guò)工具調(diào)用才能與外界環(huán)境交互并完成任務(wù)。而為了統(tǒng)一工具調(diào)用的方式,就有了MCP協(xié)議的出現(xiàn),它的目的是統(tǒng)一工具調(diào)用的方式,不同模型廠商和工具廠商可以按照統(tǒng)一的標(biāo)準(zhǔn)實(shí)現(xiàn),然后不同模型和工具之間可以無(wú)縫切換。
協(xié)議的本質(zhì)就是標(biāo)準(zhǔn)。

FastMCP開(kāi)發(fā)框架
下面我們以FastMCP框架為基礎(chǔ)來(lái)介紹MCP協(xié)議,F(xiàn)astMCP是MCP官方支持的MCP工具開(kāi)發(fā)框架。
FastMCP官方文檔:
https://gofastmcp.com/servers/server在MCP協(xié)議中有三個(gè)比較重要的概念,tools,resources和prompts。
Tools——工具
tools的本質(zhì)是一個(gè)函數(shù),其和普通的python函數(shù)沒(méi)有太大的區(qū)別,只不過(guò)在實(shí)現(xiàn)上需要使用@mcp.tool注解;如下所示:
@mcp.tool
def multiply(a: float, b: float) -> float:
"""Multiplies two numbers together."""
return a * b按照這種方式開(kāi)發(fā)的函數(shù),就可以交由FastMCP框架調(diào)用,以此完成某項(xiàng)特定的功能。
Resources——資源
資源是供MCP客戶端使用的資源,客戶端可以從中讀取一些配置或參數(shù)。

Prompts——模板
prompts是訪問(wèn)大模型的一個(gè)目標(biāo),能夠讓模型按照約定的格式進(jìn)行處理。

而MCP協(xié)議的實(shí)現(xiàn)非常的簡(jiǎn)單,
# 安裝方式
# uv方式
uv add fastmcp
# pip方式
pip install fastmcp服務(wù)端實(shí)現(xiàn)如下:
from fastmcp import FastMCP
# 創(chuàng)建一個(gè)MCP服務(wù)
mcp = FastMCP("My MCP Server")
@mcp.tool # 定義一個(gè)tools 函數(shù)
def greet(name: str) -> str:
return f"Hello, {name}!"客戶端實(shí)現(xiàn)如下:
import asyncio
from fastmcp import Client
client = Client("my_server.py")
async def call_tool(name: str):
async with client:
result = await client.call_tool("greet", {"name": name})
print(result)
asyncio.run(call_tool("Ford"))通過(guò)以上方式就可以實(shí)現(xiàn)MCP服務(wù)端和客戶端的通訊;MCP采用的是C-S架構(gòu),也就是Client(客戶端)——Server(服務(wù)端)。
而關(guān)于MCP的通訊方式有以下幾種:
stdio:一般用于本地通訊 通常用來(lái)進(jìn)行測(cè)試開(kāi)發(fā)
sse: 基于http的單項(xiàng)通訊協(xié)議
Streamable HTTP: 基于http的雙向流式傳輸協(xié)議
websocket: 雙向傳輸協(xié)議
通過(guò)以上方式就可以實(shí)現(xiàn)MCP客戶端與服務(wù)端的通訊:
from fastmcp import Client
# The Client automatically uses StreamableHttpTransport for HTTP URLs
client = Client("https://example.com/mcp")當(dāng)然,F(xiàn)astMCP不僅僅提供客戶端與服務(wù)端的實(shí)現(xiàn),同時(shí)還提供了權(quán)限認(rèn)證等多種功能。
在智能體的開(kāi)發(fā)過(guò)程中,由大模型理解用戶意圖,然后判斷是否需要調(diào)用工具;如果需要調(diào)用工具,大模型則會(huì)拼接參數(shù),調(diào)用工具,然后把工具調(diào)用結(jié)果再次輸入到大模型中;最后由大模型對(duì)工具結(jié)果進(jìn)行處理,然后得到最終結(jié)果。
本文轉(zhuǎn)載自???AI探索時(shí)代??? 作者:DFires

















