MCP(Model Control Protocol)协议的请求结构是客户端与大模型服务端交互的核心规范,定义了如何向模型传递任务、参数、上下文等关键信息。其设计需兼顾灵活性(支持多任务类型)和标准化(确保跨系统兼容),以下是详细的请求结构解析(以JSON格式为例,涵盖核心字段及扩展场景):

一、请求结构总览

一个完整的MCP请求包含协议元信息模型指定任务定义上下文数据控制参数等模块,整体结构如下:

{
  "protocol_version": "string",    // 协议版本
  "request_id": "string",          // 唯一请求ID
  "model": { ... },                // 模型选择与配置
  "task": { ... },                 // 核心任务定义(类型+参数)
  "context": { ... },              // 上下文数据(如多轮对话历史)
  "control": { ... },              // 控制参数(超时、重试等)
  "auth": { ... }                  // 认证信息(可选)
}

二、核心字段详解

1. 协议元信息(基础必填)
  • protocol_version

    • 作用:指定协议版本(如"1.0""2.1"),用于服务端兼容不同版本的请求格式。
    • 示例:"protocol_version": "1.0"
    • 注意:不同版本可能存在字段差异(如1.0不支持多模态,2.0新增multimodal字段),需与服务端版本匹配。
  • request_id

    • 作用:客户端生成的唯一标识符(如UUID),用于追踪请求、关联响应、重试去重。
    • 示例:"request_id": "req-7f9a3b2d-8c1e-4d5b-9a0c-1f2e3d4c5b6a"
    • 要求:全局唯一,建议包含时间戳+随机字符串,避免冲突。
2. 模型指定(model,必填)

用于指定目标模型及版本,确保服务端调用正确的模型实例。

"model": {
  "name": "string",       // 模型名称(如"gpt-4"、"llama3-70b"、"qwen-vl")
  "version": "string",    // 模型版本(如"1.0"、"latest")
  "provider": "string"    // 模型提供商(可选,如"openai"、"anthropic")
}
  • 示例:
    "model": {
      "name": "llama3-70b",
      "version": "2.0",
      "provider": "meta"
    }
    
  • 注意:若服务端仅支持单一模型,nameversion可能可选,但建议显式指定。
3. 任务定义(task,核心必填)

定义模型需执行的具体任务(如文本生成、翻译、工具调用等),包含任务类型任务参数,是请求的核心。

(1)task.type:任务类型(必填)

决定模型的行为逻辑,常见类型如下:

  • text_generation:文本生成(如对话、创作、问答)。
  • translation:翻译(如中英互译)。
  • embedding:生成文本向量(用于检索、相似度计算)。
  • function_call:工具调用(如调用API、数据库查询)。
  • multimodal_generation:多模态生成(如图文混合输入)。
(2)task.parameters:任务参数(随type变化)

根据任务类型定义具体参数,以下是常见任务的参数示例:

