介绍
AI领域的MCP即模型上下文协议(Model Context Protocol),是Anthropic于2024年11月推出的开源标准,核心是统一LLM与 外部工具/数据源的交互接口,实现“即插即用”的安全双向通信,适配 本地/远程 部署,被称为AI的“USB‑C接口”。
定位与解决的痛点
| 核心问题 | 传统方案 | MCP方案 |
|---|---|---|
| 接口碎片化 | 为每个工具定制API连接代码,适配成本高 | 统一JSON‑RPC接口,一次开发适配全工具 |
| 能力局限 | 模型无法直接操作外部系统(数据库/文件) | 通过MCP Server封装工具,支持函数调用与状态同步 |
| 安全风险 | 敏感数据暴露于开放接口 | 内置身份认证、权限控制与操作审计 |
| 生态割裂 | 模型与工具绑定,跨平台协作难 | 开放标准,支持Claude、GPT、国产模型等跨平台兼容 |
架构与组件
MCP采用Client‑Server架构,核心组件分工明确:
| 组件 | 角色 | 核心功能 | 典型示例 |
|---|---|---|---|
| MCP Host | LLM运行环境 | 用户交互入口,加载MCP配置 | Claude Desktop、Cursor IDE、自定义PyTorch推理服务 |
| MCP Client | 通信枢纽 | 将模型指令转为标准化请求 | 基于JSON‑RPC 2.0封装请求,处理响应 |
| MCP Server | 工具适配器 | 注册工具/数据源,执行调用并返回结果 | 本地文件服务器、数据库代理、第三方API网关 |
| 资源/工具 | 服务载体 | 提供数据访问或可执行功能 | 本地CSV文件、PostgreSQL、天气API、Slack |
工作流程(以查询本地CSV为例)
- 初始化:MCP Host加载Server配置(工具定义、权限规则);
- 请求发起:用户输入“分析data.csv的销售额趋势”,Host传递给Client;
- 协议转换:Client将自然语言意图转为JSON‑RPC请求(指定工具、参数);
- 服务执行:Server接收请求,读取CSV并计算趋势,返回结构化结果;
- 结果整合:Client解析响应,Host将结果转为自然语言呈现给用户。
关键技术细节
- 传输机制(基于JSON‑RPC 2.0)
- stdio(标准输入/输出):轻量同步,适合本地工具(如文件系统、SQLite);
- SSE+HTTP POST:异步事件驱动,适合远程服务(如GitHub、Slack API)。
- 核心能力分类
- 资源(Resources):静态/可查询数据(文件、数据库);
- 工具(Tools):可调用函数/API(数据处理、邮件发送);
- 提示词(Prompts):结构化模板,规范模型输出格式。
- 安全机制
- 身份认证:API密钥、OAuth2.0;
- 权限控制:细粒度资源访问策略;
- 审计日志:记录工具调用、参数、结果,支持追溯。
PyTorch工程化示例(本地文件工具)
以下实现极简MCP Server(读取本地CSV)+ PyTorch Client(调用工具并分析数据),适配教学与实训场景。
1. 环境准备
pip install torch pandas jsonrpcserver[asyncio] jsonrpcclient
2. MCP Server(本地文件工具,stdio模式)
# mcp_file_server.py
from jsonrpcserver import method, async_dispatch
import pandas as pd
import asyncio
import sys
@method
async def read_csv(file_path: str, columns: list = None) -> dict:
"""读取CSV并返回指定列数据"""
try:
df = pd.read_csv(file_path)
if columns:
df = df[columns]
return {
"success": True,
"data": df.to_dict("records"),
"columns": df.columns.tolist()
}
except Exception as e:
return {"success": False, "error": str(e)}
async def main():
while True:
data = await asyncio.get_event_loop().run_in_executor(None, sys.stdin.readline)
if not data:
break
response = await async_dispatch(data)
print(response, flush=True)
if __name__ == "__main__":
asyncio.run(main())
3. PyTorch Client(调用MCP工具并分析)
# pytorch_mcp_client.py
import torch
from jsonrpcclient import request, parse_json
import subprocess
import json
class MCPTorchClient:
def __init__(self, server_path: str):
self.server = subprocess.Popen(
[sys.executable, server_path],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
bufsize=1
)
def call_tool(self, method: str, **params) -> dict:
"""发送MCP请求并接收响应"""
req = request(method, **params)
self.server.stdin.write(req + "\n")
self.server.stdin.flush()
response = self.server.stdout.readline()
return parse_json(response).result
def close(self):
self.server.stdin.close()
self.server.wait()
# 示例:用PyTorch分析CSV数据
if __name__ == "__main__":
client = MCPTorchClient("mcp_file_server.py")
try:
# 1. 调用MCP工具读取CSV
result = client.call_tool("read_csv", file_path="sales.csv", columns=["date", "revenue"])
if not result["success"]:
print(f"读取失败: {result['error']}")
exit(1)
# 2. PyTorch处理数据(趋势预测)
revenues = torch.tensor([d["revenue"] for d in result["data"]], dtype=torch.float32)
trend = torch.mean(revenues[-7:] - revenues[-14:-7]) # 周环比趋势
# 3. 输出结果
print(f"销售额周环比趋势: {'上升' if trend > 0 else '下降'} (幅度: {abs(trend):.2f})")
finally:
client.close()
总结
MCP是AI Agent时代的标准化基石,其价值在于“统一接口+安全可控+生态开放”。通过PyTorch与MCP的结合,可快速实现模型与外部系统的联动,适合在软件工程实训中用于“大模型应用开发”“智能体构建”等模块,帮助学生理解LLM落地的核心技术路径。
需要我把这个PyTorch+MCP示例扩展为完整的实训教案,包含教学目标、步骤、验收标准与常见问题吗?