MCP(Model Context Protocol)模型上下文協(xié)議介紹 原創(chuàng)
“ MCP協(xié)議是智能體開發(fā)中的一項標準協(xié)議,目前市面上智能體的主流開發(fā)協(xié)議就是它。”
在智能體領域工具是一個很重要的組件,大模型通過工具調(diào)用才能與外界環(huán)境交互并完成任務。而為了統(tǒng)一工具調(diào)用的方式,就有了MCP協(xié)議的出現(xiàn),它的目的是統(tǒng)一工具調(diào)用的方式,不同模型廠商和工具廠商可以按照統(tǒng)一的標準實現(xiàn),然后不同模型和工具之間可以無縫切換。
協(xié)議的本質(zhì)就是標準。
FastMCP開發(fā)框架
下面我們以FastMCP框架為基礎來介紹MCP協(xié)議,F(xiàn)astMCP是MCP官方支持的MCP工具開發(fā)框架。
FastMCP官方文檔:
https://gofastmcp.com/servers/server
在MCP協(xié)議中有三個比較重要的概念,tools,resources和prompts。
Tools——工具
tools的本質(zhì)是一個函數(shù),其和普通的python函數(shù)沒有太大的區(qū)別,只不過在實現(xiàn)上需要使用@mcp.tool注解;如下所示:
@mcp.tool
def multiply(a: float, b: float) -> float:
"""Multiplies two numbers together."""
return a * b
按照這種方式開發(fā)的函數(shù),就可以交由FastMCP框架調(diào)用,以此完成某項特定的功能。
Resources——資源
資源是供MCP客戶端使用的資源,客戶端可以從中讀取一些配置或參數(shù)。
Prompts——模板
prompts是訪問大模型的一個目標,能夠讓模型按照約定的格式進行處理。
而MCP協(xié)議的實現(xiàn)非常的簡單,
# 安裝方式
# uv方式
uv add fastmcp
# pip方式
pip install fastmcp
服務端實現(xiàn)如下:
from fastmcp import FastMCP
# 創(chuàng)建一個MCP服務
mcp = FastMCP("My MCP Server")
@mcp.tool # 定義一個tools 函數(shù)
def greet(name: str) -> str:
return f"Hello, {name}!"
客戶端實現(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"))
通過以上方式就可以實現(xiàn)MCP服務端和客戶端的通訊;MCP采用的是C-S架構,也就是Client(客戶端)——Server(服務端)。
而關于MCP的通訊方式有以下幾種:
stdio:一般用于本地通訊 通常用來進行測試開發(fā)
sse: 基于http的單項通訊協(xié)議
Streamable HTTP: 基于http的雙向流式傳輸協(xié)議
websocket: 雙向傳輸協(xié)議
通過以上方式就可以實現(xiàn)MCP客戶端與服務端的通訊:
from fastmcp import Client
# The Client automatically uses StreamableHttpTransport for HTTP URLs
client = Client("https://example.com/mcp")
當然,F(xiàn)astMCP不僅僅提供客戶端與服務端的實現(xiàn),同時還提供了權限認證等多種功能。
在智能體的開發(fā)過程中,由大模型理解用戶意圖,然后判斷是否需要調(diào)用工具;如果需要調(diào)用工具,大模型則會拼接參數(shù),調(diào)用工具,然后把工具調(diào)用結果再次輸入到大模型中;最后由大模型對工具結果進行處理,然后得到最終結果。
本文轉(zhuǎn)載自???AI探索時代??? 作者:DFires
