Prompt、Agent、Function Call、Skill、MCP五者辨析

作者:热心市民鹿先生2026.11.04 07:39浏览量:0

简介:本文面向开发者与技术决策者,系统辨析Prompt、Function Call、Agent、Skill、MCP五个易混淆概念的定位与边界。文章从分层视角梳理其递进关系,围绕定义、职责、调用方式、适用场景与组合模式展开对比,并给出结构化表格、示意性代码与条件化选型建议,帮助读者建立清晰的心智模型,避免在方案设计与技术选型中误用概念。

agent-function-call-skill-mcp-">Prompt、Agent、Function Call、Skill、MCP 五者辨析:从“说话”到“办事”的分层逻辑

一、对比背景:为什么这五个概念总被混为一谈

在大模型应用开发的早期,开发者接触到的第一个概念往往是 Prompt——把需求写成一段话,发给模型,拿到回答。随着应用复杂度上升,新的概念接连出现:模型需要调用外部工具,于是有了 Function Call;需要多步推理与自主决策,于是有了 Agent;需要把可复用的能力封装起来,于是有了 Skill;需要让这些能力以标准化方式被任意客户端接入,于是有了 MCP。

问题在于,这五个词在日常交流中经常被互换使用。有人说“写个 Agent 调用接口”,也有人说“用 MCP 接一个 Skill”,表述模糊导致设计讨论失焦。它们并不是同一层级的并列概念,而是从“表达意图”到“标准化接入”的分层体系。本文的目标是把这五层拆开,明确每一层解决什么问题、不解决什么问题,以及它们如何组合。

需要说明的是,本文讨论的是通用技术概念,不绑定任何特定厂商的实现细节。不同平台对这些概念的命名和接口形态可能存在差异,但分层逻辑是共通的。

二、对象定义:五个概念各自的职责边界

Prompt(提示词):输入给模型的文本指令,包含系统角色设定、任务描述、上下文与约束。它解决的是“如何把人类意图准确翻译成模型可理解的语言”的问题。Prompt 是最基础、也是唯一必需的一层——没有 Prompt,其他任何机制都无从触发。

Function Call(函数调用):一种让模型输出结构化调用意图的机制。模型不直接执行代码,而是输出“我要调用哪个函数、参数是什么”的结构化结果,由宿主程序解析后实际执行,再把结果回传给模型。它解决的是“模型如何动手干活”的问题,把自然语言输出转化为可编程的调用指令。

Agent(智能体):在 Prompt 与工具调用之上,加入目标分解、步骤规划、状态维护与循环决策的执行框架。它解决的是“多步任务如何自主推进”的问题。Agent 的本质是一个控制循环:观察—思考—行动—再观察,直到目标达成或触发终止条件。

Skill(技能):对某一类可复用能力的封装单元,通常包含能力描述、输入输出约定与执行逻辑。它解决的是“能力如何被复用和编排”的问题。Skill 更像是给 Agent 或调用方提供的能力目录,强调可发现、可组合。

MCP(模型上下文协议):一种标准化的能力接入协议,规定客户端与能力提供方之间的通信方式、能力描述格式与调用约定。它解决的是“能力如何以统一方式被任意客户端接入”的问题,可以类比为通用接口标准,而非具体能力本身。

一句话概括这五层:Prompt 是“说人话”,Function Call 是“动手干活”,Agent 是“思考规划”,Skill 是“能力封装”,MCP 是“标准接口”。

三、相同点分析:它们共享的技术逻辑

尽管层级不同,这五个概念在目标上高度一致:都是为了让模型输出更可靠、更贴近真实业务需求。具体共性体现在三方面。

其一,都以模型为核心。Prompt 直接作用于模型输入;Function Call 依赖模型的结构化输出能力;Agent、Skill、MCP 最终都要通过模型来决策或触发。脱离模型,这些机制都失去意义。

其二,都强调“约束”。Prompt 用指令约束输出风格与格式;Function Call 用 schema 约束参数结构;Agent 用规划策略约束执行路径;Skill 用接口约定约束能力边界;MCP 用协议约束通信格式。约束越明确,系统行为越可预期。

其三,都服务于可组合性。Prompt 可以模板化复用,Function Call 可以注册多个工具,Agent 可以编排多个步骤,Skill 可以组合成能力集合,MCP 可以让同一能力被多个客户端复用。组合能力决定了系统的上限。

四、核心差异分析:从五个维度拆开看

技术架构维度。Prompt 是纯输入层,无额外组件依赖;Function Call 需要宿主程序实现函数注册、参数解析与结果回传,属于“模型 + 运行时”的协作结构;Agent 在 Function Call 之上再加一层控制循环与状态管理,组件更多、链路更长;Skill 是能力封装层,通常以描述文件加执行体的形式存在;MCP 是协议层,需要客户端与服务端两端实现,属于基础设施性质。

接入方式维度。Prompt 接入成本最低,改一段文本即可;Function Call 需要定义 schema、实现执行逻辑、处理异常分支,改造量中等;Agent 需要设计规划策略、终止条件与兜底逻辑,接入成本较高;Skill 需要遵循封装规范,成本取决于规范复杂度;MCP 需要两端适配协议,短期成本最高,但长期复用收益也最大。

