夜雨聆风学习资料网

ARTICLE · 1047107

AI Native 时代,工具的边界到底在哪?

AI Native 时代,工具的边界到底在哪?

图源自Every平台

本文是一次针对MCP、Skill、 Workflow 和Agent 分工边界的复盘。

目录:· 确定性是最可靠的标尺;· 四类工具各自的本分;· 有错位,也有判断方法;· 边界清晰,本质是契约清晰。全文8000 字,阅读时间 14min。
上一篇,我提到产品经理必须对Harness的连接层管到底AI Native时代,产品经理到底在管什么?文章发出去,后台问得最多的是工具:MCP、Skill、Workflow、Agent,这老几样到底该怎么选,怎么分。
奇怪,明明各大智能体平台都纷纷开放MCP服务市场、Skill市场,货架上鼓鼓囊囊。可一旦你作为Agent平台方,真和各方合作起来,就没那么顺了。
问的人这么多,说明这事还没有共识。索性把这半年吵过的架踩过的坑,一次性记下来。
先交代背景。我在统建一个面向商户和内部业务服务的智能体应用,每天接洽不同的产品合作方是常态。按理说,平台方把基建和合作规范定好,安心等合作方接入即可。但实操过程中,有人提供 MCP Server,有人坚持用Workflow,有人给一套 Skill,有人直接交付一个 Agent。
有啥问题吗?
东西都对。错在有人以为自己在给A,实际起到了 B 的效果;该给 C 的时候,硬塞了 A。磨合的代价全落在集成这一端,我吃力还不讨好。
最近一次的狗血现场是:一个团队兴冲冲交付了一个Skill,指望通过我的平台定期产出一份固定格式的经营报表,字段固定、格式固定,每次都一模一样。我翻了下那份Skill,洋洋洒洒几千字(有AI 辅助后字数多得惊人),硬性约束十几条,字段一个个列清楚,格式描述到标点。文末还特地加红标粗了一句话:一定要保证每次输出一致!
……不能。
拜托,你加感叹号和emoji也没用。Skill 保证不了任何的一致性。它能告诉模型该往哪想,但管不住模型必须怎么答。
那天沟通到最后,两边都有点疲惫。如果你也在建设智能体套件,这种鸡同鸭讲的局面大概率不陌生。
毕竟公司内每个团队都在面临AI转型带来的压力,意愿都很强,但水平参差不齐,这都能理解。上述场景不是个例。但我最近想明白了一件事:也许不该急着定做成什么,你先把这件事的确定性画出来,可能会更有效。
一、确定性是最可靠的标尺
坦白说,前期每来一个合作方,我都要提上吨吨桶,边吵架边补水。吵到最后发现,问题不在技术,在尺度。
各说各的,是因为手里没有同一把尺子。我说该做成MCP,他说做成 Skill 的Context更干净还省token;我说这流程该固定编排,他说交给 Agent 更灵活。争来争去,本质上都是围绕“确定性”打转。把所有能力摆到一条轴上,从最确定排到最不确定,如下图所示。
图:不同工具的确定性度量轴
从左往右看,最左边是机器说了算,最右边是模型说了算。左端的输入和输出由代码保证;右端的每一步都要靠模型临场判断,路径不固定,结果不可复现。
所以判断一个能力该做成什么,本质上就是回答一个问题:这段逻辑,到底有多确定?
奇怪,为什么这事放在以前不成问题?
以前软件里只有确定性。架构设计的核心是功能怎么组织:谁负责什么,模块怎么通信,数据怎么存。分层、接口、契约,这套东西很成熟。
成熟的前提是:输出是确定的。同样的输入,同样的路径,结果永远一样。
模型把这个前提打碎了。同一个问题,换个上下文、换个温度,答案就能不一样。于是AI产品要多回答一层问题:怎么管理不确定性、怎么定义好的输出、怎么在模型出错时保护用户和业务。
换句话说,AI系统里住着两种性格截然不同的组件:一种必须稳,一种天生飘。边界的重要性,就是从这里冒出来的。很多人坚信:只要Skill 写得够细、约束写得够多,模型就会稳定输出我要的结果。我见过太多团队抱着这个信念写Skill。字段、格式、示例、反面案例全塞进去,以为覆盖得足够全,就能把模型框住。
框不住的。约束能把命中率抬上去,压不到 100%。你今天调好了,明天它可能就差一个字。而差的那个字,在一份固定格式的报表里就是故障。
你想要的不是一份更细致的Skill,是一个不经过模型自由发挥的确定动作。你不是在调教模型,你是在跟概率论谈判。这局从一开始就没有赢面。
这里有个很好用的信号:一个Skill 里塞了多少确定性脚本和逻辑。塞得越多,越说明它越界了。Skill 承担的是“教怎么做”,那些“必须这么做”的硬逻辑,本该待在 MCP 或 Workflow 里。
比塞脚本更隐蔽的是,把一整条业务流程写进一个巨型Skill,从取数、分析、成文,到校验、发送,全部塞进一份文档。看起来一步到位,实际上是让模型独自扛一条本该被编排的流水线。流程越长,出错点越多,而模型并不确定自己走到第几步了。
二、四类工具各自的本分

