MCP vs Skills:Agent 架构中的“USB接口”与“超级应用”
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 的工具调用,它涉及:
- 调用 MCP 获取最新检验数据。
- 调用 MCP 获取患者历史病历。
- 检索 RAG 医学知识库,对比正常值范围。
- 进行逻辑推理,判断哪些指标异常。
- 生成通俗易懂的解释文本。
如果让 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 架构通常是这样的:
流程解析:
- 用户提问:“帮我看看张三的体检报告有没有大问题。”
- Agent 思考:这是一个医疗分析任务,我应该调用
medical_analysis这个 Skill。 - Skill 执行:
medical_analysisSkill 被激活。它内部决定需要先获取数据。 - MCP 调用:Skill 通过 MCP 协议 调用
get_medical_record工具。 - 底层交互:MCP Server 接收请求,访问真实的医院数据库,返回标准化 JSON 数据。
- 结果返回: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 去替代底层连接的标准化。 只有两者结合,才能构建出既灵活又强大的智能体应用。
参考资料
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)