MCP vs Skills:Agent 架构中的“USB接口”与“超级应用”

在构建大模型 Agent(智能体)时,很多开发者容易陷入一个误区:认为只要给模型连上数据库或 API,它就能自动完成复杂任务。但现实往往是:模型能调用工具,却搞不定业务逻辑;或者业务逻辑写死了,换个系统就得重写代码。

这就引出了两个在 Agent 架构设计中至关重要的概念:MCP (Model Context Protocol)Skills

很多同学在面试或实际架构选型时会困惑:这两者到底有什么区别?是二选一,还是都要用?

简单来说,这是一个**“工具体系标准化(MCP)”“能力封装(Skills)”**的分层关系问题。今天我们就通过通俗易懂的类比和实战视角,彻底讲清楚它们的本质区别与协作关系。


一、 核心区别:一句话看懂

如果要用最精炼的语言概括:

  • MCP (Model Context Protocol):解决的是**“模型怎么安全、标准化地调用外部工具/系统”的问题。它是基础设施层**。
  • Skills:解决的是**“如何把一类复杂能力封装成可复用的业务/推理模块”的问题。它是应用能力层**。

为了让你瞬间理解,我们可以打个比方:

MCP 就像是 USB-C 接口标准:它规定了插头怎么插、电压多少、数据怎么传,确保任何设备(工具)都能即插即用,且安全可控。

Skills 就像是安装在电脑上的 Photoshop 或 Office 软件:它利用底层的硬件接口(USB/MCP),组合了一系列复杂操作(滤镜、排版、计算),最终为用户提供一个完整的“修图”或“文档处理”能力。


二、 MCP:LLM 世界的“USB-C”标准

1. 为什么我们需要 MCP?

在没有 MCP 之前,Agent 开发面临着严重的碎片化问题:

  • 重复造轮子:每个 Agent 项目都要为不同的 API(如 Slack, GitHub, 内部 ERP)单独编写 HTTP Client。
  • 安全隐患:权限控制、参数校验全靠业务代码硬编码,容易出漏洞。
  • 扩展困难:想新增一个工具?得改 Agent 的核心代码,重新部署。

👉 结果:工具生态孤岛林立,难以治理,难以大规模扩展。

2. MCP 的本质

MCP 是一个开放协议,旨在标准化 LLM 与数据源及工具之间的连接。它定义了:

  • 工具描述(Schema):工具叫什么?需要哪些参数?返回什么格式?
  • 注册与发现:Agent 如何知道有哪些工具可用?
  • 统一调用:无论底层是 Python 脚本、HTTP API 还是数据库,上层调用方式一致。
  • 安全隔离:统一的鉴权(OAuth/API Key)和执行沙箱。

3. 实战场景:医疗 LIS 系统接入

假设我们要让 Agent 查询医院的 LIS(实验室信息系统)。

❌ 没有 MCP 时:
你需要为每个 Agent 编写特定的 HTTP 请求代码,处理 Cookie、Header,解析特定的 JSON 结构,还要小心处理鉴权 Token。

# 传统方式:耦合度高,难以复用
import requests

def get_lab_result_legacy(patient_id):
    headers = {"Authorization": "Bearer <hardcoded_token>"}
    resp = requests.get(f"https://lis-hospital.com/api/v1/results/{patient_id}", headers=headers)
    # 需要针对特定 API 解析数据
    return resp.json()['data']['items']

✅ 使用 MCP 后:
LIS 系统作为一个 MCP Server 暴露标准接口。Agent 只需要通过标准协议调用。

// Agent 发出的标准 MCP 调用请求
{
  "method": "tools/call",
  "params": {
    "name": "get_lab_result",
    "arguments": {
      "patient_id": "123456"
    }
  }
}

MCP Server 负责处理底层的 HTTP 通信、鉴权和数据格式化,Agent 只关心**“我要查结果”**这一意图。


三、 Skills:黑盒化的“超级能力”

1. 为什么我们需要 Skills?

有了 MCP,模型可以调用单个工具了。但是,真实世界的任务往往很复杂。

比如用户问:“帮我分析一下这位患者最近的检验报告异常原因。”

这不仅仅是一个 get_lab_result 的工具调用,它涉及:

  1. 调用 MCP 获取最新检验数据。
  2. 调用 MCP 获取患者历史病历。
  3. 检索 RAG 医学知识库,对比正常值范围。
  4. 进行逻辑推理,判断哪些指标异常。
  5. 生成通俗易懂的解释文本。

如果让 Agent 每一步都自己去规划调用哪个 MCP 工具,不仅延迟高,而且容易出错(幻觉或步骤遗漏)。

Skills 就是为了解决这个问题:将上述多步流程封装成一个原子化的“技能”。

2. Skills 的本质

