API、MCP和Skills:三个概念的本质区别

用餐厅的故事,理解AI时代的三种交互模式

目录:

当我们谈论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

适用场景

  • 高级工作流:如"生成周报"、“部署应用”、“数据分析”
  • 领域专业化:集成特定领域的最佳实践
  • 简化复杂任务:把多步骤操作封装成一个命令
  • 团队协作:共享标准化的工作流程

三者对比:什么时候用什么?

维度APIMCPSkills
比喻点菜服务食材供应预制套餐
调用者人类开发者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决定使用什么能力、如何组合、动态调整策略。

关键洞察

  1. API是基础设施:就像水电煤,提供基本服务
  2. MCP是AI的手和眼:让模型能感知和操作外部世界
  3. Skills是专家经验:把最佳实践固化成可复用的流程

总结:选择正确的工具

  • 需要明确、高性能的服务:用API

    • 示例:支付、发短信、数据库CRUD
  • 要让AI访问动态数据或工具:用MCP

    • 示例:文件系统、搜索引擎、实时数据
  • 要封装复杂工作流供用户直接使用:用Skills

    • 示例:代码审查、生成报告、自动化测试

在现代AI应用中,这三者往往是组合使用的:

  • Skills调用MCP获取上下文
  • MCP服务器内部调用API完成具体任务
  • API提供底层的可靠服务

就像餐厅既需要稳定的菜单(API),也需要新鲜的食材(MCP),还要有招牌套餐(Skills)来吸引顾客一样,优秀的AI应用架构需要三者的有机结合。

理解这三个概念的区别,能帮助你在构建AI应用时做出更好的架构决策,选择最适合场景的技术方案。


你的项目中是如何使用这三种技术的?欢迎在评论区分享你的经验!


See also