顺着这条轴,从最确定的一头往回看。

1)MCP:只接确定性,不碰判断力

MCP 做的事,是把外部世界翻译成模型能调用的动作。

数据库、API、文件系统、内部服务,原本对模型都是黑盒。MCP 在中间架一层,把每个具体动作标准化:叫什么名字,需要什么参数,返回什么结构。模型看到的是一份工具清单,点一下调用,拿到结果。

举个例子,一个查订单的MCP tool,输入订单号,输出订单详情。代码怎么写它就怎么跑。同样的输入给同样的输出,不随心情变化,不随上下文漂移。这是MCP 的立身之本:它生产的不是智能,是确定性。

再举个例子,报表里的“本月营收”,正确做法是 MCP tool 去数据库查一次,返回一个数字。而如果你是写进 prompt 让模型结合上下文估算,它会给你一个像模像样的数字,但每一份可能都不一样。在财务报表里,这种差异就是事故。

那怎么判断一件事该不该交给MCP?

看它是不是只有对错一种标准。有唯一正确答案的事,都不该交给模型。

MCP 也不是越多越好,它也有自己的纪律。

个是粒度不宜过细,过细的工具会污染上下文。比如,你把“打开文件”“读取第一行”“关闭文件”拆成三个工具,模型要三次调用、三轮推理才能完成一件事。好的工具应该是一个完整的动作单元,语义完整,一步到位。

另一个是,需要大量上下文判断的活不适合交给MCP。那属于模型,不属于工具。比如"帮我判断这份合同有没有风险",这不是一个确定动作,是一段推理。它属于模型,不属于工具。硬做成 MCP,等于把判断塞进代码,既写不出来,也维护不动。

MCP 的边界很清楚:只接确定性,不碰判断力。

2)Workflow:把不确定装进确定的外壳
有一类场景跟前面不一样。
流程本身是确定的,就那么几步,顺序固定,分支有限。但其中几步需要模型来干:写一段文案,做一次归纳,判断一个意图。
确定的骨架,叠加不确定的肌肉。
这种任务的最优解,既不是 Agent,也不是纯粹的 Skill,而是 Workflow。它只做一件事:把不确定的部分,装进确定的外壳里。
以周报生成为例。先由 MCP tool 拉取本周数据,确定;再由模型分析数据、提炼重点,这步交给 Skill 提供方法;然后模型生成初稿;接着用代码校验格式与关键字段,确定;最后由 MCP tool 发送,确定。
五步里三步确定、两步交给模型。整个流程可复现、可观测。哪一步会出问题,一目了然;哪一步慢了错了,日志里都看得见。
换成 Agent 做同一件事,它会自己决定先干嘛后干嘛。可能忘了校验,可能重复拉数据,可能某次觉得“直接发送更高效”。灵活性是有了,可你根本不需要那部分灵活。
你为一个稳定的流程,支付了不确定性的代价。
通常来说,Workflow 有两种形态:
一种是代码编排。用一段程序把步骤串起来,每一步是一个函数调用,模型调用只是其中一个函数。控制力最强、调试最方便,代价是改流程要改代码。
另一种是声明式编排。用配置或可视化画布描述流程,模型调用作为节点嵌进去。改动灵活,适合流程变化频繁的场景,代价是复杂分支下表达力受限。
多数业务场景,代码编排就够了,也最可靠。
但不得不承认,Workflow 不性感。它不像 Agent 那样有自主智能的光环,也不像 Skill 那样容易交付。可它解决的,恰恰是业务里最常见的一类需求:流程清晰,中间需要一点模型能力,这类需求占绝大多数。
真正需要 Agent 的场景反而是少数。造 Agent 的兴奋常常盖过了对需求的冷静判断。
3)Skill:能抬高下限,但不保证上限

