目录:
当我们谈论AI应用开发时,经常会听到API、MCP(Model Context Protocol)和Skills这三个词。它们看起来都是让程序之间"对话"的方式,但究竟有什么不同?让我用一个简单的餐厅比喻来解释。
想象你要解决"吃饭"这个问题,有三种不同的方式可以选择。每种方式代表了不同的技术范式,适用于不同的场景。
API:传统的点菜服务
工作原理
API(Application Programming Interface)就像一家传统餐厅的菜单点餐系统。
- 你(客户端)坐在座位上
- 看着菜单(API文档)
- 告诉服务员:“我要一份宫保鸡丁”(发送请求)
- 服务员把订单传给厨房(后端服务)
- 厨房做好后,服务员端上来(返回响应)
关键特点:
- 你必须知道菜单上有什么:需要提前阅读API文档
- 必须按固定格式点菜:请求参数要符合规范
- 一次点一道菜:一个请求对应一个功能
- 各家餐厅菜单不同:每个API都有自己的规范和认证方式
代码示例
# 传统API调用:你需要明确知道要调用什么
import requests
# 你必须知道这个API存在,知道参数格式
response = requests.post(
"https://api.weather.com/v1/forecast",
headers={"Authorization": "Bearer YOUR_TOKEN"},
json={"city": "Beijing", "days": 7}
)
weather_data = response.json()
print(f"未来天气:{weather_data['forecast']}")
# generated by AI
适用场景
- 明确、固定的功能调用:如支付、发送邮件、查询数据库
- 高性能要求:响应时间可预测,适合生产环境
- 人类开发者编程:需要人工阅读文档、编写代码
MCP:智能的食材供应商
工作原理
MCP(Model Context Protocol)就像一个智能的食材配送系统,为AI大厨提供实时的原材料。
- AI(大型语言模型)是一位经验丰富的厨师
- 它有烹饪技能,但没有食材
- MCP服务器是食材供应商,提供:
- 实时数据:新鲜蔬菜(文件系统)
- 专业工具:菜刀、锅铲(搜索、计算工具)
- 特殊食材:数据库连接、API访问权限
关键特点:
- 标准化的接口:所有供应商遵循同一套协议
- AI自主选择:模型决定需要什么食材
- 双向交互:可以持续对话,动态调整需求
- 上下文感知:供应商了解当前"烹饪"的上下文
架构示意
用户请求:"帮我分析最近的销售趋势"
↓
AI模型(大厨)
↓ ← MCP协议(标准接口)→ ↓
[数据库MCP] [文件系统MCP] [分析工具MCP]
↓ ↓ ↓
查询数据 读取文件 生成图表
代码示例
# MCP服务器示例:提供文件系统访问能力
from mcp.server import Server
from mcp.types import Tool, TextContent
server = Server("filesystem-mcp")
@server.list_tools()
async def list_tools() -> list[Tool]:
"""声明这个MCP服务器提供的工具"""
return [
Tool(
name="read_file",
description="读取指定路径的文件内容",
inputSchema={
"type": "object",
"properties": {
"path": {"type": "string", "description": "文件路径"}
},
"required": ["path"]
}
),
Tool(
name="list_directory",
description="列出目录中的所有文件",
inputSchema={
"type": "object",
"properties": {
"path": {"type": "string", "description": "目录路径"}
}
}
)
]
@server.call_tool()
async def call_tool(name: str, arguments: dict) -> list[TextContent]:
"""AI模型会自动调用这些工具"""
if name == "read_file":
with open(arguments["path"], "r") as f:
content = f.read()
return [TextContent(type="text", text=content)]
# ... 其他工具实现
# generated by AI
适用场景
- AI Agent应用:让LLM能够访问外部数据和工具
- 动态能力扩展:无需修改模型,通过MCP添加新能力
- 上下文增强:为模型提供实时、相关的外部信息
- 标准化集成:一次接入,多个AI模型都能使用
Skills:预制的套餐服务
工作原理
Skills就像餐厅的预制套餐或招牌菜,是为特定任务打包好的完整解决方案。
- 你说:“我想吃川菜套餐”
- 餐厅已经配好了:宫保鸡丁 + 麻婆豆腐 + 米饭 + 汤
- 厨师(AI)按照固定流程烹饪
- 可能会用到食材(MCP)和标准菜谱(内置能力)
关键特点:
- 任务导向:针对特定场景设计(如"代码审查"、“写博客”)
- 组合能力:内部可能调用多个MCP工具和API
- 预定义流程:有标准的执行步骤
- 用户友好:隐藏技术细节,提供简单接口
代码示例
# Skill定义:代码审查助手
class CodeReviewSkill:
"""
这是一个完整的"套餐":包含了审查代码需要的所有步骤
"""
def __init__(self, mcp_client):
self.mcp = mcp_client # 使用MCP获取代码文件
async def execute(self, pull_request_url: str) -> str:
"""用户只需要提供PR链接,剩下的自动完成"""
# 步骤1:使用MCP获取代码差异
code_diff = await self.mcp.call_tool(
"github",
"get_pr_diff",
{"url": pull_request_url}
)
# 步骤2:使用API分析代码质量
quality_report = await self.analyze_code_quality(code_diff)
# 步骤3:使用MCP检查测试覆盖率
coverage = await self.mcp.call_tool(
"testing",
"get_coverage",
{"pr": pull_request_url}
)
# 步骤4:生成综合报告
report = self.generate_report(quality_report, coverage)
# 步骤5:使用API发布评论
await self.post_review_comment(pull_request_url, report)
return "代码审查完成!已发布详细报告到PR"
# ... 其他辅助方法
# 用户使用:极其简单
skill = CodeReviewSkill(mcp_client)
result = await skill.execute("https://github.com/owner/repo/pull/123")
# generated by AI
适用场景
- 高级工作流:如"生成周报"、“部署应用”、“数据分析”
- 领域专业化:集成特定领域的最佳实践
- 简化复杂任务:把多步骤操作封装成一个命令
- 团队协作:共享标准化的工作流程
三者对比:什么时候用什么?
| 维度 | API | MCP | Skills |
|---|---|---|---|
| 比喻 | 点菜服务 | 食材供应 | 预制套餐 |
| 调用者 | 人类开发者 | AI模型 | 最终用户 |
| 灵活性 | 低(固定功能) | 高(AI自主组合) | 中(预定义流程) |
| 复杂度 | 简单 | 中等 | 高(封装复杂度) |
| 标准化 | 各自为政 | 统一协议 | 跨工具组合 |
| 典型场景 | 支付、发邮件 | 文件访问、搜索 | 代码审查、写报告 |
实际应用示例
假设你要构建一个"智能客服系统":
# 1. API层:基础服务
def send_email(to: str, subject: str, body: str):
"""发送邮件的API - 单一、明确的功能"""
pass
def query_database(sql: str):
"""数据库查询API - 传统的数据访问"""
pass
# 2. MCP层:为AI提供能力
mcp_server.register_tool(
name="search_knowledge_base",
description="搜索公司知识库",
handler=search_kb_handler
)
mcp_server.register_tool(
name="get_customer_history",
description="获取客户历史记录",
handler=get_history_handler
)
# 3. Skill层:完整的客服流程
class CustomerSupportSkill:
async def handle_inquiry(self, customer_message: str):
# 步骤1:理解问题(AI能力)
intent = await ai.analyze_intent(customer_message)
# 步骤2:通过MCP搜索知识库
knowledge = await mcp.call_tool(
"search_knowledge_base",
{"query": intent.keywords}
)
# 步骤3:通过MCP获取客户历史
history = await mcp.call_tool(
"get_customer_history",
{"customer_id": customer_message.customer_id}
)
# 步骤4:生成回复(AI能力)
response = await ai.generate_response(
intent, knowledge, history
)
# 步骤5:如需升级,通过API发送通知
if intent.requires_escalation:
send_email(
to="support@company.com",
subject="Customer Escalation",
body=response
)
return response
# generated by AI
技术趋势:从API到智能编排
传统模式(API时代)
开发者 → 手写代码 → 调用API → 处理响应
人类决定调用什么、何时调用、如何组合。
AI Agent模式(MCP + Skills时代)
用户 → 自然语言指令 → AI Agent → 自动选择MCP工具 → 执行Skill流程
AI决定使用什么能力、如何组合、动态调整策略。
关键洞察
- API是基础设施:就像水电煤,提供基本服务
- MCP是AI的手和眼:让模型能感知和操作外部世界
- Skills是专家经验:把最佳实践固化成可复用的流程
总结:选择正确的工具
需要明确、高性能的服务:用API
- 示例:支付、发短信、数据库CRUD
要让AI访问动态数据或工具:用MCP
- 示例:文件系统、搜索引擎、实时数据
要封装复杂工作流供用户直接使用:用Skills
- 示例:代码审查、生成报告、自动化测试
在现代AI应用中,这三者往往是组合使用的:
- Skills调用MCP获取上下文
- MCP服务器内部调用API完成具体任务
- API提供底层的可靠服务
就像餐厅既需要稳定的菜单(API),也需要新鲜的食材(MCP),还要有招牌套餐(Skills)来吸引顾客一样,优秀的AI应用架构需要三者的有机结合。
理解这三个概念的区别,能帮助你在构建AI应用时做出更好的架构决策,选择最适合场景的技术方案。
你的项目中是如何使用这三种技术的?欢迎在评论区分享你的经验!