一文读懂Prompt、MCP与Agent Skill的区别

作者:很菜不狗2026.11.03 20:54浏览量:0

简介:本文以分层视角系统讲清大模型应用中的五个高频概念——Prompt、Function Call、Agent、Agent Skill与MCP,分别说明它们是什么、处于哪一技术层级、解决什么问题、如何协同工作,并辅以示意代码与对比表格,帮助开发者与技术选型人员快速建立清晰的概念框架,避免混淆与误用。

先给结论:它们不是并列关系,而是层层递进

很多初次接触大模型应用开发的人,会被Prompt、Function Call、Agent、Agent Skill、MCP这几个词绕晕,甚至误以为它们是互相竞争的技术方案。其实它们根本不在同一个层面上,而是从“如何说话”到“如何动手”再到“如何连接世界”的一套递进体系。先给出各自的定位:

  • Prompt(提示词):输入给模型的文本指令,决定模型“听到什么、以什么身份回答”;
  • Function Call(函数/工具调用):让模型以结构化方式表达“我要调用某个函数”,决定模型“能动手”;
  • Agent(智能体):让模型具备目标理解、任务规划与多步执行的能力,决定模型“会自己干活”;
  • Agent Skill(智能体技能):把完成某类任务的专业流程与知识封装为可复用、可插拔的技能包,决定Agent“专业不专业”;
  • MCP(模型上下文协议):连接模型应用与外部工具、数据源的标准化开放协议,决定外部能力“接入起来有多容易”。

一句话概括它们的关系:你用Prompt向Agent表达目标,Agent加载Skill获得专业流程,通过MCP接入的外部工具(经由Function Call机制)执行动作,循环往复直到任务完成。下面逐层拆解。

第一层:Prompt——与模型沟通的“指令”

它是什么

Prompt是开发者或用户输入给大模型的自然语言或结构化文本,用于设定模型的角色、约束、任务与输出格式。它是所有人机交互的起点。可以类比为去餐厅点菜时你说的那句“来一份宫保鸡丁,微辣,不要花生”——模型就是听懂需求并上菜的服务员。

为什么重要

大模型本质上是基于上下文逐词预测的概率系统,它不会“读心”。你提供的上下文质量,直接决定输出质量。同一个模型,配上不同Prompt,效果可能天差地别。因此Prompt是投入产出比最高的优化环节。

它通常包含什么

实践中一条完整的Prompt一般由四部分组成:

  1. 系统级设定(System Prompt):规定模型的身份、语气与边界,例如“你是一位资深后端架构师,擅长用通俗语言解释技术概念”;
  2. 用户指令(User Prompt):具体的问题或任务描述;
  3. 上下文与参考材料:检索到的文档片段、历史对话记录等补充信息;
  4. 输出约束:格式要求、篇幅限制、必须包含或必须回避的内容。

示意代码(通用伪代码,展示提示词的组织方式):

  1. // 伪代码:组织一次带角色设定的对话请求
  2. List<Message> messages = List.of(
  3. new SystemMessage("你是一位资深Java架构师,擅长用通俗语言解释技术概念"),
  4. new UserMessage("请解释什么是线程安全,并给出一个错误示例")
  5. );
  6. String answer = chatModel.generate(messages);

进阶做法是提示词工程(Prompt Engineering):通过模板变量、少样本示例、思维链引导等技巧,把模糊需求转化为可稳定复现的指令模板。例如:

  1. // 伪代码:带变量与质量约束的提示词模板
  2. String template = """
  3. 你是一名资深Java工程师。请依据以下需求生成代码。
  4. 要求:包含必要注释、考虑异常处理、遵循单一职责原则。
  5. 需求:%s
  6. """;
  7. String prompt = template.formatted(requirement);

它的边界

Prompt只能改变模型“怎么说”,既不能让模型掌握训练数据之外的实时事实,也不能让模型真正执行动作。突破这两条边界,就需要下面两层能力。

第二层:Function Call——让模型“动手”的调用机制

它是什么

