智能体学习17——模型上下文协议(MCP)

张开发
2026/4/17 17:41:56 15 分钟阅读

分享文章

智能体学习17——模型上下文协议(MCP)
文章目录模型上下文协议MCP一、核心概念什么是 MCP二、MCP vs 工具函数调用三、MCP 架构详解3.1 四大组件3.2 五步交互流程3.3 三大能力类型四、源码解构ADK 连接 MCP 文件系统服务器4.1 智能体配置4.2 连接其他类型的服务器五、源码解构FastMCP 创建自定义 MCP 服务器5.1 服务端5.2 客户端ADK Agent 消费 FastMCP5.3 两种传输机制对比六、九大应用场景七、关键要点八、与前几章的联系模型上下文协议MCP一、核心概念什么是 MCP一句话MCP 是 LLM 与外部系统的通用适配器让任何 LLM 都能无缝连接任何外部工具、数据库或 API。打个比方工具函数调用像给 AI 配一套专用工具特定扳手和螺丝刀适合固定任务MCP像通用电源插座系统允许任何合规工具接入打造动态可扩展的工作坊MCP 的本质开放标准协议规范 Gemini、GPT、Claude 等 LLM 与外部系统的通信方式。⚠️ 重要提醒MCP 效果高度依赖底层 API 的设计质量❌ 只是简单包装传统 API → 智能体表现差✅ 底层 API 支持过滤、排序等确定性特性 → 智能体高效工作❌ API 返回 PDF 等不可解析格式 → 无意义✅ API 返回文本Markdown→ 智能体可直接处理二、MCP vs 工具函数调用特性工具函数调用MCP标准化专有、厂商定制开放标准协议范围LLM 直接请求某个预定义函数LLM 与外部工具的通用框架架构一对一交互客户端-服务器架构发现机制需显式告知 LLM 可用工具支持动态发现复用性与应用和 LLM 高度耦合可复用、独立的 MCP 服务器三、MCP 架构详解3.1 四大组件用户请求 ↓ ┌─────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ LLM │ ←→ │ MCP 客户端 │ ←→ │ MCP 服务器 │ ←→ │ 第三方服务 │ │ (核心) │ │ (应用包装层) │ │ (能力暴露层) │ │ (实际执行层) │ └─────────┘ └─────────────┘ └─────────────┘ └─────────────┘组件角色说明LLM核心 Agent处理请求、制定计划、决定何时访问外部MCP 客户端翻译官将 LLM 意图转化为 MCP 标准请求MCP 服务器门卫暴露工具/资源/Prompt认证和校验请求第三方服务执行者实际执行操作数据库查询、发邮件等3.2 五步交互流程1. 发现 → 客户端查询服务器能力获取工具/资源/Prompt 清单 2. 请求构造 → LLM 决定使用某工具构造请求参数 3. 客户端通信 → 客户端按标准格式发送请求到服务器 4. 服务器执行 → 认证 → 校验 → 调用底层软件 5. 响应与更新 → 标准化响应返回 → 更新 LLM 上下文 → 继续任务3.3 三大能力类型类型说明示例资源Resources静态数据PDF、数据库记录、文件内容工具Tools可执行功能发邮件、API 查询、文件操作Prompt交互模板引导 LLM 与资源/工具的结构化交互四、源码解构ADK 连接 MCP 文件系统服务器4.1 智能体配置importosfromgoogle.adk.agentsimportLlmAgentfromgoogle.adk.tools.mcp_tool.mcp_toolsetimportMCPToolset,StdioServerParameters# 文件操作根目录TARGET_FOLDER_PATHos.path.join(os.path.dirname(os.path.abspath(__file__)),mcp_managed_files)os.makedirs(TARGET_FOLDER_PATH,exist_okTrue)root_agentLlmAgent(modelgemini-2.0-flash,namefilesystem_assistant_agent,instruction(帮助用户管理文件。你可以列出、读取和写入文件。f 你的操作目录为{TARGET_FOLDER_PATH}),tools[MCPToolset(connection_paramsStdioServerParameters(commandnpx,# 使用 npx 运行 Node.js 包args[-y,modelcontextprotocol/server-filesystem,# MCP 文件系统服务器TARGET_FOLDER_PATH,# 限制操作范围],),# 可选限制暴露的工具# tool_filter[list_directory, read_file])],)源码解读StdioServerParameters通过 STDIO标准输入输出启动 MCP 服务器进程commandnpx使用 npm 自带的包执行工具无需全局安装modelcontextprotocol/server-filesystem社区提供的文件系统 MCP 服务器TARGET_FOLDER_PATH限制文件操作范围安全措施tool_filter可选限制智能体只能使用特定工具最小权限原则4.2 连接其他类型的服务器# 连接 Python MCP 服务器connection_paramsStdioConnectionParams(server_params{command:python3,args:[./agent/mcp_server.py],env:{# 环境变量传递SERVICE_ACCOUNT_PATH:...,DRIVE_FOLDER_ID:...}})# 使用 UVX 运行 Python MCP 包connection_paramsStdioConnectionParams(server_params{command:uvx,# Python 的 npx 等价物args:[mcp-google-sheetslatest],env:{SERVICE_ACCOUNT_PATH:...,DRIVE_FOLDER_ID:...}})源码解读StdioConnectionParamsSTDIO 方式连接本地进程间通信env环境变量传递用于认证等敏感信息npxvsuvxnpx 运行 Node.js 包uvx 运行 Python 包五、源码解构FastMCP 创建自定义 MCP 服务器5.1 服务端# fastmcp_server.pyfromfastmcpimportFastMCP mcp_serverFastMCP()mcp_server.tooldefgreet(name:str)-str: 生成个性化问候语。 Args: name: 要问候的人名。 Returns: 问候语字符串。 returnf你好{name}很高兴认识你。if__name____main__:mcp_server.run(transporthttp,host127.0.0.1,port8000)源码解读mcp_server.tool装饰器将 Python 函数注册为 MCP 工具文档字符串和类型提示会被 FastMCP 自动用于工具描述和接口规范transporthttp使用 HTTP 传输远程连接而非 STDIO本地连接服务启动后监听 8000 端口任何 MCP 客户端都可连接5.2 客户端ADK Agent 消费 FastMCP# ./adk_agent_samples/fastmcp_client_agent/agent.pyfromgoogle.adk.agentsimportLlmAgentfromgoogle.adk.tools.mcp_tool.mcp_toolsetimportMCPToolset,HttpServerParameters FASTMCP_SERVER_URLhttp://localhost:8000root_agentLlmAgent(modelgemini-2.0-flash,namefastmcp_greeter_agent,instruction你是一个友好的助手可以通过 greet 工具向人问好。,tools[MCPToolset(connection_paramsHttpServerParameters(urlFASTMCP_SERVER_URL,# HTTP 方式连接远程 MCP 服务器),tool_filter[greet]# 只允许使用 greet 工具)],)源码解读HttpServerParameters通过 HTTP 连接远程 MCP 服务器vsStdioServerParameters本地连接tool_filter[greet]最小权限原则只暴露需要的工具Agent 的 LLM 会自动识别 MCP 提供的工具描述决定何时调用5.3 两种传输机制对比机制参数类适用场景通信方式STDIOStdioServerParameters本地、敏感数据、高性能JSON-RPC over STDIOHTTPHttpServerParameters远程、组织共享、可扩展Streamable HTTP SSE六、九大应用场景场景说明数据库集成自然语言查询 BigQuery实时获取信息生成式媒体调用 Imagen图片、Veo视频、Lyria音乐外部 API 交互天气、股票、邮件、CRM 标准化接入推理型信息抽取LLM 推理 MCP 数据精准提取关键信息自定义工具开发FastMCP 快速开发无需修改 LLM标准化通信不同厂商 LLM 与工具互操作复杂流程编排组合多种 MCP 工具实现多步骤自动化IoT 设备控制自然语言控制智能家居、工业传感器金融服务自动化市场分析、自动交易、合规报告七、关键要点MCP 是开放标准不是某个厂商的专有技术任何合规 LLM 和工具都可接入客户端-服务器架构标准化信息流LLM 通过客户端发现和调用服务器暴露的能力三大能力资源静态数据、工具可执行功能、Prompt交互模板动态发现智能体无需重启即可适应新功能底层 API 质量是关键MCP 只是接口真正的效果取决于底层 API 的设计两种传输机制STDIO本地高性能vs HTTP远程可扩展FastMCP 简化开发装饰器 类型提示 文档字符串 → 自动生成 MCP 工具安全考虑认证授权、tool_filter 最小权限、环境变量传递敏感信息八、与前几章的联系模式与 MCP 的关系工具使用Ch5MCP 是工具调用的标准化升级版多智能体Ch7MCP 让多智能体共享工具生态记忆管理Ch8MCP 可连接外部知识库作为长期记忆A2ACh15MCP 连接工具A2A 连接智能体互补关系

更多文章