MCP(Model Context Protocol)模型上下文协议介绍

 MCP协议是智能体开发中的一项标准协议,目前市面上智能体的主流开发协议就是它。



在智能体领域工具是一个很重要的组件,大模型通过工具调用才能与外界环境交互并完成任务。而为了统一工具调用的方式,就有了MCP协议的出现,它的目的是统一工具调用的方式,不同模型厂商和工具厂商可以按照统一的标准实现,然后不同模型和工具之间可以无缝切换。


协议的本质就是标准。






FastMCP开发框架




下面我们以FastMCP框架为基础来介绍MCP协议,FastMCP是MCP官方支持的MCP工具开发框架。


FastMCP官方文档:https://gofastmcp.com/servers/server



在MCP协议中有三个比较重要的概念,tools,resources和prompts。


Tools——工具


tools的本质是一个函数,其和普通的python函数没有太大的区别,只不过在实现上需要使用@mcp.tool注解;如下所示:

@mcp.tooldef multiply(a: float, b: float) -> float:    """Multiplies two numbers together."""    return a * b

按照这种方式开发的函数,就可以交由FastMCP框架调用,以此完成某项特定的功能。


Resources——资源


资源是供MCP客户端使用的资源,客户端可以从中读取一些配置或参数。



Prompts——模板


prompts是访问大模型的一个目标,能够让模型按照约定的格式进行处理。



而MCP协议的实现非常的简单,


# 安装方式# uv方式uv add fastmcp# pip方式pip install fastmcp


服务端实现如下:


from fastmcp import FastMCP# 创建一个MCP服务mcp = FastMCP("My MCP Server")@mcp.tool # 定义一个tools 函数def greet(name: str) -> str:    return f"Hello, {name}!"

客户端实现如下:

import asynciofrom fastmcp import Clientclient = 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"))


通过以上方式就可以实现MCP服务端和客户端的通讯;MCP采用的是C-S架构,也就是Client(客户端)——Server(服务端)。


而关于MCP的通讯方式有以下几种:


stdio:一般用于本地通讯 通常用来进行测试开发

sse: 基于http的单项通讯协议

Streamable HTTP: 基于http的双向流式传输协议

websocket: 双向传输协议


通过以上方式就可以实现MCP客户端与服务端的通讯:


from fastmcp import Client# The Client automatically uses StreamableHttpTransport for HTTP URLsclient = Client("https://example.com/mcp")

当然,FastMCP不仅仅提供客户端与服务端的实现,同时还提供了权限认证等多种功能。


在智能体的开发过程中,由大模型理解用户意图,然后判断是否需要调用工具;如果需要调用工具,大模型则会拼接参数,调用工具,然后把工具调用结果再次输入到大模型中;最后由大模型对工具结果进行处理,然后得到最终结果。







(文:AI探索时代)

发表评论