Function Call是让大模型以结构化JSON形式表达“我想调用某个函数、传入什么参数”的机制。需要特别注意:模型本身并不执行函数,它只输出调用意图,真正的执行发生在你的应用代码里,执行结果再回传给模型用于生成最终回答。

工作流程

  1. 应用把可用函数的名称、功能描述、参数结构(通常用JSON Schema描述)随请求一并交给模型;
  2. 模型判断是否需要调用工具,若需要则返回类似{"name":"getWeather","arguments":{"city":"北京"}}的结构化意图;
  3. 应用在本地执行该函数,并把结果作为一条消息回传给模型;
  4. 模型结合执行结果生成面向用户的自然语言回答。

示意代码:

  1. // 伪代码:声明一个可被模型调用的工具
  2. public class WeatherTool {
  3. @Tool(description = "查询指定城市的实时天气")
  4. public String getWeather(String city) {
  5. return weatherService.query(city); // 真正的执行发生在应用侧
  6. }
  7. }
  8. // 伪代码:处理模型返回的调用意图
  9. if (response.isToolCall()) {
  10. ToolCall call = response.getToolCall();
  11. Object result = toolExecutor.invoke(call); // 本地执行
  12. String finalAnswer = chatModel.generate(messages, result); // 结果回传
  13. }

与Prompt的关系

函数的名称与描述本质上也是“喂给模型的文本”,模型靠理解这些描述来做调用决策。因此可以把函数描述看作一种特殊的功能性Prompt:它描述的不是任务,而是“你有哪些可用的动作”。

agent-">第三层:Agent——会“思考规划”的智能体

它是什么

Agent是以大模型为“大脑”,具备目标理解、任务拆解、工具选择、结果反思与循环执行能力的自主系统。如果说Prompt问答是“一问一答”,Agent的工作模式则是“给目标、要结果”。

它如何运行

一个典型的Agent执行循环如下:感知输入 → 理解目标 → 拆解步骤 → 选择工具 → 执行 → 观察结果 → 未完成则调整计划继续,直到目标达成或触发终止条件。

  1. // 伪代码:一个极简的Agent循环
  2. while (!task.isDone() && steps < MAX_STEPS) {
  3. Plan plan = llm.plan(task, memory); // 规划:下一步做什么
  4. Result result = executor.run(plan.next()); // 执行:调用工具或生成内容
  5. memory.add(plan, result); // 记忆:沉淀过程与结果
  6. if (llm.shouldStop(task, memory)) break; // 反思:判断是否完成
  7. }

与Function Call的关系

Function Call是Agent的“手脚”,Agent是把这些手脚串成行为闭环的“指挥系统”。没有Function Call,Agent无法与外部世界交互;没有Agent的规划循环,Function Call只是单轮的一次性调用,无法完成多步骤任务。

第四层:Agent Skill——Agent的“职业技能包”

它是什么

Agent Skill是把完成某一类任务所需的流程说明、领域知识、可执行脚本与参考资源,按约定结构封装起来的可插拔能力单元。Agent接到相关任务时才加载对应Skill,即刻获得“专业水准”的做法。

它解决什么问题

通用大模型什么都知道一点,但面对专业任务(如生成规范的财务报表、执行特定的数据处理流程)往往不够精细。如果把所有专业知识都常驻在系统提示词里,会造成上下文膨胀、推理成本上升、注意力被稀释。Skill的思路是按需加载:平时不占用上下文,用到时才注入该技能的说明与模板。

它通常长什么样

一个技能包一般包含四类内容:

  • 技能描述:说明这个技能“是什么、适用于什么任务”,供Agent判断何时加载;
  • 操作指引:分步骤的标准作业流程,约束模型的执行顺序;
  • 脚本与模板:把确定性操作交给代码执行,减少模型自由发挥带来的不确定性;
  • 参考示例:规定输出格式与质量基准。

与前两者的关系

Skill本质上是模板化、工程化、可复用的Prompt资产,是提示词工程从“个人手艺”走向“团队资产管理”的产物;同时,Skill内部通常会指挥Agent调用若干工具并规定调用顺序与校验方式——Function Call解决“怎么调”,Skill解决“怎么调得专业”。