Skill 做的事,是把一类任务该怎么做的方法教给模型。

它封装的是方法:知识、步骤、判断标准、注意事项,可能还带一点辅助脚本。模型遇到对应任务时,把这些方法读进来,改变的是自己处理这件事的思路。

好的Skill 像一本靠谱的操作手册,让模型面对一个陌生领域时,不至于瞎猜。

但注意,手册改变的是倾向,不是结果。

一个人读了菜谱,未必做得出那道菜。模型读了Skill,未必就输出你要的东西,因为最后一步生成依然落在概率里。

因此Skill 常常被两头误解:一头是前面说的,拿Skill去要100%确定性,这是高估;另一头是觉得它可有可无,反正模型够聪明了,这是低估。

Skill 真正的价值,是把一类反复出现的判断,固化成可复用的方法。没有它,模型每遇到一次同类任务都要重新摸索;有了它,经验被沉淀下来,输出质量的下限被抬高了。

那一个Skill要写到什么程度才算好?

市面上教怎么写 Skill 的文章很多:三段式结构,渐进式披露,先 description,再 SKILL.md,再按需加载 reference。道理都懂,可实操里我还是会收到大量调试过不了关的 Skill,输出效果和延迟都不乐观,Agent 调起来纯属浪费 token。

于是在调试Skill前我会先组织各方评估Skill 的好坏,结果很快就变成了拉锯战。翻来覆去,Skill 的版本号都朝两位数去了,却没人说清好的标准在哪。

经过多次实践后,我慢慢找到感觉。

我的经验是,一个好的 Skill,缺了四样就不算完整:明确的输入、明确的步骤、明确的输出标准,还有最容易被忽略的那一样——明确的终止条件。一个不错的 Skill 末尾往往有这么一句话:"如果连续失败三次,必须停止尝试,回滚并报告。"没有这个停止条件,Agent 很容易陷进无意义的重试循环。

你不能交付一个没有刹车的引擎。

上面说的,都是一份Skill够格的基准线。换个视角,还有另一个问题:Skill的粒度怎么把握?一个业务域,到底该切成几份?

经常有团队一口气打包了几十份Skill过来,很吓人,我没半点欣喜。逐一看下来发现,很多Skill彼此共用同一个数据源、共用同一套后处理模板、经常被放在一起查,为什么不合并?只有它自己有专属的复杂逻辑,才值得拆出来。

当然,我未必了解其他团队的业务逻辑,那怎么知道交付的Skill粒度对不对?拿真实的问法跑一遍。八成的问题,一个 Skill 就能答完,粒度就是对的;如果经常得先调 A、再调 B、最后合起来才够,说明这两个本来就是一回事,就该合并。

最后再澄清下关系:Skill 是 MCP 的消费者,不是它的替代品。

正确的分层是,MCP 提供原子能力,Skill 注入方法,Agent 负责决策与调用。

这层关系,很多团队搞反了。他们本该让 Agent 调 MCP 拿结果,却把这段逻辑写进 Skill 自己实现,结果既没拿到 MCP 的确定性,也没沉淀 Skill 的方法。

