写到这里,Tool、MCP、Skills、Harness 已经绕不开了。它们经常出现在同一场讨论里,也最容易被说成一回事。

我最近一直参与一个企业 Agent 平台的开发和架构梳理。这次我没有从概念文章里抄四段定义,而是顺着当前代码,把一次任务从用户输入、Skill 装载、MCP 连接、Tool 执行,一路追到权限确认和会话持久化。

真正该问的不是“这四个词有什么区别”,而是:一次企业任务里,每件事到底该由谁负责?

我的答案是:

  • Tool 定义一个可执行动作。
  • MCP 负责把外部能力接进来。
  • Skills 规定一类任务应该怎么做。
  • Harness 负责让整条执行链可控、可停、可恢复、可追踪。

企业 Agent 不是在四者里选一个,而是让它们各守自己的责任。

Tool:先把一个动作定义清楚

在很多 Demo 里,Tool 看起来就是一个函数:写个名字,接上 API,模型能调起来,工作就结束了。

但这个平台的 Tool 注册表里,除了名称和描述,还有参数 Schema、执行方式、安全模式下是否可用,以及风险等级和风险类别。

例如,配置校验和会话列表属于只读工具;浏览器操作会影响外部网页,需要确认;宿主连接器可能改变运行进程,因此会进入更高的风险层级。

这意味着,生产级 Tool 不只是“一个可以被模型调用的函数”,而是一份完整的动作契约:

  • 这个动作叫什么。
  • 它接收哪些参数,返回什么结果。
  • 它在哪里执行,有没有副作用。
  • 哪种模式下可以调用。
  • 调用前是否需要人确认。

为什么这些信息必须跟着 Tool 走?因为权限不能靠名字猜,风险也不能等动作发生后再判断。

如果一个“查询客户”工具还会顺手更新访问时间,它就不是纯查询。如果一个“生成报告”工具还会上传文件,它也不只是本地生成。

所以我现在定义 Tool,会刻意把它压到最小:一个 Tool,只承担一个可以独立描述、独立授权、独立审计的动作。

把查询、判断、写入和通知塞进一个巨型 Tool,不是能力强,而是把四种风险藏进了同一个黑盒。

MCP:解决能力怎么接进来

Tool 定义动作,MCP 解决外部系统里的动作怎样用统一方式提供给 Agent。

这个平台的 MCP 客户端同时支持 Streamable HTTP、SSE 和本地 stdio。连接建立后,它会先读取对方暴露的工具列表做健康检查;真正调用时,再按工具名和参数发出请求。

MCP 的价值,是把连接、工具发现、参数传递和结果返回收进一套协议。但 MCP 和 Tool 不是替代关系。

MCP Server 最终仍会向 Agent 暴露 Tool。Tool 是 Agent 看到的动作,MCP 是这些动作进入运行环境的一种连接方式。本地能力可以是 Tool,远端 MCP Server 暴露的能力也会表现为 Tool。

平台没有让每一种 Agent Runtime 各自直连所有 Source,而是用 MCP 连接池统一管理连接。对运行在外部进程里的 Agent Runtime,再通过受治理的 HTTP MCP 代理暴露工具。

这个边界很重要。底下无论换成内置 Runtime,还是 Codex、Claude Code 这类外部 ACP Runtime,外部能力都要从同一个受控入口进入。

连接之外,项目还会过滤不该下发给本地 stdio MCP 的敏感环境变量,检查连接健康状态,限制普通工具调用时间,并在 Session 结束时关闭连接。

这些细节说明,MCP 进入生产后,重点很快会从“能不能连上”变成“连接是否可控”。它只负责把能力接进来,不负责决定能力该怎么用。

Skills:把工作方法交给 Agent

当任务从“做一个动作”变成“为了一个业务目标,按什么顺序使用哪些能力”时,就轮到 Skill 了。

我这里用复数 Skills,是因为系统里通常会装很多个 Skill;落到某一次任务上,激活的是其中一个或少数几个。

平台里的 Skill 是带元数据的 SKILL.md 指令包。它可以声明名称、描述、触发线索、允许使用的工具,以及完成任务所需的 Source。

运行时会从系统级、配置级、插件级、工作区级和项目级多个层级装载 Skills。同名时,离当前项目更近的规则优先。系统级 Skill 提供通用方法,工作区 Skill 适配团队,项目 Skill 再覆盖当前业务。

当一次任务匹配到 Skill,运行时会先要求模型读取对应的 SKILL.md。如果模型第一次试图跳过规则、直接调用其它工具,前置检查会把它拦住。Skill 声明了所需 Source,会话管理器还会在回合开始前检查并启用可用的 Source。

但前置读取不是安全隔离。代码为了避免 Agent 卡死,保留了有限次数后的降级放行。它能把正确方法推到执行前面,却不能代替真正的权限判断。

这恰好划清了边界:Skill 管方法,不管运行状态;可以收窄选择,不能代替安全机制。

