目录
在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 的异步特性,支持异步请求处理,提高了服务器的并发处理能力。