顺着往下推,还能得到一个反直觉的结论:很多 Skill 之所以存在,只是因为 MCP 没写好。一个 tool 的名字、说明、参数足够清楚,模型拿到就知道怎么调,这一层本可以不要。

因此,动手写 Skill 之前,先质疑一下你交付的 MCP。凡是需要反复向模型解释的规则,都应该下沉成 MCP 的参数或枚举。

反复解释,也许正因为它本来就不该靠解释。

4)Agent:只在决策不确定时才上

Agent 是这条轴上最右的一格,也是唯一全程由模型主导的一层。它自己决定下一步做什么、调哪个工具、要不要停下来问。

它存在的理由只有一个:任务的步骤无法预先枚举,下一步取决于上一步的动态产出,你需要一个能处理意外、临场改主意的执行者。

这种场景真实存在,但没有想象中那么多。代价是:路径不固定,结果不可复现,出错也难定位到哪一步。你得到的不是智能,是不确定性。

因此,能用工作流编排的,别用 Agent 硬扛;能写成函数的,就别用 prompt 硬求。

实际合作中,我发现比“用不用 Agent”更容易走偏的,是拿形态给 Agent 设门槛。有些团队把“只接 Skill,不接 Agent”写成了规矩。问为什么,才发现他们的顾虑有一半是对的:Agent 默认给你的是一段语义结果,你拿不到它结构化的接口契约,就没法在代码里接着编排下一步。

问题是,他们把"我要可编排的构件"这件事,翻译成了"我不接 Agent 形态"这条规矩。 可编排性从来不是形态给的,是接口给的。把顾虑升级成一道形态门槛、一刀切写进规矩,那就是一种无脑的形态信仰了。

被拒的一方也无奈,只能换一种活法:有的在外面套一层MCP 协议,把自己包装成一个工具;有的把自己蒸馏成一堆 Skill。形式上都合规了,内核一点没变。它还是那个会临场发挥、路径飘忽的Agent,只是这次学会了穿着确定性的外衣进门。

你以为风险没了,其实只是把风险藏进了看不见的地方。一个明牌的 Agent,你至少知道它飘;一个伪装成工具混进来的 Agent,你连它飘在哪一步都察觉不到。

三、有错位,也有判断方法

半年下来,我遇到的越界,九成逃不出这几种。

它们看着不一样,本质都是同一个:把该确定的事,交给了模型。区别只在交给谁:提供 Skill、写进 prompt、留给模型临场发挥,还是包成一个 Agent。

第一种,用 Skill 干 MCP 的活。

这是我在合作中最高频遇到的情形。

特征很好认:需求里只要出现"必须""确保""稳定输出""固定格式""每次都一样",你要的就不是 Skill。

这类需求只有两种处理方式:做成 MCP tool,或者做成 Workflow 里的一个确定性节点。让代码兜底,别让自然语言兜底。

我仔细推敲过,为什么大家总往 Skill 上凑?因为它门槛最低?

的确,你写几段文本就能交付,不用定义接口,不用处理错误分支,不用跟后端打交道。看起来是捷径,爽歪歪。

但代价是后置的。

一个确定性逻辑的正确实现,可能是两天的接口开发;用 Skill 糊上去,只要两小时。但它会在往后每一次运行里制造不确定的成本:偶发的格式错误、需要人工复核的输出、说不清谁该负责的故障。开发省下的时间,会在运维阶段加倍还回去。

毕竟Skill 的执行者是概率模型,凡是要求 100% 成立的东西写进 Skill,都是把不变量交给了骰子。

那如果我把想要的数据设为接口必填,是不是就稳了?

不够。接口必填只是静态声明——"这些字段应该必填",它本身不执行任何东西。只有 MCP Server 的运行时校验才能保证动态执行,不合规就拒。