例如“生成一份企业数据分析报告”,Skill 可以规定先读数据源规则,再调用查询 Tool 获取证据,完成校验和脱敏,最后生成报告。但“执行到哪一步”“是否已经写入”“能不能继续”,必须交给 Harness 记录。

Harness:让一次执行真正跑得住

Harness 最容易被说虚,因为很多项目里根本没有一个类叫 Harness

这个平台也是这样。它的 Harness 不是单独一个模块,而是由会话管理器、统一 Agent Backend、权限与前置检查、会话存储、MCP 连接池和事件处理共同组成的运行环境。

用户消息进入以后,会话管理器会先把消息落盘,再向界面确认已经接收。随后它恢复或创建 Agent Runtime,装载 Source,建立 MCP 连接,设置权限模式,再把消息交给统一 Backend。

不同模型和 SDK 在底层差异很大,但统一 Backend 对上层提供同一套契约:开始对话、流式返回事件、调用工具、请求权限、处理中断、切换 Source、恢复 Session,以及结束后释放资源。

工具执行前,还要经过统一检查:当前权限是否允许、Source 是否启用、使用前是否读过说明、Skill 是否已经读取,以及 Ask 模式下是否需要用户确认。

执行过程中,Tool 的开始、结果、错误和完成事件会被统一处理并写入会话。用户中途补一句话,Harness 还要决定是导入当前回合,还是排队等待。认证过期、连接变化、Runtime 重启和会话恢复,也都在这层处理。

所以我理解的 Harness,不是让模型“能跑”的壳,而是让一次执行有生命周期、有边界、有状态、有恢复路径。

如果只有一个循环让模型不断调工具,最多算 Agent Loop。真正的 Harness 还得回答:谁拥有会话,谁做权限判断,工具失败怎么收场,事件写到哪里,中断以后从哪继续。

一个真实案例:7 个检查项,为什么最后只剩 1 张图

为了把四层关系讲具体,我用平台里一次真实的生产批次异常分析验收来拆。

这不是客户生产事故,也不是为了文章编出的演示流程。它来自一份已经完成验证的问题复盘。下面只保留经过代码、会话证据和测试确认的执行过程。

用户的要求看起来只有一句话:判断一个生产批次是否异常,并给出完整报告。

但系统真正要完成的工作包括:

  • 查询目标批次及前后三个可比批次的质量指标。
  • 查询补充质量规则和上下文证据。
  • 找出与异常相关的检查项。
  • 为每个检查项查询参数分布、上下限和统计量。
  • 用确定性规则判断长尾、双峰和正态性。
  • 编译质量趋势图和每个检查项的分布图。
  • 把全部证据组装成一份可验证的 HTML 报告。

这个任务很适合观察 Tool、MCP、Skills、Harness 怎样协作,因为任何一层做错,用户拿到的都可能是一份“看起来完成、实际缺证据”的报告。

第一处问题:Skill 把 7 个检查项缩成了 1 个

这项“批次异常分析 Skill”声明了所需的“业务分析 Source”,也规定了注册资产的执行顺序。候选检查项发现完成后,每个检查项都应该独立查询分布数据,并各自生成一张分布图。

现场证据里,候选查询返回了 7 个唯一检查项。实际执行却只保留了第一个:分布查询只调用一次,报告输入里也只有这一个检查项。

这时,查询 Tool 没坏,MCP 连接也没断。真正出错的是任务方法。

进一步排查发现,运行环境里存在一份高优先级的旧配置级 Skill。平台按系统、配置、插件、工作区和项目逐层覆盖,越靠近当前业务的版本优先。基础版本已经更新,但旧配置仍然覆盖它,所以 Agent 继续执行旧方法。

最后补上的约束很直接:如果候选查询返回 N 个检查项,那么后续范围、分布查询、图表工件和报告区块都必须是 N 个。少任何一个,就补齐或失败关闭,不能静默选择“代表项”。

这就是 Skills 层的价值。它不负责查询数据,却必须定义“怎样才算把任务做完整”。

第二处问题:图都生成了,报告工具却调用错了

修正检查项数量后,7 张分布图都生成了,流程仍然没有交付 HTML。

以下工具名均为脱敏后的示意别名。会话证据显示,Agent 两次尝试调用:

mcp__runtime__report.generatemcp__runtime__report_generate

实际注册的工具是:

mcp__analysis__report.generate

只差一个 namespace,责任却完全不同。runtime 代表平台自身的运行能力,analysis 才是这条分析链的外部 Source。Tool 名称表达动作,MCP namespace 则说明能力来自哪里、由哪条连接和哪组凭据负责。

这还不是唯一的问题。7 个检查项的原始证据超过 16 万行,旧流程要求模型把这些内容重新塞进报告工具参数。两次调用形成的 JSON 都在 20 KB 以上,并在对象结束前被截断,最终稳定得到“输入 JSON 不完整”。

