手把手教你:用 MCP 搭建高性能 AI Agent(附源码)

Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

随着 Agent 成为 LLM 应用的核心形态,MCP(模型上下文协议)作为 “连接外部资源的统一桥梁”,其重要性日益凸显。本文将围绕 MCP 的核心架构、组件功能、实战开发三大模块展开,从 “为什么需要 MCP” 到 “如何动手搭建”,层层递进,帮你快速掌握这一提升 Agent 开发效率的关键技术。

1、MCP 架构设计全剖析

第一、为什么会出现 MCP?

如果你开发了一个 AI 应用,无论是 ChatBot 还是复杂的 Agent,都不会仅限于简单的 LLM 对话。很多时候,你需要与外部世界连接,以访问数据源或使用工具。例如:

  • 操控浏览器实现自动化;

  • 访问本地文件;

  • 访问数据库结构,以便更好地让 AI 参与编程

  • 调用 CRM 的 API 以驱动智能客服流程。

在这种情况下,你需要连接不同的对象,使用不同的接口协议。你可能需要熟悉 SQL、HTTP 调用、Playwright 等接口,甚至还需要使用搜索引擎、访问云存储、调用第三方开放API等。这些都涉及大量的“粘合“工作。

在这里插入图片描述

MCP(模型上下文协议)正是为了解决这一问题。它允许 LLM 应用通过统一的协议连接外部资源,而无需逐个适配。MCP通过增加一个中间层来实现这一点:LLM 应用通过统一的 MCP 协议连接到中间层(称为 MCPServer),而中间层则负责处理与外部资源的对接。

在这里插入图片描述

那么,为什么在 Agent 应用火热之后,大家才开始关注 MCP 呢?原因很简单:Agent 是最需要对接外部资源和工具的 LLM 应用类型。

第二、MCP 有哪些好处?

这种设计范式在软件系统中其实很常见,比如:一些大模型 API网关会将不同厂家的大模型协议转化为统一的 OpenAI 兼容协议,方便应用接入它的具体意义主要体现在以下几点

  • 简化 LLM 应用:无需适配各种私有协议,只需学会连接 MCPServer 即可。

  • 快速扩展 LLM 应用:随时可以“插拔“新的 MCP Server,需要更多功能时,简单添加即可,

  • 快速适应变化:如果外部资源的接口发生变化,只需在对应的 MCP Server 上进行修改,所有连接的 LLM 应用都能无缝适应。 

  • 构建新的 AI 能力共享生态:通过共享 MCP Server,新的LLM 应用能够快速获得各种工具,形成一种新的合作体系从而提升整体的效用。

在这里插入图片描述

例如,MCP 的提出者 Anthropic 旗下的 Claude Desktop,就可以通过这种方式轻松扩充自身的能力。

第三、基于 MCP 的 Agent 架构设计

以下是基于 MCP 将 LLM 应用(Agent)与外部资源集成的架构设计图:

在这里插入图片描述

与 LLM 应用直接连接外部资源的方式相比,这里主要增加了一个中间层 (MCP Server)以及用于连接该中间层的(MCP辈 敫煳睃猪lient)。理解了这两个组件,你就基本掌握了 MCP 的核心。

1、MCp Server

这里的“Server”并非传统意义上的集中式服务器,更像是一个服务插件。

  • MCP Server 部署位置

MCP Server可以部署在 LLM 应用所在的本机上,也可以远程部署(Remote)。不过目前远程部署方式尚未完善,暂时不考虑。以下内容仅针对本地部署模式。

  • MCP Server 提供的“服务”

  • Tools:为 LLM 应用,尤其是 Agent 提供各种工具。

  • Resources:为 LLM 应用提供额外的结构化数据。

  • Prompts:为 LLM 应用提供 Prompt模板。例如,如果你的应用是一个Chatbot,可以从 MCP Server 中获取这些模板供用户选择使用。

  • 获取 MCP Server 的方式

  • 自己使用MCP SDK创建后,供个人或者内部共享使用。

  • 从他人创建的 MCP Servers 中“挑选”,然后下载使用。例如,可以从以下链接获取

    在这里插入图片描述

