Skill、Tool、MCP、Memory 与 Harness划分方法(详解 AI 应用的职责边界与选型依据)

在 AI Agent 工程里反复出现的”Skill、Tool、MCP、Memory、Harness”五个词,分的其实是五层职责:连接、能力、流程、状态、运行环境。判断一段能力该沉淀成哪一类,要回到”它解决的是哪一层的问题”——这一层决定了它的运行时形态、维护成本与替换难度。下面从职责边界、典型形态与判断依据三方面展开。

一、五个概念的职责定位

概念 职责层 核心问题 典型载体
MCP 连接层 怎么把模型稳定地接到外部系统 JSON-RPC 2.0 协议,本地 stdio 或远端 HTTP
Tool 动作层 模型能直接执行的最小动作是什么 单一函数,有明确入参 / 出参
Skill 流程层 如何把多步任务稳定跑成 SOP 以 SKILL.md 为核心的指令与检查清单
Memory 状态层 跨会话 / 跨调用如何保留上下文 长期记忆文件、向量库、KV 缓存
Harness 运行环境层 谁来调度 Agent 与它的工具链 评测脚本、CI 流水线、Agent 运行时

MCP 解决”连哪里”;Tool 解决”做什么”;Skill 解决”怎么稳定做好”;Memory 解决”上一次走到了哪一步”;Harness 解决”由谁来跑、怎么评测”。任何一类都不该越界做另一类的事。

二、各自的运行时形态

2.1 MCP:连接层

MCP 由 Anthropic 在 2024 年 11 月开源,是一套基于 JSON-RPC 2.0 的客户端 / 服务器协议,本地通过 stdio 通信,远端通过 HTTP 通信。模型侧通过 tools/list 发现能力,通过 tools/call 触发动作。一次接入即可被多个 MCP 兼容 Agent 共用,避免每个 AI 应用重复造轮子。

2.2 Tool:动作层

Tool 是 Function Calling 层面的最小单元:一个入参、一个动作、一个结构化返回。它有强确定性,能写测试用例,能用 mock 验证,但不带任何业务规则与流程编排。示例包括 read_file、create_jira_ticket、run_bash_command,这些都只描述”我能做什么”,不回答”该按什么顺序、达到什么质量标准”。

2.3 Skill:流程层

Skill 以 SKILL.md 为核心,本质是一组被 LLM 解释执行的指令、资源与检查项。加载策略通常采用”渐进式披露”:启动时只读取元数据(YAML frontmatter,几十个 token 量级),触发后再加载完整正文,执行时按需展开 references/、scripts/ 等子资源。这意味着 20 个 Skill 的元数据合计只占约 1,000 token 的常驻上下文。

2.4 Memory:状态层

Memory 解决”会话结束后上下文丢失”的问题,常见形态包括项目级 CLAUDE.md、长期记忆文件、向量检索、KV 缓存。Tool 与 Skill 都不应承担跨会话状态,否则会让函数变成”带副作用的巨无霸”。

2.5 Harness:运行环境层

Harness 是包裹 Agent 的”脚手架”,包括评测脚本、CI 流水线、Plan Mode、子 Agent 调度、hook 触发等。它决定 Agent 怎么被启动、被监控、被重试、被评分,是工程化与可重复性的关键。

三、哪些任务沉淀成 Skill,哪些做 Tool

判断依据通常落在三点:是否多步、是否需要领域知识、是否需要可重复的”完成定义”。

  1. 多步 + 领域规则 + 完成定义齐全:典型场景如”按公司模板生成 PRD””把会议纪要拆成行动项”——应做 Skill;
  2. 单步原子动作 + 高频复用:典型如”搜索网页””发送 Slack 消息””读取文件”——应做 Tool;
  3. 需要连外部服务但 Agent 自带 Tool 不够稳定:如 GitHub、数据库、Notion 等需要鉴权与协议适配的——优先评估 MCP,协议能带来”一次接入、处处可用”的复用收益;
  4. 需要跨会话保留偏好、历史、未完成任务:沉淀为 Memory,写入项目级配置文件或长期记忆文件;
  5. 需要在 CI / 评测流水线里反复跑、记分、回放:交给 Harness 调度,而不是塞进 Skill 或 Tool。

四、典型决策流程

把候选能力放进选型流程,能避免”什么都写成 Skill”的反模式:

  1. 先问”它是不是一个最小动作”。是 → Tool;不是 → 进入下一步;
  2. 再问”它要不要连外部系统”。要 → 评估 MCP 协议是否已有对应服务器;不要 → 进入下一步;
  3. 再问”它是不是一组步骤 + 检查项 + 模板”。是 → Skill;不是 → 进入下一步;
  4. 再问”它是否需要跨会话记忆”。是 → Memory;不是 → 评估是否属于 Harness 调度范畴;
  5. 如果以上都不是,再考虑”是不是单纯的 Agent 调度 / 评测需求”——这种情况归 Harness。

五、组合关系与常见误用

实际生产中它们经常组合出现:一个 Skill 内部可能通过 MCP 调外部 Tool;一个 Agent 同时挂载多个 Skill 与一个 Memory 模块;Harness 把整套链路包成 CI 任务跑回归。容易踩的坑是把 Skill 写成”伪 Tool”(只有动作、没有检查),或把 Tool 写成”巨型 Skill”(附带业务规则与流程,测试时无法 mock)。前者会导致质量不可控,后者会导致维护成本陡增。

下面是一段 MCP 与 Tool 在 JSON-RPC 2.0 上的标准交互片段,可直接被任何 MCP 兼容 Agent 复用:

// 1. 客户端列出可用工具
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list",
  "params": {}
}

// 2. 服务端返回工具描述
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "tools": [
      {
        "name": "read_file",
        "description": "读取文件内容",
        "inputSchema": {
          "type": "object",
          "properties": { "path": { "type": "string" } },
          "required": ["path"]
        }
      }
    ]
  }
}

// 3. 客户端发起调用
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": { "name": "read_file", "arguments": { "path": "src/auth.ts" } }
}

这一交互模式让 MCP 把连接层标准化、把 Tool 限定在最小动作、把 Skill 留给 LLM 解释的流程层,三层各司其职。

常见问题(FAQ)

Q1:MCP 出现后,Tool 还有必要自己写吗?

仍要;MCP 解决连接标准,自定义 Tool 解决”我独有的原子动作”。

Q2:什么情况下不要做 Skill?

只要是单步、确定性强、无领域规则的,都不应做 Skill。

Q3:Memory 和 Skill 的边界在哪里?

Skill 装”方法”,Memory 装”上下文与历史”;前者按需加载,后者常驻或按会话留存。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 qiqicto@qq.com 举报,一经查实,本站将立刻删除。
赞 (0)
其AI的头像其AI普通用户

相关推荐

返回顶部