agent,skill,mcp,请讲解,各个的功能和之间的关系
在 AI 智能体(Agent)体系里,Agent 是大脑、Skill 是执行能力、MCP 是标准化连接协议,三者分层协作、缺一不可。下面用清晰定义、功能、关系、实战流程帮你彻底理解。
一、核心概念与功能

  1. Agent(智能体)
    定位:系统的决策大脑,负责理解目标、拆解任务、规划路径、调度资源、评估结果。核心功能:
    目标驱动:接收用户目标,自主拆解为子任务
    多步推理:用 ReAct/CoT 等方式做规划
    工具调度:决定何时、调用哪个 Skill
    记忆管理:维护上下文与长期记忆
    自我反思:根据结果调整策略
    比喻:项目总指挥 / 项目经理
  2. Skill(技能)
    定位:原子执行单元,封装可复用的具体能力,是 Agent 的 “手脚 / 工具箱”。核心功能:
    单一职责:一个 Skill 只做一件事(查天气、发邮件、生成图表、调用 API)
    可组合:多个 Skill 可串联成复杂工作流
    标准化输入输出:明确参数与返回格式
    可扩展:新增 Skill 不影响 Agent 核心逻辑
    分类:
    原生技能:代码实现(计算、文件操作)
    语义技能:基于 Prompt(摘要、情感分析)
    工具技能:封装外部服务(数据库、天气接口)
    比喻:专业执行专员 / 工具包
  3. MCP(Model Context Protocol,模型上下文协议)
    定位:标准化通信与调度层,解决 Agent 与 Skill / 外部服务的 “连接兼容” 问题。核心功能:
    统一接口:为所有 Skill / 工具提供标准调用规范,消除框架 / 语言差异
    能力发现:让 Agent 自动发现可用 Skill
    权限与安全:控制调用范围、做鉴权
    上下文传递:在 Agent 与 Skill 间传递会话状态
    跨环境兼容:本地 / 云端、不同语言互操作
    关键澄清:MCP 不是工具 / 能力,而是协议规范(类似 USB 标准、插座标准)
    比喻:万能插座 / 国际通用语言 / 项目经理的调度系统
    二、三者关系(一句话 + 架构图)
    一句话总结
    Agent 决定做什么、Skill 提供怎么做、MCP 保证能安全、标准地连接与调用。
    分层架构(从上到下)
    Agent 层:决策中枢(大脑)
    Skill 层:执行能力库(手脚)
    MCP 层:标准化连接协议(通信总线)
    外部世界:API、数据库、文件、服务
    核心关系
    Agent 依赖 Skill:没有 Skill,Agent 只有思考、没有行动能力
    Skill 依赖 MCP:没有 MCP,Skill 无法被不同 Agent / 框架统一调用
    MCP 服务 Agent+Skill:MCP 是中间件,不产生业务能力,只做连接与调度
    三、实战流程(以 “生成月度销售报表” 为例)
    用户给 Agent 目标:生成 3 月销售报表并邮件发送
    Agent 决策:
    拆解任务:查数据库 → 生成图表 → 写报告 → 发邮件
    确定需要:query_db、gen_chart、write_report、send_email 四个 Skill
    Agent 通过 MCP 调度:
    向 MCP 发起调用请求,指定 Skill 与参数
    MCP 做权限校验、参数校验、路由到对应 Skill
    Skill 执行:
    query_db:从数据库拉取 3 月数据
    gen_chart:用数据生成折线 / 柱状图
    write_report:整合数据 + 图表生成 PDF
    send_email:把 PDF 发给指定邮箱
    MCP 回传结果:将每个 Skill 的执行结果返回给 Agent
    Agent 评估:检查是否成功,完成后告知用户
    四、关键区别对比表
    表格
    维度 Agent Skill MCP
    核心角色 决策大脑 执行单元 连接协议
    解决问题 做什么、怎么规划 具体怎么做 怎么安全、标准地连接
    抽象层级 最高(业务逻辑) 中层(能力封装) 底层(通信规范)
    自主能力 强(自主推理、规划) 无(被动调用) 无(纯调度)
    形态 系统 / 框架 函数 / 模块 / 服务 协议规范 + SDK
    用户可见 直接交互 间接可见 通常不可见
    五、一句话记忆口诀
    Agent 定方向,Skill 干实事,MCP 通天下。
    需要我用一个可直接运行的极简代码示例(Python),演示 Agent 如何通过 MCP 调用一个 Skill 吗?

========================================