MCP Server 的启动方式

  • 在本地模式下,通过在 LLM 应用中配置启动命令后,MCP Server 会自动启动。

  • 需要注意的是,不同的 MCP Server 可能有不同的启动命令,具体请査看 MCP Server 的说明书。

  • 部分 MCP Server 可能需要先安装依赖项;而对于通过 npx 或 uvx 运行的 MCP Server,则会自动下载缓存并临时运行。

  • 启动后,MCP Server 在物理形式上是一个独立的进程。

  • MCP Server 与 client 应用的通信方式

在本地模式下,MCP Server 与客户端应用之间通过 stdio/stdout(标准输入输出)进行进程间通信,交换消息。这种通信方式你可能已经很熟悉了,例如:

cat file.txt |grep "error"|sort > result.txt
  • 创建 MCP Server 的编程语言

目前支持使用 TS(TypeScript)、Python、Java SDK 来编写 MCP Server。

2、Mcp client

MCP Client 是由客户端 LLM 应用使用 Client SDK 创建并维护的一个 Server 会话,就像你在程序中维护一个数据库的 Connection 一样。一般长这样:

async with stdio client(server params)as(read, write):  async with clientsession(    read, write,sampling_callback=None      )as session:、 ......

借助 Client SDK 你可以与 MCP Server 通信。比如查看 Server 的 Tools:

tools = await session.list tools()

本地模式下,Client 与 Server 是一对一的关系。如果需要连接多个MCP Server,需要自行维护多个 Session。

2、动手做一个 MCP

让我们通过一个简单的 Client + Server 的完整案例来加深对 MCP 的理解。首先,使用以下命令安装 SDK:

pip install mcp

安装完成后,按照以下步骤进行操作:

第一、创建 MCP Server

这个 MCP Server 仅具备一个功能:提供一个计算器工具。具体实现如下:

#server demo.pyfrom mcp.server.fastmcp import FastMCP#创建一个MCP服务器mcp = FastMCP("演示”)#添加一个工具@mcp.tool()def calculate(expression:str)->float:"""计算四则运算表达式 参数:expression:数学表达式字符串,如“1 +2*3"返回:  计算结果  """  ...省略计算器代码...  if__name__=="__main__ ":  mcp.run(transport='stdio')

注意这里必须要有启动代码,但现在你不能启动它。

第二、创建 MCP Client

接下来,创建一个客户端应用,用于连接上述 MCP Server 并调用其中的计算器功能:​​​​​​​

#client_demo.pyfrom mcp.client.stdio import stdio_clientfrom mcp import clientSession, stdioserverParameters, typesimport asyncio#Client会使用这里的配置来启动本地 MCP Serverserver_params =stdioServerParameters(  command="python",  args-["./server demo.py"],env=None)async def main():   async with stdio_client(server_params)as(read, write):   async with clientSession(   read,write, sampling_callback=None   )as session:      await session.initialize()      print('\n正在调用工具...")      result = await session.call tool("calculate",{ "expression":"188*23-34"})      print(result.content)asyncio.run(main())

现在直接运行这个 Client,就可以看到如下输出:

在这里插入图片描述

第三、如何调试 MCP Server

如果只是单纯开发 MCP Server,如何快速进行测试呢?对于用 Python 编写的 Server,可以通过 MCP Inspector来进行调试。运行以下命令:

mcp dev server demo.py

随后,访问 http://localhost:5173,即可进入可视化调试界面,在这里可以直观地测试刚才的计算器工具。

在这里插入图片描述

- End -

 从0到1!大模型(LLM)最全学习路线图,建议收藏!

想入门大模型(LLM)却不知道从哪开始? 我根据最新的技术栈和我自己的经历&理解,帮大家整理了一份LLM学习路线图,涵盖从理论基础到落地应用的全流程!拒绝焦虑,按图索骥~~

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值