具体来说,校验分两头:

  • 入参校验管调用方,参数不对就拒,别往下打外部 API;

  • 出参校验管你自己,外部数据回来后、返回给 Agent 前,保证该有的都有内容。

没有这层运行时校验,"必填"就只是纸面约定,别人依然可以无视。

但也别因此就判 Skill 死刑。

没有 Skill,模型不知道怎么调工具、参数老填错、该追问时瞎编。它作用在决策空间,事前告诉模型该怎么做,降低犯错概率;MCP Server 的校验作用在正确性边界,事后卡住坏结果,封住错误后果。

一个管事前,一个管事后,缺一不可。

第二种,用Prompt干鉴权的活。

前面说的是浪费成本。同样的错位,还有一个更危险的版本。

上周有个团队反馈,他们提供的一批 MCP 工具没做鉴权。理由听着很正当:明明都是对内服务的工具,为什么校验员工业务权限这件事,要 MCP 层单独做,而不是在 Agent 层统一支持?

乍一听挺有道理。但仔细想,在 Agent 层你能怎么做?在 prompt 里约束?

这和在 Skill 里写"必须"是同一个错误——把必须确定的事,交给了一段可以被解释、也可以被绕过的自然语言。一段精心构造的输入,就能让它忘掉那条约束。用 prompt 做权限,等于把保险箱的钥匙挂在门上,再贴一张纸条:请勿拿走。

即使不被攻击,模型也容易产生幻觉。退一万步说,即使你侥幸过关,也过不了安全审计这一关。模型判断该用户能访问,所以放行了——这个答案在任何一家正经公司都过不了审计。

也就是说,安全边界必须在模型之外。MCP Server 侧必须做好认证鉴权、最小权限、危险操作白名单和二次确认。Agent 层能做的只有软约束,它承担不了安全职责。

对于MCP提供方来说同理,你别轻信 Agent 递过来的身份。它说用户是谁,不等于用户就是谁。权限校验要在你自己这一侧重新做一遍,而不是接过那张通行证就放行。

第三种,用模型干接口的活。

判断一个东西该谁管,你只需要多问一句:换个调用方来问,答案会不一样吗?
如果不会,那就是接口自己的属性,归 MCP,定得越紧越好。比如,订单算不算取消,时间算预订还是入住——换谁来问,答案都一样。
如果会,比如用户口中的"产量""大盘""周末",是这轮对话里长出来的说法,跟接口本身没关系,得把它翻译成参数,这个归 Skill。
拿数据查询举例。你只是想查一个订单来源,调对应的 MCP 就够了,不需要 Skill。但如果你要的是"活跃商家数",麻烦就来了。"活跃"这两个字本身是一个口径定义,它不属于取数动作,属于业务知识。
最常见的错误是,有人会顺手用Skill去糊,让模型每次现场把口径翻译成 SQL。它每次都翻得不一样。
正解是把"活跃"的定义写进 MCP 的参数说明(近 30 天有成交且未退款),最好直接固化成枚举值,让模型只能选,不能自己发挥。
所以别急着把"活跃商家数"写进 Skill。这个需求里的大部分,是 MCP 该补的课,不是 Skill 该接的活。
这种情况在垂类产品里频频发生。行业黑话多,取数口径也多,但二者并不是一回事。MCP 管从参数到可执行查询,Skill 管从用户query到参数。
再说缺参。追问该由谁兜底,是个老争的问题。
我的答案是,检测归机制,策略归 Skill。
"信息够不够"这件事,如果是确定性的,比如参数缺失、字段为空、时间范围没给,那就该由 MCP 或 Harness 直接检测出来,不指望模型自己发现。模型不会良心发现,它更倾向于硬着头皮编一个。
而发现缺了以后该怎么问、问几轮、问到什么程度就停,这是交互策略,写进 Skill。比如"缺少时间范围时,必须先追问,不许默认取本月"。
一个负责发现,一个负责开口。两者配合,追问才靠得住。

最后一种,用 Agent干流程的活。

