目錄
在AI agent的開發過程中,如何使用mcp服務器作為大模型的工具調用‘百寶箱’?
FastAPI
FastMCP
?本系列:
基于MCP協議調用的大模型agent開發01-CSDN博客
基于MCP協議調用的大模型agent開發02-CSDN博客
在AI agent的開發過程中,如何使用mcp服務器作為大模型的工具調用‘百寶箱’?
#邏輯流程圖
用戶向大模型發送請求
↓
大模型識別需要調用的工具
↓
大模型通過MCP客戶端向MCP服務器發送請求
↓
MCP服務器解析請求
↓
MCP服務器調用對應的工具
↓
工具執行并返回結果
↓
MCP服務器將結果返回給大模型
↓
大模型處理結果并回復用戶
# 偽代碼
# 定義MCP服務器
class MCP_SERVER:def __init__(self):
self.tools = {}def add_tool(self, name, tool_function):
self.tools[name] = tool_functiondef handle_request(self, request):
tool_name = request.get('tool')
tool_function = self.tools.get(tool_name)if tool_function:return tool_function(**request.get('args', {}))else:return {"error": "Tool not found"}# 定義一個示例工具:天氣查詢
def get_weather(latitude, longitude):# 這里可以是調用天氣API的代碼return f"Current weather at {latitude}, {longitude}: Sunny, 25°C"# 初始化MCP服務器并添加工具
mcp_server = MCP_SERVER()
mcp_server.add_tool('weather', get_weather)# 模擬大模型與MCP服務器的交互
def main():
user_input = "What's the weather like in New York?"# 大模型識別需要調用的工具
tool_to_use = 'weather'
tool_args = {'latitude': 40.7128, 'longitude': -74.0060}# 發送請求到MCP服務器
request = {'tool': tool_to_use, 'args': tool_args}
result = mcp_server.handle_request(request)# 大模型處理結果并回復用戶
response = f"The weather in New York is {result}"print(response)if __name__ == "__main__":
main()
Tip: FastMCP 通過 Python 的 類型提示 和 文檔字符串 自動生成工具定義,使得 MCP 工具 的創建與維護變得更加簡單。在說FastMCP前先聊一聊FastAPI
FastAPI
使用 FastAPI 構建后端的 API 服務
在現代 web 開發中,API(應用程序編程接口)成為了系統之間交互的核心。API 允許
不同的軟件應用之間交換數據,它是 前后端,Web 服務、移動應用間溝通的橋梁。
FastAPI 是一個非常不錯的框架,它簡單高效,適合初學者快速上手。
什么是 API
API(應用程序編程接口) 是一組定義不同軟件組件之間如何交互的規則和協議。API
是系統間“對話”的橋梁。比如,當你使用手機應用發送一條消息時,應用程序會向服
務器發起一個請求,服務器根據請求返回響應數據。這個過程就通過 API 完成。
API 通常采用 HTTP 協議工作。常見的 HTTP 請求方法包括:
為什么使用 FastAPI
FastAPI 是一個用于構建 API 服務的 Python 框架。它的優勢包括:
基礎概念
路由(Route):
是 API 中用來指定請求路徑和處理方法的規則。比如, GET
/users 可能表示獲取用戶列表
請求(Request)和響應(Response):用戶通過 HTTP 請求發送數據,服務器
通過響應返回數據
ASGI 服務器:
ASGI 是一種新的 Web 服務器協議,支持異步處理多個請求,適合高并發、實時
應用等場景
準備工作
安裝 FastAPI 和 Uvicorn
在使用 FastAPI 構建 API 服務之前,首先需要安裝相關的依賴庫。可以使用 pip 來
安裝:
pip install fastapi uvicorn
FastAPI 是框架本身
Uvicorn 是 ASGI 服務器,用于運行 FastAPI 應用
創建第一個 API 服務
代碼示例
from fastapi import FastAPI
from pydantic import BaseModel# 創建 FastAPI 應用實例,這行代碼創建了一個 `FastAPI` 應用實例。可將 `app`看作是整個 API 服務的核心。(類似于flask框架)
app = FastAPI()
# 定義請求體的數據結構,這里我們定義了一個 Pydantic 數據模型 `ChatRequest`,包含一個 `message` 字段,類型是 `str`。Pydantic 是一個用于數據驗證的庫,FastAPI 使用它來確保請求數據符合預期格式。
class ChatRequest(BaseModel):message: str# 創建路由,處理 POST 請求。`@app.post("/chat")` 是 FastAPI 的裝飾器,表示當有用戶發送 POST 請求到 `/chat` 路徑時,調用 `chat` 函數來處理。@app.post("/chat")def chat(chat_request: ChatRequest):# 返回響應return {"response": f"Received message: {chat_request.message}"}# 啟動 Uvicorn 服務器,這行代碼啟動了 Uvicorn 服務器,并監聽所有網絡接口的8000 端口。通過 `http://localhost:8000`,你可以訪問這個 API 服務。
if __name__ == "__main__":import uvicornuvicorn.run(app, host="0.0.0.0", port=8000)
測試API
- 運行應用:運行這個文件腳本(其app.py更換為你的文件名):
python app.py
這將啟動你的 API 服務。
- 發送請求:你可以使用 Postman、cURL 或者瀏覽器訪問以下地址:
POST http://localhost:8000/chat
或者在http://localhost:8001/docs#/
它的自動化接口文檔平臺上面,注意保持格式,只能更改值里面的內容:
- 查看響應:服務器會返回類似的響應
自動化文檔
FastAPI 提供了自動化生成 API 文檔的功能。只需要訪問以下鏈接,你就可以查看和測試你的 API,FastAPI 會自動生成這些文檔,無需額外編寫API文檔,更加方便地助力新的api開發。
FastMCP
FastMCP與FastAPI
FastAPI
FastAPI 是一個現代、快速(高性能)的 Web 框架,用于構建 API,特別適合于異步請求處理。FastAPI 支持 Python 3.6 及以上版本,并且可以利用 Python 類型提示來自動生成 API 文檔(如 Swagger UI 和 ReDoc)。它基于 Starlette 和 Pydantic,提供了快速請求響應處理、數據驗證、序列化和異步處理等特性。
FastAPI 的主要特點包括:
快速:高性能,與 NodeJS 和 Go 相當。
快速編碼:通過 Python 類型提示減少樣板代碼。
少錯誤:自動數據驗證減少代碼中的錯誤。
直觀:自動生成文檔。
易維護:通過依賴注入減少代碼復雜性。
生產就緒:內置支持異步和同步代碼。
FastMCP
FastMCP 是一個基于 FastAPI 的庫,專門用于實現 Model Context Protocol (MCP) 服務器。MCP 是一種協議,用于在大語言模型(LLM)應用和外部工具或服務之間進行通信。FastMCP 利用 FastAPI 的高性能和異步特性,提供了一個快速、靈活的方式來構建符合 MCP 協議的服務器。
FastMCP 的作用包括:
簡化 MCP 服務器開發:提供一套工具和抽象,簡化 MCP 服務器的開發過程。
高性能:利用 FastAPI 的高性能特性,提供快速的請求響應處理。
異步處理:支持異步請求處理,提高服務器的并發處理能力。
易于集成:可以輕松集成到現有的 FastAPI 應用中,或作為獨立的 MCP 服務器運行。
在 MCP 開發中的作用
在 MCP 開發中,FastMCP 作為基于 FastAPI 的庫,主要發揮以下作用:
提供 MCP 協議實現:FastMCP 提供了 MCP 協議的核心實現,包括消息格式、通信模式等,使得開發者可以專注于業務邏輯的實現,而不需要從頭開始實現 MCP 協議。
簡化服務器開發:通過 FastMCP,開發者可以更容易地創建符合 MCP 協議的服務器,利用 FastAPI 的特性來處理請求和響應。
提高開發效率:FastMCP 提供了一套工具和抽象,簡化了 MCP 服務器的開發過程,提高了開發效率。
支持異步處理:FastMCP 利用 FastAPI 的異步特性,支持異步請求處理,提高了服務器的并發處理能力。