基于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.mzph.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. 提供…