Skill 是一个功能性的能力模块,它对 Agent 而言是一个黑盒:

  • 输入:自然语言指令或结构化参数。
  • 内部:包含 Prompt 工程、多工具编排(Orchestration)、业务逻辑代码、推理链条。
  • 输出:最终的业务结果(如分析报告、决策建议)。

3. 实战场景:检验报告解读 Skill

我们封装一个名为 lab_report_interpretation 的 Skill。

内部逻辑(伪代码):

class LabReportSkill:
    def execute(self, patient_id: str):
        # 1. 通过 MCP 获取数据
        current_data = mcp_client.call_tool("get_lab_result", patient_id)
        history_data = mcp_client.call_tool("get_patient_history", patient_id)
        
        # 2. 检索知识库
        knowledge = rag_engine.search("abnormal_lab_indicators")
        
        # 3. LLM 推理与生成
        prompt = f"""
        患者当前数据: {current_data}
        历史数据: {history_data}
        医学知识: {knowledge}
        请分析异常指标并给出建议。
        """
        result = llm.generate(prompt)
        
        return result

对 Agent 而言:

它不需要知道里面调用了几个 API,也不需要知道怎么拼凑 Prompt。它只需要决定:“这个问题需要调用 lab_report_interpretation 这个 Skill”

// Agent 调用 Skill
{
  "action": "call_skill",
  "skill_name": "lab_report_interpretation",
  "args": {
    "patient_id": "123456"
  }
}

四、 核心对比:一张表厘清关系

维度 MCP (Model Context Protocol) Skills
层级 基础设施层 / 协议层 应用能力层 / 业务层
本质 工具调用的标准化协议 复杂任务的封装模块
粒度 原子级(单个 API/工具) 复合级(多步骤工作流)
主要目标 解决连接性、安全性、通用性 解决业务复杂度、推理准确性、复用性
是否含推理 ❌ 否(仅透传数据) ✅ 是(通常包含 LLM 推理)
类比 USB 接口 / 驱动程序 Photoshop / Excel 宏 / APP
使用者 平台开发者、系统集成商 业务开发者、AI 应用工程师

五、 架构全景:它们是如何协作的?

MCP 和 Skills 不是对立关系,而是分层依赖关系。一个成熟的 Agent 架构通常是这样的:

数据与服务层 (Data & Services)

基础设施层 (Infrastructure Layer)

应用层 (Application Layer)

决定使用某项能力

执行复杂逻辑

执行复杂逻辑

调用标准工具

调用标准工具

标准化协议

读取/写入

读取/写入

读取/写入

用户

Agent 大脑 (LLM)

Skills 编排层

技能: 报告解读

技能: 风险风控

MCP Client

MCP Server

医院 LIS 系统

企业数据库

第三方 API

流程解析:

  1. 用户提问:“帮我看看张三的体检报告有没有大问题。”
  2. Agent 思考:这是一个医疗分析任务,我应该调用 medical_analysis 这个 Skill
  3. Skill 执行medical_analysis Skill 被激活。它内部决定需要先获取数据。
  4. MCP 调用:Skill 通过 MCP 协议 调用 get_medical_record 工具。
  5. 底层交互:MCP Server 接收请求,访问真实的医院数据库,返回标准化 JSON 数据。
  6. 结果返回:Skill 拿到数据,结合内部 Prompt 进行推理,生成最终回答,返回给 Agent,再呈现给用户。

六、 什么时候用谁?最佳实践指南

🟢 什么时候重点建设 MCP?

  • 当你构建 Agent 平台或中台时:你需要接入几十甚至上百个内部系统(ERP, CRM, HR, 数据库等)。
  • 当安全与治理至关重要时:你需要统一管控所有工具调用的权限、审计日志和速率限制。
  • 当希望实现“一次开发,到处运行”时:希望同一个工具能被 LangChain、AutoGen、Claude Desktop 等不同框架无缝使用。

🔵 什么时候重点建设 Skills?

  • 当面对垂直领域复杂任务时:如法律合同审查、医疗诊断辅助、代码重构建议。这些任务单靠调用一个 API 无法完成,需要“思考+多步操作”。
  • 当需要保证输出稳定性时:通过将最佳实践(Prompt + 工具链)固化为 Skill,避免每次让 LLM 临时发挥导致的效果波动。
  • 当需要复用 AI 能力时:将“周报生成”、“竞品分析”封装为 Skill,可以在不同的 Agent 应用中直接挂载使用。

七、 总结

在 Agent 开发的浪潮中,理清分层架构是避免系统变得臃肿混乱的关键。

  • MCP 是修路的,它制定了交通规则和接口标准,让数据流动畅通无阻、安全规范。
  • Skills 是造车的,它利用道路(MCP),组装引擎(LLM)和零件(工具),为用户提供从 A 点到 B 点的完整出行体验。

不要试图用 MCP 去解决业务逻辑问题,也不要试图用 Skills 去替代底层连接的标准化。 只有两者结合,才能构建出既灵活又强大的智能体应用。


参考资料

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