功能能力维度。Prompt 只能影响生成内容,不能触达外部系统;Function Call 能触达外部系统,但单次调用、无自主规划;Agent 具备多步规划与自主决策能力,但可控性下降、调试难度上升;Skill 提供的是能力粒度上的复用,本身不含决策逻辑;MCP 提供的是接入标准化,本身不增强能力,只降低集成成本。

运维与安全维度。Prompt 的风险主要在注入与越权指令,需要通过输入校验与角色隔离来约束;Function Call 需要关注函数权限、参数校验与调用审计,防止模型被诱导调用高危函数;Agent 的运维复杂度最高,需要监控循环次数、 token 消耗、失败重试与死循环风险;Skill 需要版本管理与依赖治理;MCP 需要关注通信鉴权、能力暴露范围与服务端可用性。

成本结构维度。Prompt 成本主要是人工编写与调优;Function Call 成本主要在开发与测试;Agent 成本集中在规划逻辑设计与线上稳定性保障,且推理轮次增加会推高调用成本;Skill 成本在封装与维护;MCP 成本在协议适配与两端运维,但跨项目复用时边际成本递减。

五、对比表格:关键差异一表看清

维度 Prompt Function Call Agent Skill MCP
层级定位 输入表达层 工具调用层 执行控制层 能力封装层 协议接入层
解决的核心问题 意图如何表达 如何触达外部系统 多步任务如何推进 能力如何复用 能力如何标准化接入
是否必需 必需 按需 按需 按需 按需
接入成本 低 中 高 中 较高(短期)
可控性 高 较高 较低 高 高
典型风险 提示注入 越权调用 死循环、成本失控 版本漂移 鉴权与暴露面
复用范围 单次会话 单应用内 单应用内 跨流程复用 跨客户端复用

六、典型场景选择:什么情况下用哪一层

如果任务只是问答、改写、摘要、分类,Prompt 足够,引入更复杂的机制只会增加成本。这是最常见也最容易被低估的判断——很多团队在只需要 Prompt 的场景上过早引入 Agent,结果调试成本远超收益。

如果任务需要查询数据库、调用内部服务、读取文件,Function Call 是合适的起点。它把“模型说”变成“模型请求执行”,但保持单步、可审计的调用路径,适合边界清晰的操作型任务。

如果任务需要多步推理、动态选择工具、根据中间结果调整策略,才需要考虑 Agent。典型如需要反复检索、比对、修正的任务。此时要同步设计好终止条件、最大步数限制与人工兜底通道。

如果多个流程需要复用同一批能力,应把这些能力封装为 Skill,形成能力目录,避免每个流程重复实现。Skill 的价值在复用,不在单次调用。

如果能力需要被多个客户端、多种语言、多个团队以一致方式接入,才值得投入 MCP 这类标准化协议。它的收益来自规模,单项目接入往往不划算。

七、选型建议:条件化判断而非绝对推荐

选型的核心不是“哪个更先进”,而是“当前问题的复杂度是否匹配机制的复杂度”。可以遵循一条递进原则:先用 Prompt 验证可行性,确认需要触达外部系统时引入 Function Call,确认需要多步自主推进时再引入 Agent,确认存在跨流程复用需求时再封装 Skill,确认存在跨客户端标准化接入需求时再考虑 MCP。

同时要关注团队能力匹配度。运维能力有限的团队,应优先选择链路更短、状态更少的方案,因为 Agent 与协议层的排障成本显著更高。对稳定性要求极高的生产系统,应优先保证调用路径可审计、可回放,避免引入难以复现的自主决策路径。

八、迁移与使用注意事项

从 Prompt 向 Function Call 迁移时,重点在 schema 设计与参数校验,需防止模型输出不符合约定结构,也要防范被诱导调用高危函数。从 Function Call 向 Agent 迁移时,重点在终止条件与成本控制,需要设置最大步数、超时与失败重试上限,并保留人工介入通道。从单应用能力向 Skill 封装迁移时,重点在接口稳定性与版本管理,避免上游变更导致下游批量失效。向 MCP 这类协议层迁移时,重点在鉴权、能力暴露范围与服务端可用性,需评估两端适配工作量与回滚方案。

示意性代码可以帮助理解分层关系,以下为伪代码,仅表达结构,不代表任何具体接口:

  1. // 第一层:Prompt
  2. prompt = system("你是资深工程师") + user("解释这个概念")
  3. // 第二层:Function Call
  4. tools = [ {name:"queryOrder", schema:{orderId:"string"}} ]
  5. result = model(prompt, tools) // 模型返回结构化调用意图
  6. if result.isCall: data = execute(result.name, result.args)
  7. // 第三层:Agent
  8. while not done and step < MAX_STEP:
  9. plan = model(prompt, tools, history)
  10. act(plan); history.append(observe())
  11. // 第四层:Skill 与第五层:MCP
  12. skill = {name:"queryOrder", input:"orderId", exec: handler}
  13. mcpServer.expose(skill) // 以标准协议对外暴露能力

九、总结

这五个概念不是竞争关系,而是分层协作关系:Prompt 负责表达,Function Call 负责触达,Agent 负责推进,Skill 负责复用,MCP 负责标准化接入。混淆往往源于把它们放在同一层比较。判断选型时,先问“当前问题卡在哪一层”,再决定引入哪一层机制;能用低层解决的,不要轻易上高层。理解分层,比记住定义更重要。