基于MCP協議調用的大模型agent開發02

目錄

在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

  1. 運行應用:運行這個文件腳本(其app.py更換為你的文件名):

python app.py

這將啟動你的 API 服務。

  1. 發送請求:你可以使用 Postman、cURL 或者瀏覽器訪問以下地址:

POST http://localhost:8000/chat

或者在http://localhost:8001/docs#/

它的自動化接口文檔平臺上面,注意保持格式,只能更改值里面的內容:

  1. 查看響應:服務器會返回類似的響應

自動化文檔

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 的異步特性,支持異步請求處理,提高了服務器的并發處理能力。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/900725.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/900725.shtml
英文地址,請注明出處:http://en.pswp.cn/news/900725.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ES6(8) Fetch API 詳解

1. Fetch API 簡介 fetch 是 ES6 提供的基于 Promise 的 API,用于發送 HTTP 請求并處理服務器響應數據。與傳統的 XMLHttpRequest 相比,fetch 語法更加簡潔,使用 Promise 進行異步處理,避免了回調地獄。 1.1 fetch() 的基本用法 …

原生SSE實現AI智能問答+Vue3前端打字機流效果

實現流程: 1.用戶點擊按鈕從右側展開抽屜(drawer),打開模擬對話框 2.用戶輸入問題,點擊提問按鈕,創建一個SSE實例請求后端數據,由于SSE是單向流,所以每提一個問題都需要先把之前的實…

CUDA 工具鏈將全面原生支持 Python

根據 NVIDIA 在 2025 年 GTC 大會上的官宣,CUDA 工具鏈將全面原生支持 Python 編程,這一重大更新旨在降低 GPU 編程門檻,吸引更廣泛的 Python 開發者進入 CUDA 生態。以下是核心信息整合: 1. 原生支持的意義與背景 無需 C/C 基礎…

jupyter notebook 顯示conda虛擬環境

使用 nb_conda_kernels 安裝 nb_conda_kernels:這個包可以自動從你的 Conda 環境中發現并列出內核。 conda activate base # 確保你在 base 環境或任何其他環境中安裝 conda install nb_conda_kernels顯示jupyternotebook當前所在的位置。

【AI】MCP概念

一文講透 MCP(附 Apifox MCP Server 內測邀請) 7分鐘講清楚MCP是什么?統一Function calling規范,工作量銳減至1/6,人人手搓Manus!? | 一鍵鏈接千臺服務器,幾行代碼接入海量外部工具…

WSL1升級到WSL2注意事項