有些团队本能地觉得 Agent 比工具高级,做 Agent 才算拿得出手。于是你会看到,一个三步能走完的确定任务,做成 Agent 之后可能走五步十步,还可能走岔。

比如"每天早上把昨天的经营数据整理成日报",这本来是定时任务加一个模板,跑一年都不会变;做成 Agent,它每天都要重新想一遍数据从哪取、该写几段、用什么口径。每一步都是一次模型调用,于是又慢又贵,每天长得还不一样。
你用一个说不清、测不了的黑箱,换掉了一段可以画在白板上的流程。
倘若你真要试 Agent 的能力,拿一个没有标准答案的开放任务去试;把已经有标准答案的事拿去做 Agent,试出来的只有账单。

你能画成流程图,就别做成 Agent。Agent 不是更高级的 Workflow,它只配处理一类问题:下一步得看上一步的结果才能定。除此之外,它只会让你多花几倍的钱买回一堆不确定。

几种错位讲完,你可能会问:具体到一个能力,我怎么知道该做成什么?按顺序问四个问题,如下图所示:

图:几种错位的应对方式

第一问,它需要确定性输出吗?唯一正确答案、固定格式、必须一致,只要沾上一样,答案就是 MCP tool,或者 Workflow 里的一个确定节点。

不是,进第二问:它需要模型的判断、生成或组织能力吗?不需要,那它就是个普通流程或代码,别把模型请进来。

需要,进第三问:它的步骤能提前画出来吗?顺序基本固定、分支有限,那就是 Workflow 搭骨架,里面填 Skill 和 MCP。

不能,进第四问:下一步是否取决于上一步的动态结果?是,才轮到 Agent。不是,一次模型调用就够了,不必为它搭一个 Agent。

大部分错位,在前两问就被拦下来了。

四、边界清晰,本质是契约清晰

回到开头那场鸡同鸭讲的谈判。

协作之所以疲惫,核心是因为边界不清,误让每个人都笃定自己才是对的。做Agent 的觉得工具太 low,做 Skill 的觉得 MCP 太死板,做 MCP 的觉得对方在给他添乱。大家都在讨论不同的东西,自然谈不拢。

上一篇我提过一个观点:产品经理的工作,从管界面变成了管契约。放到造工具这件事上,这句话就是全部答案。

契约不抽象,它长得很具体。比如所有Skill 的返回,必须共用同一套结构:成功长什么样、失败长什么样、错误码怎么定义,全平台一个样。少这一条,Agent 那边就得为每个 Skill 写一段 if-else 去兼容,成本会在半年后指数级地涨回来。

契约的价值,在于它让下游不必猜。

把这件事拆到每一层,验收标准也就跟着清晰了。
  • 负责确定能力的,就把它做成MCP。接口稳定,行为可预期,验收标准是接口对不对、稳不稳、异常处理全不全;

  • 负责方法的,就把它做成Skill。聚焦“怎么做”,别硬扛确定性。验收标准是它教的方法好不好、用上之后模型表现有没有提升、边界情况有没有覆盖;

  • 流程是确定的,就老实编排成Workflow,别为了显得智能而牺牲可靠性。验收标准是流程跑不跑得通、可不可观测、出错能不能定位到具体一步;

  • 只有真需要自主决策的地方,才动用Agent。

这么分下来,每个团队交付的东西都有自己的验收标准。MCP 看接口,Skill 看效果,Workflow 看流程。谁的成绩一目了然,不用再抢 Agent 那个头衔。

头衔不产生价值。一个稳定的接口,一套好用的方法,一条跑得通的流程,才产生价值。

如果你也是集成方,或是被集成的一方,你也有同样困扰的话,有个原则能省掉很多拉扯:先别急着定做成什么,先一起把这件事的确定性画出来。确定的部分在哪里,不确定的部分在哪里。边界画出来了,形态自然就有了。

“该做什么”的争论,换成“有多确定”的讨论,大部分分歧会自己消失。

该确定的,别交给概率;该判断的,别塞进代码。

工具可能会一直换,但这道题会一直在。

相关学习资料