核心要点
Function Calling:最底层机制,模型按给定 schema 输出一次结构化的工具调用,解决"怎么调"
Skill(如 Anthropic Agent Skills):把完成某类任务的流程+脚本+资源打包成可复用能力包,按需加载(渐进式披露),解决"怎么把一套做事方法封装复用"
三者分层且可组合:Skill 内部可调用 MCP 工具,工具调用底层用 Function Calling
标准回答
这三者常被混为一谈,但处在不同抽象层,可以按"怎么调 → 怎么接 → 怎么封装方法"来理清。
Function Calling(最底层机制)
模型提供方暴露的基础能力:你给模型一组函数的 JSON schema(名称、参数、描述),模型在需要时输出一次结构化的调用意图(调哪个函数、传什么参数),由你的代码去执行并把结果喂回。它本身只规定"模型如何表达一次工具调用",不管工具从哪来、怎么集成。回答的是"怎么调"。
MCP(标准化接入协议)
如果每个应用都各自实现工具接入,N 个应用对接 M 个工具就是 N×M 的重复劳动。MCP 定义一套标准接口,把工具(Tools)、数据资源(Resources)、提示模板(Prompts)以统一方式暴露给任意支持 MCP 的 Host。工具写一次,多客户端复用,把 N×M 降为 N+M。它回答的是"怎么标准化地接入工具/数据"。
Skill(可复用的能力包)
以 Anthropic Agent Skills 为代表,Skill 把"完成某一类任务所需的东西"打成一个包:一段说明做事流程的指引、可执行的脚本、模板与参考资料等。关键在于渐进式披露(progressive disclosure)——平时只有 Skill 的简短元信息进入上下文,Agent 判断当前任务用得上时,才把这个 Skill 的详细内容和资源加载进来。这样既能装很多 Skill,又不会一次性撑爆上下文。它回答的是"怎么把一套做事的方法封装起来反复复用"。
三者的层次与组合
- 层次:Function Calling 是"怎么调",MCP 是"怎么标准化接入工具",Skill 是"怎么把一套做事方法封装复用"。
- 组合:一个 Skill 在执行时,内部可以去调用 MCP 接入的工具;而无论 MCP 工具还是普通工具,被模型实际触发时底层都走 Function Calling。三者不是替代关系,而是从机制到协议到方法论的叠加。
常见误区
⚠️ 常见踩坑
别把三者当成互斥的"三选一"——它们不在同一层:Skill 封装方法、MCP 标准化接工具、Function Calling 是底层调用机制,真实 Agent 里往往三者同时存在并彼此嵌套。
追问
追问 1:为什么 Skill 要强调"渐进式披露"?不全部塞进 system prompt 不行吗?
因为上下文窗口和注意力都是稀缺资源。如果把所有 Skill 的完整指引、脚本说明、参考资料一股脑塞进 system prompt,会带来三个问题:一是 token 成本和延迟飙升;二是无关内容稀释了模型对当前任务的注意力,反而降低表现;三是 Skill 一多就根本塞不下。
渐进式披露的做法是分层加载:默认只让每个 Skill 的名字和简短描述(元信息)留在上下文里,模型据此判断"这个任务要不要用某个 Skill";只有命中时,才进一步把该 Skill 的详细内容、脚本、资源加载进来。这样可以挂载大量 Skill 而保持上下文精简,按需付费、按需占用注意力。
追问 2:一个 Skill 和一个 MCP Server 在工程上怎么分工?会不会功能重叠?
它们解决不同的事,配合用最顺。
MCP Server 提供"原子能力"——一组标准化、可被任意 Host 调用的工具与数据接口,比如"查数据库""读文件""发邮件"。它关心的是接入和复用单个能力。
Skill 提供"做某类事的方法论"——把流程、判断、模板、脚本组织起来,告诉 Agent 面对这类任务该按什么步骤、用哪些能力去完成,比如"生成一份合规的财报 PPT"这套流程。
所以一个 Skill 在执行其流程时,完全可以去调用若干 MCP 工具来取数、写文件。前者是"怎么把事做对的剧本",后者是"剧本里用到的道具"。不太会真正重叠:如果发现 Skill 里只是包了单个工具调用,那它本该是个工具/MCP 能力;如果 MCP 里塞进了大段多步流程指引,那部分其实属于 Skill。
追问 3:如果只用 Function Calling 也能让模型调工具,那 MCP 和 Skill 是不是多余的?
不多余,它们解决的是 Function Calling 不解决的问题。
Function Calling 只规定"模型如何表达一次调用",但它没回答:工具从哪来、怎么跨应用复用、怎么统一认证与发现——这些正是 MCP 要标准化的,否则每个应用都要重复造一套接入层(N×M 碎片化)。
它也没回答:面对一个多步骤、有套路的复杂任务,模型该按什么流程、调用哪些能力、参考什么模板——这是 Skill 用可复用、可按需加载的能力包来解决的,否则这些"方法"只能反复写进 prompt 或散落在代码里。
可以这么理解:Function Calling 是发动机,MCP 是统一油路接口,Skill 是驾驶手册。只有发动机也能动,但要规模化、可维护地造一辆车,三者都需要。
🔗 相似问题
同一考点的不同问法,面试官可能换着问,一起刷更稳
没找到想看的面试题?把你想看的告诉我们 →
延伸学习
按主题分类的相关资源,便于系统复习