1. 概念定义
| 概念 | 定义 | 作用与特点 |
|---|---|---|
| Agent | 智能代理,基于大语言模型构建的自主系统,能够感知环境、进行推理、规划并执行任务 | 核心主体,具备目标导向的行为能力,可以调用工具、记忆上下文、进行多步推理 |
| Skills | 技能,Agent 具备的特定能力或功能模块,通常是预定义的函数或方法集合 | 封装了 Agent 可以执行的具体操作,如代码生成、数据分析、文本处理等 |
| Plugins | 插件,扩展 Agent 功能的外部组件,提供额外的工具和服务接口 | 增强 Agent 的能力边界,允许接入第三方服务、API 或自定义功能模块 |
| MCP (Model Context Protocol) | 模型上下文协议,标准化的协议规范,用于连接 AI 应用与数据源/工具 | 提供统一的接口标准,使 Agent 能够安全、标准化地访问外部资源和工具 |
| Hooks | 钩子,在 Agent 执行流程中的特定节点触发的回调机制 | 允许在关键生命周期节点(如任务开始前、完成后、出错时)插入自定义逻辑 |
| CLI (Command Line Interface) | 工具调用入口, 直接执行本地命令 | agent的 调用外部能力, 像在本地执行一个命令 |
关系说明
- Agent 是核心主体,通过组合 Skills 和 Plugins 来扩展能力
- MCP 为 Agent 提供标准化的工具和资源访问协议
- Hooks 允许在 Agent 运行过程中注入自定义行为
- CLI 是一个工具调用入口,允许 Agent 调用外部能力,如本地命令 调用等
2. 架构关系图
整体架构图
graph TB
subgraph External_Access_Layer[外部访问层]
CLI[CLI 命令行工具]
MCP[MCP 协议]
end
subgraph Core[核心层]
Agent[Agent 智能代理]
end
subgraph Capability_Layer[能力层]
Skills[Skills 技能模块]
Plugins[Plugins 插件系统]
end
subgraph Lifecycle[生命周期]
Hooks[Hooks 钩子]
end
Agent -->|内置能力| Skills
Agent -->|扩展能力| Plugins
Agent -->|调用外部命令| CLI
Agent -->|标准化访问| MCP
Agent -->|触发回调| Hooks
CLI -->|执行命令| System[系统/外部工具]
MCP -->|访问资源| Resources[数据源/工具服务]
Skills -->|返回结果| Agent
Plugins -->|提供服务| Agent
System -->|执行结果| Agent
Resources -->|返回数据| Agent
Hooks -->|注入逻辑| Agent
style Agent fill:#e1f5ff,stroke:#0066cc,stroke-width:3px
style Skills fill:#e8f5e9,stroke:#4caf50
style Plugins fill:#f3e5f5,stroke:#9c27b0
style CLI fill:#fff4e6,stroke:#ff9900
style MCP fill:#fce4ec,stroke:#e91e63
style Hooks fill:#fff9c4,stroke:#fbc02d
数据流向
用户 → CLI → Agent → [Skills/Plugins/MCP] → 执行任务 → 返回结果
↓
Hooks (在各阶段触发)
各职能职责说明
- Agent 为中心
Agent 是整个系统的核心,负责协调和调度所有组件
接收来自 用户指令,进行任务规划和执行
- 能力扩展层
Skills: Agent 内置的核心能力,直接由 Agent 调用
Plugins: 外部扩展组件,为 Agent 提供额外的功能和服务
两者共同构成 Agent 的能力边界
- 标准化接口层
MCP: 提供标准化的协议,使 Agent 能够统一访问各种数据源和工具
解耦了 Agent 与具体资源的实现细节
- 生命周期管理
Hooks: 在 Agent 执行的关键节点插入自定义逻辑
支持前置处理、后置处理、错误处理等场景
- cli(命令行工具调用)
agent调用外部能力的方式之一, 直接执行本地命令
优势: 直接执行 shell 命令、脚本或程序
适用: 单机/本地环境, 成熟稳定的工具
示例:
git status,ffmpeg
MCP和CLI的对比
核心差异对比表
| 对比维度 | CLI (命令行接口) | MCP (模型上下文协议) |
|---|---|---|
| 本质 | 系统命令执行接口 | 标准化资源访问协议 |
| 通信方式 | 调用系统 shell/终端命令 | 通过 JSON-RPC 等标准协议通信 |
| 安全性 | 较低,直接执行命令,存在注入风险 | 较高,有权限控制和沙箱机制 |
| 标准化程度 | 低,依赖具体系统和命令 | 高,统一的协议规范 |
| 跨平台性 | 差,命令因操作系统而异 | 好,协议无关底层系统 |
| 使用场景 | 系统管理、脚本执行、本地工具调用 | 数据源访问、API 集成、服务调用 |
| 典型示例 | git status, ls -la, npm install | 文件系统 MCP、数据库 MCP、GitHub MCP |
| 返回值格式 | 文本输出,需解析 | 结构化数据(JSON) |
| 错误处理 | 通过退出码和 stderr | 标准化的错误响应 |
| 配置复杂度 | 简单,直接写命令 | 需要配置 MCP Server |
| 扩展性 | 依赖系统可用命令 | 可自定义 MCP Server |
| 隔离性 | 无,直接访问系统资源 | 有,可通过沙箱限制访问范围 |
| 状态管理 | 无状态,每次独立执行 | 可支持会话和上下文保持 |
| 适用对象 | 任何可执行程序和脚本 | 实现了 MCP 协议的服务 |
协同使用
在实际应用中,CLI 和 MCP 可以互补使用:
graph LR
Agent[Agent] -->|系统级操作| CLI[CLI]
Agent -->|资源访问| MCP[MCP]
CLI -->|执行| Commands[系统命令]
MCP -->|访问| Services[标准化服务]
Commands -->|结果| Agent
Services -->|数据| Agent
style Agent fill:#e1f5ff,stroke:#0066cc,stroke-width:2px
style CLI fill:#fff4e6,stroke:#ff9900
style MCP fill:#fce4ec,stroke:#e91e63
https://smithery.ai/ 网站提供的mcp, 就是很好的cli和mcp协作的案例, 它把各个厂商提供的mcp包装一层,并提供cli命令对外使用. 例如:
smithery tool call my-github-server list_branches '{"owner": "octocat", "repo": "Hello-World"}'含义: 查询"hello-world"仓库的分支列表"