MCP 回顾:

  • 统一传输协议:jsonrpc 2.0,明确输入参数(jsonrpc、method、params、id)、输出参数(jsonrpc、result/error、id)格式及字段,否则各家模型公司标准不统一,各家接口服务协议不统一,没有统一规范。
  • 统一通信协议:stadio、SSE(service send event)、websocket

Agent Skill 回顾:

  • 解决 token 上下文窗口问题,
  • 模块化、可复用
  • 特定任务、工作流程的结构化封装
  • 包含文件:SKILL.md、references/、scripts/、assert/

screenshot_20260315_215333.jpg

screenshot_20260315_215809.jpg

关系: Skill 与MCP 结合使用,与 MCP 关系类似菜谱+厨具、数据怎么用+数据如何获取。

问题一:大模型是如何发现 Agent Skills 的

开始处理请求时,系统会提供了一个 <agent_skills>部分,里面列出了所有可用的skills,传入到 system_prompt 中:

<agent_skills>
  <agent_skill fullPath="/Users/zhangfeibiao/.claude/skills/travel-guide/SKILL.md">
    当用户询问"帮我制定旅行攻略"、"create a travel itinerary"、"plan a trip"、
    "规划路线"、"make travel攻略"或讨论"旅行攻略"、"旅游计划"、"景点推荐"、
    "travel planning"、"itinerary creation"时使用此技能。自动从小红书收集旅行信息
    并整合Google Maps数据生成全面的旅行指南。⚠️ 必须为每个景点获取 Google Maps 
    链接、评分、地址信息、支付方式和地点图片。
  </agent_skill>
  
  <!-- 还有其他20多个skills -->
</agent_skills>

信息流可视化(rule 非必须,看 Agent 架构设计):

┌─────────────────────────────────────────┐
│  系统发送给我的完整上下文               │
├─────────────────────────────────────────┤
│                                         │
│ <agent_skills>                          │
│   ├─ travel-guide ⭐                    │
│   │   ├─ fullPath: /...skills/...      │
│   │   └─ description: "旅行攻略..."     │
│   │                                    │
│   ├─ xlsx                               │
│   ├─ pdf                                │
│   └─ ... 30+ skills                    │
│                                         │
│ <workspace_rules>                       │
│   └─ <skills_system>                    │
│       └─ travel-guide (同上)            │
│                                         │
│ <user_query>                            │
│   └─ "帮我生成福州3日旅行攻略"          │
│                                         │
└─────────────────────────────────────────┘
           │
           ↓
    [我的处理逻辑]
           │
    关键词匹配: "旅行攻略"
           │
    在agent_skills中查找...
           │
    ✅ 发现travel-guide ✅
           │
    读取skill详细信息
           │
    执行skill的具体步骤

问题二:如果 skills 里面又有很多接口调用,这些接口有的是直接声明url、params,有的会指明调用哪个mcp 的具体 tool,这两种情况下流程是如何实现的?

┌─────────────────────────────────────────────────────┐
│                  大模型 (Claude/OpenAI/千问)           │
└───────────────────────────┬─────────────────────────┘
                            │
          【模型只做这3件事】
  1. 理解目标  2. 规划步骤  3. 选择并调用 Skill
                            │
                            ▼
┌─────────────────────────────────────────────────────┐
│                  Agent Skills 能力层                 │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐   │
│  │ 查天气 Skill │  │ 发邮件 Skill │  │ 订机票 Skill │   │
│  └─────────────┘  └─────────────┘  └─────────────┘   │
└───────────────────────────┬─────────────────────────┘
                            │
          【模型只看到:名称、描述、入参、出参】
                            │
                            ▼
┌─────────────────────────────────────────────────────┐
│                  MCP 协议层 (JSON-RPC 2.0)            │
└───────────────────────────┬─────────────────────────┘
                            │
          【统一调用入口:skills.xxx + params】
                            │
            ┌──────────────┴──────────────┐
            ▼                             ▼
┌─────────────────────┐         ┌─────────────────────┐
│  类型A:直接HTTP接口  │         │  类型B:调用MCP Tool  │
│  内部写死 URL、参数   │         │  指向已注册的MCP工具   │
└─────────────────────┘         └─────────────────────┘

步骤 1:编写 Registry 文件

如上面的 skills_registry.yaml,把所有 Skill 的 “给模型看的元信息” 和 “模型看不到的实现细节” 分开写。

步骤 2:系统启动时加载 Registry

后端服务(如 Python/Go 服务)读取 Registry 文件,解析成内存中的数据结构,同时加载 Rule 规则文件。

步骤 3:提取 Skill 元信息(核心:隐藏实现细节)

系统只保留 metadata 部分(名称、描述、入参 / 出参约束),完全剔除 implementation 部分(URL/Tool 信息),生成 “干净的 Skill 清单”。

步骤 4:封装到 System Prompt / 上下文

把 “干净的 Skill 清单 + Rule 规则” 拼接成模型能理解的文本,放入 System Prompt(模型的 “指令手册”)。

关键:只传元信息,不传实现细节!

步骤 5:传给大模型

步骤 6:模型基于元信息决策调用

模型只看到上述 “干净的清单”,基于语义理解 + Rule 规则,决策调用 weather.get,并按 input_schema 生成参数,最后通过 MCP 协议发送调用请求。