① 文本生成(text_generation
"task": {
  "type": "text_generation",
  "parameters": {
    "prompt": "请总结以下文章的核心观点:...",  // 输入指令(必填)
    "max_tokens": 1024,                         // 最大生成长度(默认512)
    "temperature": 0.7,                         // 随机性(0-1,值越高越随机)
    "top_p": 0.9,                               // 核采样(0-1,控制候选词范围)
    "top_k": 50,                                // _top_k采样(保留前k个候选词)
    "stop": ["\n", "###"],                      // 终止符(遇到则停止生成)
    "stream": true,                             // 是否流式输出(默认false)
    "response_format": "json"                   // 输出格式(默认text,可选json)
  }
}
② 翻译(translation
"task": {
  "type": "translation",
  "parameters": {
    "text": "Hello, world!",                    // 待翻译文本(必填)
    "source_lang": "en",                        // 源语言(默认自动检测)
    "target_lang": "zh-CN",                     // 目标语言(必填)
    "formality": "formal"                       // 正式度(可选,如"formal"/"informal")
  }
}
③ 工具调用(function_call
"task": {
  "type": "function_call",
  "parameters": {
    "functions": [                              // 可用工具列表(可选,服务端可能预定义)
      {
        "name": "weather_query",
        "description": "查询指定城市的天气",
        "parameters": {
          "type": "object",
          "properties": {
            "city": {"type": "string"},
            "date": {"type": "string", "format": "YYYY-MM-DD"}
          },
          "required": ["city"]
        }
      }
    ],
    "function_call": {                          // 具体调用参数(必填)
      "name": "weather_query",
      "parameters": {"city": "上海", "date": "2025-10-30"}
    }
  }
}
④ 多模态生成(multimodal_generation
"task": {
  "type": "multimodal_generation",
  "parameters": {
    "prompt": "描述这张图片的内容",             // 文本指令(必填)
    "images": [                                 // 图像数据(必填,多图支持)
      {"type": "url", "value": "https://example.com/img1.jpg"},
      {"type": "base64", "value": "data:image/jpeg;base64,/9j/4AAQSkZJRgABA..."}
    ],
    "max_tokens": 512
  }
}
4. 上下文数据(context,可选)

用于传递对话历史、会话状态等上下文信息,确保多轮交互的连贯性(常见于对话场景)。

"context": {
  "session_id": "sess-123",                    // 会话ID(标识同一轮对话)
  "history": [                                  // 历史消息列表
    {"role": "user", "content": "什么是MCP协议?"},
    {"role": "assistant", "content": "MCP协议是模型控制协议..."},
    {"role": "user", "content": "它的请求结构包含哪些部分?"}
  ],
  "system_prompt": "你是一个AI助手,需用简洁语言回答问题"  // 系统提示词(全局配置)
}
  • role:消息角色,常见值为user(用户)、assistant(模型)、system(系统提示)。
  • session_id:可选,用于服务端关联同一用户的多轮请求(如保存历史)。
5. 控制参数(control,可选)

用于配置请求的执行策略,如超时、重试、优先级等。

"control": {
  "timeout": 30000,                 // 超时时间(毫秒,默认30秒)
  "priority": "normal",             // 优先级(low/normal/high,影响队列调度)
  "retryable": true,                // 是否允许重试(默认true)
  "cache": {                        // 缓存配置(可选,减少重复计算)
    "enable": true,
    "ttl": 3600                     // 缓存有效期(秒)
  }
}
6. 认证信息(auth,可选)

用于身份验证,通常包含API密钥、令牌等(部分场景可能通过HTTP Header传递,如Authorization: Bearer <token>)。

"auth": {
  "api_key": "sk-xxxxxxxxxxxxxxxxxxxx",  // API密钥
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."  // JWT令牌
}

三、完整请求示例(多轮对话场景)

{
  "protocol_version": "1.0",
  "request_id": "req-20251030-12345",
  "model": {
    "name": "gpt-4",
    "version": "latest"
  },
  "task": {
    "type": "text_generation",
    "parameters": {
      "prompt": "它和HTTP协议有什么区别?",
      "max_tokens": 512,
      "temperature": 0.5,
      "stream": false
    }
  },
  "context": {
    "session_id": "chat-789",
    "history": [
      {"role": "user", "content": "什么是MCP协议?"},
      {"role": "assistant", "content": "MCP协议是模型控制协议,用于客户端与大模型服务端的交互。"}
    ]
  },
  "control": {
    "timeout": 60000,
    "priority": "normal"
  },
  "auth": {
    "api_key": "sk-abc123"
  }
}

四、关键设计原则

  1. 灵活性:通过task.typetask.parameters的组合,支持多样化任务(文本、多模态、工具调用等)。
  2. 兼容性protocol_version字段确保不同版本协议可平滑升级。
  3. 可追踪性request_idsession_id便于问题排查和会话管理。
  4. 安全性:支持多种认证方式,保护模型服务不被未授权访问。

实际使用时,需结合目标模型服务的文档调整字段(部分服务可能简化或扩展某些字段),但核心结构保持一致。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