这次修复没有继续扩大模型上下文,而是缩短模型边界:Agent 只传报告结论、业务范围和可信资源引用;接入服务在同一个 MCP Session 内,根据引用补齐查询元数据和分页数据,再交给报告生成器验证。

模型负责选择和编排动作,底层服务负责搬运大数据。边界拆开以后,Tool 参数才重新变得可验证。

第三处问题:长任务里的身份和状态不能漂移

完整的 7 项分析超过了接入服务原来的短时鉴权缓存。报告生成阶段刷新了凭据,新凭据无法读取旧凭据创建的查询和图表资源,最终返回“资源作用域不一致”。

单看每次调用,它们都合法;放进同一条任务链,资源身份却断了。

最终方案是在每个 MCP Client Session 第一次取得运行凭据后固定使用,并给每个 Session 建立独立的引用索引。Session 关闭时,凭据上下文和引用索引一起释放。这样,查询、图表和报告共享同一条受控生命周期,新的会话仍然可以正常刷新凭据。

这部分不该塞进 Skill,也不能让每个 Tool 自己维护。它属于 Harness:接住跨多次调用的身份、状态、超时和资源回收。

还有一道必须保留的失败边界

一次恢复流程中,Agent 把存在数据质量问题的质量结论写成了 normal。报告渲染器根据证据计算出的状态是 incomplete,因此拒绝生成报告。

这个拒绝是正确的。修复方向也不是删掉校验,而是让接入服务返回明确的期望结论状态,允许 Agent 基于原证据纠正一次。其它错误仍然立即失败,不能靠反复重试撞结果。

这条边界很像企业系统里的数据库约束:模型可以提出结论,但最终工件必须服从确定性证据。

复盘记录的最终验证结果是:7 个检查项全部完成独立查询,7 张分布图都是有效 PNG,完整 HTML 报告成功交付;对应 Skill 契约测试全部通过。

这组数字重要的地方,不是“Agent 一次跑了多少工具”,而是系统终于能证明:发现了 7 项,执行了 7 项,也交付了 7 项。

四者怎样跑成一条真实链路

回到这次生产批次分析,修复后的执行链可以压成六步:

  1. Harness 保存用户消息,恢复 Session,并匹配“批次异常分析 Skill”。
  2. Skill 声明“业务分析 Source”、证据步骤、N 项完整性约束和最终交付格式。
  3. MCP 连接池建立业务分析连接,把查询、图表编译和报告生成暴露为带 namespace 的 Tool。
  4. Agent 按依赖层批量执行注册查询,再为每个检查项编译分布图。
  5. 报告 Tool 只接收结论、范围和可信引用,接入服务在同一 MCP Session 内补齐大体量证据并执行确定性校验。
  6. Harness 记录工具事件、维持会话身份,并在超时、中断或 Source 激活后处理恢复与资源释放。

企业 Agent 中 Harness、Skills、MCP 与 Tool 的职责和执行关系

Harness 管整个回合,Skills 管任务方法,MCP 管能力接入,Tool 管具体动作。

这不是说 Harness 直接调用 Skill、Skill 再直接调用 MCP,而是说明一次任务里的方法、连接、动作和运行状态分别由谁负责。

我现在遵守的四条搭配原则

第一,一个 Tool 只做一个可审计动作。

查询、判断、写入和通知要分开。动作拆开以后,权限、重试、审计和人工确认才有落点。

第二,MCP 只解决接入,不代替业务治理。

MCP Server 能连上,不代表它暴露的所有 Tool 都该进入当前任务。先选 Source,再收窄 Tool,最后才谈模型怎么调用。

第三,Skill 写方法,不写隐藏状态。

Skill 可以规定步骤、证据和交付格式,但执行位置、写入结果和恢复点必须放在 Harness 可持久化的状态里。

第四,Harness 统一管权限、状态、恢复和观测。

这些能力不能散落在每个 Tool 里,也不能寄希望于 Skill 每次都提醒模型。它们必须成为所有模型、Source 和 Tool 都绕不过去的共同边界。

分层的价值,不是让架构图更漂亮,而是出问题时知道该改哪里:参数错了,改 Tool;外部能力接不进来,查 MCP;任务步骤跑偏,改 Skill;权限、恢复和留痕不可靠,补 Harness。

最后

Tool、MCP、Skills、Harness 分别回答四个问题:做什么动作、怎么接入能力、按什么方法完成任务、谁来保证整个过程跑得住。

我从这次真实代码梳理和问题复盘中得到的最大提醒是:越靠近生产,越不能让一层替另一层兜底。

四层各守责任,企业 Agent 才有可能从“会做事”,走到“做事可控”。

我是企业系统开发负责人,也在一线参与企业 Agent 平台建设和工程化实践。这个系列只写企业 Agent 从 Demo 走向生产时,真正会遇到的工程问题。

你现在的 Agent 项目里,权限、状态和重试分别放在哪一层?如果答案是“散在 Tool 和 Prompt 里”,那可能就是下一轮重构的起点。

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

在这里插入图片描述

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