第五层:MCP——AI世界的“USB接口”

它是什么

MCP(Model Context Protocol,模型上下文协议)是一类把“大模型应用”与“外部工具、数据源”的连接方式标准化的开放协议,采用客户端—服务端架构:宿主应用(如智能体开发框架)内置客户端,外部能力以服务端形式提供,双方按统一规范通信。

它解决什么问题

在统一协议出现之前,每个AI应用接入一个新工具都要写一套私有集成代码:M个应用 × N个工具,意味着M×N次重复开发。标准化之后变成M+N——工具方实现一次服务端,所有兼容应用都能使用;应用方实现一次客户端,就能接入所有服务端。这正是USB接口统一各种外设的思路。

它提供哪几类能力

  • 工具(Tools):可被模型调用的操作,例如查询数据库、发送通知;
  • 资源(Resources):可被读取的数据,例如文件内容、记录集合;
  • 提示模板(Prompts):服务端预置、可复用的提示词模板。

与Function Call的关系

Function Call是模型侧的调用机制,MCP是能力接入侧的描述与传输标准。MCP暴露的工具最终仍通过Function Call机制被模型使用;MCP不替代Function Call,而是让函数调用的“工具清单”可以被任何兼容应用直接复用。

相关概念总对比

概念 所在层级 解决的核心问题 类比
Prompt 指令/输入层 如何准确表达意图 你对服务员说的话
Function Call 调用机制层 如何触发外部动作 服务员把订单传给后厨
Agent 自主决策层 如何自主完成多步任务 会自己安排工作的经理
Agent Skill 能力封装层 如何沉淀专业与复用 职业技能证书与操作手册
MCP 连接协议层 如何标准化接入外部系统 统一的USB接口标准

典型应用场景

  • 客服问答与知识查询:以Prompt工程配合检索增强为主,通常不需要Agent;
  • 单步工具型任务(查天气、查库存、汇总一张表):Prompt + Function Call即可,成本低且稳定;
  • 复杂多步自动化(运维排障、多源数据整合分析、跨系统流程处理):需要Agent的规划与循环执行能力;
  • 专业领域任务(财务对账、合规审查、行业报告生成):Agent + Skill,把领域流程沉淀为技能包反复复用;
  • 企业系统集成(接入数据库、消息队列、对象存储、日志与监控等内部系统):通过MCP类标准协议统一接入,避免重复开发。以百度智能云为代表的云平台所提供的大模型应用开发能力,也普遍将提示词管理、工具编排、知识接入等对应环节产品化,理解了上述概念,就能快速对应到平台各模块的定位。

使用注意事项

  1. 不要为了用Agent而用Agent:单轮Prompt能解决的问题就别上Agent,自主性带来灵活性的同时,也带来不确定性、延迟与费用放大。
  2. 把Prompt当代码管理:提示词应纳入版本控制、评审与回归测试,避免一次改动引发线上质量波动。
  3. 工具描述必须精准:Function Call的质量高度依赖函数描述文本,描述含糊会直接导致误调用;参数校验务必在应用侧做兜底。
  4. 控制Skill的上下文预算:按需加载、适度摘要,避免多个技能同时注入把上下文窗口占满。
  5. 管好MCP的安全边界:能力经协议暴露后,必须配置鉴权、最小权限、操作审计与敏感数据过滤,防止模型被诱导执行危险操作。
  6. 给Agent设止损条件:配置最大步数、超时与预算上限,防止陷入死循环。

总结

回到定义本身:Prompt是表达,Function Call是机制,Agent是自主性,Skill是专业性,MCP是连接标准。它们分别位于指令层、调用层、决策层、封装层与协议层,彼此不是替代关系,而是共同构成大模型应用从“能对话”走向“能干活”的完整技术栈。理解这条分层主线后,无论是做架构设计还是技术选型,都能准确判断每个环节该用什么、不该用什么。