下面用极简、可直接看懂的 Python 代码,模拟:Agent(大脑) → 通过 MCP 协议 → 调用 Skill(执行能力)
不搞复杂框架,只保留核心逻辑,一眼看懂三者关系。

  1. 先定义三者角色
    Agent:做决策、规划、决定调用哪个 Skill
    Skill:具体干活的函数(查天气、发消息、计算等)
    MCP:统一调用协议 / 中间层,负责路由、校验、转发
  2. 完整可运行代码
    直接复制到 Python 即可跑:
    python
    运行

    ==============================================

    1. Skill:具体能力(执行单元)

    ==============================================

    def skill_weather(city: str) -> str:
    """技能:查询天气"""
    return f"【{city}】天气:晴,25℃"

def skill_calculate(a: int, b: int, op: str) -> int:

"""技能:简单计算"""
if op == "+": return a + b
if op == "-": return a - b
if op == "*": return a * b
if op == "/": return a // b
return 0

def skill_send_message(user: str, content: str) -> str:

"""技能:发送消息"""
return f"已向【{user}】发送消息:{content}"

==============================================

2. MCP:模型上下文协议(统一调度层)

==============================================

class MCP:

def __init__(self):
    # 注册所有可用技能
    self.skills = {
        "weather": skill_weather,
        "calculate": skill_calculate,
        "send_message": skill_send_message
    }

def call_skill(self, skill_name: str, **kwargs):
    """MCP 统一调用入口:校验 → 路由 → 执行 → 返回结果"""
    if skill_name not in self.skills:
        return f"错误:技能 {skill_name} 不存在"

    # 真实 MCP 还会做:权限、参数校验、日志、上下文传递
    print(f"[MCP] 调度技能: {skill_name}, 参数: {kwargs}")
    skill_func = self.skills[skill_name]
    return skill_func(**kwargs)

==============================================

3. Agent:智能体(大脑,做决策)

==============================================

class Agent:

def __init__(self):
    self.mcp = MCP()  # Agent 持有 MCP 连接

def run_task(self, user_intent: str):
    """Agent 根据用户意图,自主决策调用 Skill"""
    print(f"\n=== Agent 收到任务: {user_intent} ===")

    # 真实 Agent 会用 LLM 做意图识别 + 任务拆解
    if "天气" in user_intent:
        return self.mcp.call_skill("weather", city="北京")

    elif "计算" in user_intent:
        return self.mcp.call_skill("calculate", a=10, b=20, op="+")

    elif "发消息" in user_intent:
        return self.mcp.call_skill("send_message", user="小明", content="开会啦")

    else:
        return "Agent:我不知道该调用什么技能"

==============================================

4. 测试运行

==============================================

if name == "__main__":

agent = Agent()

print(agent.run_task("查北京天气"))
print(agent.run_task("帮我计算 10+20"))
print(agent.run_task("给小明发消息"))
  1. 运行结果(清晰展示流程)
    plaintext
    === Agent 收到任务: 查北京天气 ===
    [MCP] 调度技能: weather, 参数: {'city': '北京'}
    【北京】天气:晴,25℃

=== Agent 收到任务: 帮我计算 10+20 ===
[MCP] 调度技能: calculate, 参数: {'a': 10, 'b': 20, 'op': '+'}
30

=== Agent 收到任务: 给小明发消息 ===
[MCP] 调度技能: send_message, 参数: {'user': '小明', 'content': '开会啦'}
已向【小明】发送消息:开会啦

  1. 三者关系用代码再讲一遍
    Agent
    只做决策:判断用户要什么
    不直接干活,只通过 MCP 发指令
    Skill
    只做执行
    一个 Skill 一个功能
    不知道谁调用它,只管干活
    MCP
    是中间协议层
    统一接口、注册技能、路由调用、参数校验
    让 Agent 不用关心 Skill 内部实现
  2. 真实 AI Agent 系统里长这样
    Agent 用 GPT/o1 做任务规划
    Agent 把 “调用哪个技能 + 参数” 发给 MCP 服务
    MCP 负责:
    技能发现
    权限控制
    跨语言 / 跨服务调用
    上下文传递
    MCP 调用真实 Skill(API、函数、插件、外部服务)
    结果原路返回 Agent
    如果你愿意,我可以再给你写一个更贴近工业级的版本:
    带 JSON 协议格式
    带上下文记忆
    带技能描述(让 LLM 自动选择技能)
    你想要简单版还是接近真实 Agent 框架版?

(doubao)

标签: none