今天要在WSL上安裝docker,因為機器上安裝了wsl1,docker安裝后啟動不了,通過詢問deepseek發現docker只能在wsl2上安裝,因此就想著將本機的wsl1升級到wsl2。 確保你的 Windows 系統是 Windows 10(版本 1903 及以上&…

Pycharm常用快捷鍵總結

主要是為了記錄windows下的PyCharm的快捷鍵,里面的操作都試過了功能描述會增加備注。 文件操作 快捷鍵功能描述Ctrl N新建文件Ctrl Shift N根據名稱查找文件Ctrl O打開文件Ctrl S保存當前文件Ctrl Shift S另存為Alt F12打開終端(Terminal&…

電池分選機:新能源時代的品質守護者|深圳比斯特自動化

在這個新能源蓬勃發展的時代,電池作為能量的存儲與釋放單元,其性能與質量直接關系到整個系統的穩定運行與效率提升。而電池分選機,作為電池生產流程中的關鍵一環,正扮演著品質守護者的角色,為新能源產業的高質量發展保…

認識 Linux 內存構成:Linux 內存調優之虛擬內存與物理內存

寫在前面 博文內容涉及 Linux 內存構成基本認知包括虛擬內存和物理內存映射,多級頁表和MMU簡單認知理解不足小伙伴幫忙指正對每個人而言,真正的職責只有一個:找到自我。然后在心中堅守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是對大眾理想的…

SCI科學論文的重要組成部分

科學論文的核心結構 科學論文通常遵循IMRAD結構,即: 引言(Introduction)方法(Methods)結果(Results)討論(Discussion) 除此之外,還包括其他幾個關鍵部分。讓我為您詳細介紹每個部分的作用和重要性: 1. 標題(Title) 標題是論文…

期權時間價值與隱含波動率怎么選?

期權隱含波動率與時間價值要怎么選?期權隱含波動率IV對期權價格有著巨大的影響。整體來看,期權隱波與期權價格呈正相關關系。當期權隱波從低水平上升時,期權價格也會相應上漲;反之,當隱波下降,期權價格則會…

STM32 HAL庫擴大USB CDC的輸入緩沖區

STM32 HAL庫,使用USB, 擴大輸入暫存區的方法 使用STM32的USB通訊CubeMX建立配置Serial Wire時鐘配置USB配置時鐘頻率設置代碼編寫運行效果總結使用STM32的USB通訊 STM32可以不用使用串口轉換直接和USB通訊。這給串口調試提供了極大的方便。編程,我使用了STM32CubeIDE編程。這…

ffmpeg函數簡介(封裝格式相關)

文章目錄 🌟 前置說明:FFmpeg 中 AVFormatContext 是什么?🧩 1. avformat_alloc_context功能:場景: 🧩 2. avformat_open_input功能:說明:返回值: &#x1f9…

費馬小定理

快速冪 理論 a n a a ? a a^n a a \cdots a anaa?a,暴力的計算需要 O(n) 的時間。 快速冪使用二進制拆分和倍增思想,僅需要 O(logn) 的時間。 對 n 做二進制拆分,例如, 3 13 3 ( 1101 ) 2 3 8 ? 3 4 ? 3 1 3^{13}…

ADGaussian:用于自動駕駛的多模態輸入泛化GS方法

25年4月來自香港中文大學和浙大的論文“ADGaussian: Generalizable Gaussian Splatting for Autonomous Driving with Multi-modal Inputs”。 提出 ADGaussian 方法,用于可泛化的街道場景重建。所提出的方法能夠從單視圖輸入實現高質量渲染。與之前主要關注幾何細…

js中this指向問題

在js中,this關鍵字的指向是一個比較重要的概念,它的值取決于函數的調用方式。 全局狀態下 //全局狀態下 this指向windowsconsole.log("this", this);console.log("thiswindows", this window); 在函數中 // 在函數中 this指向win…

我的NISP二級之路-03

目錄 一.ISMS 二.IP 三.http 四.防火墻 五.文件 解析 解析 六.攻擊 解析 解析 七.風險管理工程 八.信息系統安全保護等級 九.我國信息安全保障 一.ISMS 1.文檔體系建設是信息安全管理體系(ISMS)建設的直接體現,下列說法不正確的是: A&#…

HarmonyOS應用開發者高級-編程題-001

題目一:跨設備分布式數據同步 需求描述 開發一個分布式待辦事項應用,要求: 手機與平板登錄同一華為賬號時,自動同步任務列表任一設備修改任務狀態(完成/刪除),另一設備實時更新任務數據在設備…

動態列表的數據渲染、新增、編輯等功能開發及數據處理

說一個比較繁瑣的功能吧,我使用的是 vue element UI vxe-table 來實現的這個動態列表,其實呢 vxe-table 這個表格插件里邊有動態表格 vxe-grid 只需要通過表頭數組里邊的 field: name, 與表體數組里的 name: Test1, 對應上就行了,很簡單吧…

Linux學習筆記——文件系統基礎與根文件系統詳解

文件系統基礎與根文件系統詳解 什么是文件系統?什么是根文件系統(Root File System)?一句話理解:更詳細地說: 根文件系統為什么重要?1. 啟動依賴2. 提供根目錄 /3. 支持掛載其他文件系統4. 提供…