|
|
@@ -0,0 +1,262 @@
|
|
|
+**Model Context Protocol (MCP)**,是 Anthropic 推出的用于大语言模型(LLM)与外部系统集成的开源协议。以下是详细解析,包含核心设计、消息格式和具体示例:
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### **MCP 核心设计目标**
|
|
|
+1. **模型扩展性**:允许 LLM 调用外部工具(API、数据库、函数等)
|
|
|
+2. **上下文管理**:动态注入/更新模型上下文
|
|
|
+3. **标准化交互**:统一模型与外部系统的通信协议
|
|
|
+4. **安全控制**:通过沙箱机制限制模型权限
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### **协议基础**
|
|
|
+- **传输方式**:HTTP/HTTPS 或 WebSocket
|
|
|
+- **数据格式**:JSON
|
|
|
+- **交互模式**:同步请求/响应 或 异步流式响应
|
|
|
+- **官方文档**:[Anthropic MCP GitHub](https://github.com/anthropics/model-context-protocol)
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### **核心消息格式**
|
|
|
+#### **1. 模型请求(Model → 外部系统)**
|
|
|
+```json
|
|
|
+{
|
|
|
+ "mcp_version": "1.0",
|
|
|
+ "request_id": "req_123456",
|
|
|
+ "action": "execute_tool",
|
|
|
+ "tool": {
|
|
|
+ "name": "weather_api",
|
|
|
+ "parameters": {
|
|
|
+ "location": "San Francisco",
|
|
|
+ "unit": "celsius"
|
|
|
+ }
|
|
|
+ },
|
|
|
+ "context": {
|
|
|
+ "session_id": "sess_7890",
|
|
|
+ "user_id": "user_abc",
|
|
|
+ "memory": {
|
|
|
+ "previous_city": "New York"
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**字段说明**:
|
|
|
+| 字段 | 类型 | 必填 | 说明 |
|
|
|
+|------|------|------|------|
|
|
|
+| `mcp_version` | string | ✅ | 协议版本 (e.g., "1.0") |
|
|
|
+| `request_id` | string | ✅ | 唯一请求标识符 |
|
|
|
+| `action` | string | ✅ | `execute_tool`/`update_context`/`get_state` |
|
|
|
+| `tool` | object | △ | 工具调用详情(action=execute_tool时必填) |
|
|
|
+| `context` | object | △ | 会话上下文数据 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+#### **2. 工具响应(外部系统 → 模型)**
|
|
|
+```json
|
|
|
+{
|
|
|
+ "mcp_version": "1.0",
|
|
|
+ "request_id": "req_123456",
|
|
|
+ "status": "success",
|
|
|
+ "data": {
|
|
|
+ "temperature": 22,
|
|
|
+ "forecast": "sunny"
|
|
|
+ },
|
|
|
+ "context_updates": {
|
|
|
+ "last_location": "San Francisco"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**字段说明**:
|
|
|
+| 字段 | 类型 | 说明 |
|
|
|
+|------|------|------|
|
|
|
+| `status` | string | `success`/`error`/`pending` |
|
|
|
+| `data` | object | 工具执行结果 |
|
|
|
+| `context_updates` | object | 需要更新的上下文字段 |
|
|
|
+| `error` | object | 错误时包含 `code` 和 `message` |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+#### **3. 上下文更新(系统 → 模型)**
|
|
|
+```json
|
|
|
+{
|
|
|
+ "mcp_version": "1.0",
|
|
|
+ "action": "inject_context",
|
|
|
+ "context": {
|
|
|
+ "user_preferences": {
|
|
|
+ "language": "zh-CN",
|
|
|
+ "timezone": "Asia/Shanghai"
|
|
|
+ },
|
|
|
+ "document_summary": "会议重点:Q3 销售目标提升20%..."
|
|
|
+ },
|
|
|
+ "priority": "high"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+**特殊字段**:
|
|
|
+- `priority`: `low`/`medium`/`high`(上下文注入优先级)
|
|
|
+- `ttl`: 上下文有效时间(秒)
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### **典型交互流程示例**
|
|
|
+#### **场景:旅行规划助手**
|
|
|
+```mermaid
|
|
|
+sequenceDiagram
|
|
|
+ participant User
|
|
|
+ participant LLM
|
|
|
+ participant MCP_Router
|
|
|
+ participant FlightAPI
|
|
|
+
|
|
|
+ User->>LLM: "帮我订周五纽约到伦敦的机票"
|
|
|
+ LLM->>MCP_Router: MCP 工具请求(航班查询)
|
|
|
+ MCP_Router->>FlightAPI: 标准API调用
|
|
|
+ FlightAPI->>MCP_Router: 航班数据
|
|
|
+ MCP_Router->>LLM: MCP 结构化响应
|
|
|
+ LLM->>User: "找到3个航班:1. AA101 $680..."
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### **安全机制**
|
|
|
+1. **工具沙箱**:
|
|
|
+ ```python
|
|
|
+ # 示例:Python 沙箱执行环境
|
|
|
+ from mcp_sandbox import execute_tool
|
|
|
+
|
|
|
+ result = execute_tool(
|
|
|
+ tool_name="sql_query",
|
|
|
+ params={"query": "SELECT * FROM users"},
|
|
|
+ permissions=["read_only"] # 禁止写操作
|
|
|
+ )
|
|
|
+ ```
|
|
|
+
|
|
|
+2. **权限控制清单**:
|
|
|
+ ```yaml
|
|
|
+ # mcp_permissions.yaml
|
|
|
+ tools:
|
|
|
+ - name: email_sender
|
|
|
+ allowed_domains: ["@company.com"]
|
|
|
+ rate_limit: 5/hour
|
|
|
+
|
|
|
+ - name: database
|
|
|
+ allowed_operations: ["SELECT"]
|
|
|
+ row_limit: 100
|
|
|
+ ```
|
|
|
+
|
|
|
+3. **上下文过滤**:
|
|
|
+ ```json
|
|
|
+ {
|
|
|
+ "context": {
|
|
|
+ "financial_data": "FILTERED[GDP数据]",
|
|
|
+ "user_identity": "REDACTED"
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### **实际应用案例**
|
|
|
+#### **客户支持系统集成**
|
|
|
+```json
|
|
|
+// 1. LLM 发送工具请求
|
|
|
+{
|
|
|
+ "action": "execute_tool",
|
|
|
+ "tool": {
|
|
|
+ "name": "crm_lookup",
|
|
|
+ "parameters": {
|
|
|
+ "customer_id": "CUST-2023-789",
|
|
|
+ "fields": ["order_history", "support_tickets"]
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 2. CRM 系统响应
|
|
|
+{
|
|
|
+ "status": "success",
|
|
|
+ "data": {
|
|
|
+ "last_order": "2023-08-10",
|
|
|
+ "open_tickets": 2
|
|
|
+ },
|
|
|
+ "context_updates": {
|
|
|
+ "customer_tier": "gold"
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 3. LLM 使用上下文生成回复
|
|
|
+"您好金卡会员!您最近在8月10日有订单..."
|
|
|
+```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### **协议优势**
|
|
|
+1. **上下文感知工具调用**:
|
|
|
+ ```python
|
|
|
+ # 伪代码示例
|
|
|
+ if context.get("user_mood") == "angry":
|
|
|
+ tool_params["priority"] = "urgent"
|
|
|
+ ```
|
|
|
+
|
|
|
+2. **多工具链式调用**:
|
|
|
+ ```json
|
|
|
+ {
|
|
|
+ "action": "pipeline",
|
|
|
+ "steps": [
|
|
|
+ {"tool": "geocoder", "params": {"address": input}},
|
|
|
+ {"tool": "weather", "params": {"coords": "$step1.output"}}
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ```
|
|
|
+
|
|
|
+3. **动态上下文管理**:
|
|
|
+ ```json
|
|
|
+ {
|
|
|
+ "action": "update_context",
|
|
|
+ "operations": [
|
|
|
+ {"op": "merge", "path": "/user_prefs", "value": {"theme": "dark"}},
|
|
|
+ {"op": "delete", "path": "/temp_data"}
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ```
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### **与类似协议对比**
|
|
|
+| 特性 | MCP | OpenAI Function Calling | LangChain |
|
|
|
+|------|-----|-------------------------|----------|
|
|
|
+| 上下文管理 | ✅ 动态注入 | ❌ 有限 | ⚠️ 需自定义 |
|
|
|
+| 工具链组合 | ✅ 原生支持 | ❌ 单次调用 | ✅ 通过代理 |
|
|
|
+| 安全沙箱 | ✅ 内置 | ❌ 依赖实现 | ⚠️ 部分支持 |
|
|
|
+| 多模态支持 | ✅ (v1.1+) | ❌ | ⚠️ 实验性 |
|
|
|
+
|
|
|
+---
|
|
|
+
|
|
|
+### **最佳实践建议**
|
|
|
+1. **上下文压缩**:
|
|
|
+ ```python
|
|
|
+ # 移除过期上下文
|
|
|
+ context = {k: v for k,v in context.items() if time() < v["expiry"]}
|
|
|
+ ```
|
|
|
+
|
|
|
+2. **工具降级策略**:
|
|
|
+ ```json
|
|
|
+ {
|
|
|
+ "fallback_chain": [
|
|
|
+ {"tool": "paid_flight_api", "budget": 0.1},
|
|
|
+ {"tool": "free_flight_api"}
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ```
|
|
|
+
|
|
|
+3. **审计日志**:
|
|
|
+ ```log
|
|
|
+ [MCP_AUDIT] req_id=req_123
|
|
|
+ | Tool: stock_trade
|
|
|
+ | Params: {"symbol":"AAPL","qty":100}
|
|
|
+ | User: id123
|
|
|
+ | Context_hash: a1b2c3d4
|
|
|
+ ```
|
|
|
+
|
|
|
+该协议目前处于活跃开发阶段,最新规范请参考 [Anthropic 官方 GitHub 仓库](https://github.com/anthropics/model-context-protocol)。
|