Prompt、Agent、Function Call、Skill、MCP一文分清

作者:Nicky2026.11.03 20:53浏览量:0

简介:Prompt、Function Call、Agent、Skill与MCP是大模型应用开发中最容易混淆的五个概念。本文从定义出发,系统讲清每个概念“是什么、解决什么问题、处于哪一层”,并结合通用示意代码、典型协作场景与对比表格,帮助开发者快速建立完整认知框架,为架构设计与技术选型理清思路。

agent-function-call-skill-mcp-">Prompt、Agent、Function Call、Skill、MCP一文分清

一、开篇:这五个概念为什么容易混淆

随着大模型从“聊天工具”演进为“能执行任务的系统”,技术栈正在快速分层:怎么跟模型说话、怎么让它调用接口、怎么让它自主完成目标、怎么组织它的能力、怎么把它接进企业系统——每一步都催生了一个专门的概念。这五个概念并不处在同一个抽象层级上,却经常出现在同一篇文档、同一场分享里,因此极易混淆。

可以先用一句话建立直觉:

  • Prompt 是你跟AI说的“人话”;
  • Function Call 让AI能“动手干活”;
  • Agent 让AI会“思考规划”;
  • Skill 是AI的“职业技能证书”;
  • MCP 是AI世界的“USB接口”。

下面逐层拆解,说清每个概念的定义、原理、边界与相互关系。

二、Prompt:与模型沟通的“普通话”

2.1 定义

Prompt(提示词)是输入给大模型的指令与上下文信息的总称,通常由系统提示词(System Prompt)和用户提示词(User Prompt)等部分组成。它决定了模型“以什么身份、按什么规则、回答什么问题”。从技术视角看,Prompt是模型推理的直接输入;从使用视角看,它是人类意图与模型能力之间的“翻译官”。Prompt质量的高低,直接决定模型输出的准确性、稳定性与安全性,因此围绕它形成了“提示词工程”这一专门方法论。

2.2 基本结构与示意代码

在具体工程中,开发者通常通过各云服务商提供的模型服务接口完成调用(如百度智能云的模型服务),各家接口形态大同小异,核心都是“组织好消息列表,发起一次对话”。以下为与具体框架无关的通用示意代码(伪代码):

  1. // 通用示意代码:构造一次最基本的模型调用
  2. String systemPrompt = "你是一名资深Java架构师,擅长用通俗语言解释技术概念。";
  3. String userPrompt = "请解释什么是MCP协议。";
  4. ChatResponse response = modelClient.call(
  5. new Prompt(systemPrompt, userPrompt));
  6. String answer = response.getOutputText();

其中系统提示词设定角色与约束,用户提示词承载具体问题,二者共同构成一次完整交互的最小单元。

2.3 进阶用法:提示词模板

实际业务中很少手写一次性提示词,而是把提示词沉淀为可复用的模板,用变量填充动态内容,从而保证输出风格稳定、便于统一评测与迭代:

  1. String template = """
  2. 你是一名资深Java开发工程师。
  3. 请根据以下需求生成Java代码,要求:
  4. 1. 包含必要的注释;
  5. 2. 考虑异常处理;
  6. 3. 输出完整的类代码。
  7. 需求:%s
  8. """;
  9. String prompt = String.format(template, requirement);

2.4 价值与边界

Prompt解决的是“沟通”问题。但它有一个天然边界:模型本身只能“说”,不能“做”——它无法查数据库、无法调内部接口、无法发送消息。要让AI真正参与业务流程,就需要下一层的机制。

三、Function Call:让模型“动手干活”

3.1 定义

Function Call(函数调用,也称工具调用)是一种约定机制:开发者预先向模型描述可用的外部函数(名称、用途、参数结构),模型在对话中判断需要时,并不真的执行函数,而是输出一段结构化的“调用意图”(函数名加参数),由应用代码执行后,再把结果回传给模型继续生成回答。

必须强调一点:模型始终只负责“决定调用什么、传什么参数”,真正的执行者和安全边界都在应用侧。这一分工既发挥了模型的规划能力,也保留了工程上对权限与风险的控制权。

3.2 工作流程

  1. 注册:应用向模型声明可用函数及其参数的JSON Schema描述;
  2. 提问:用户输入自然语言请求;
  3. 决策:模型判断需要调用某函数,返回结构化调用请求;
  4. 执行:应用解析请求,执行真实逻辑(查库、调接口、发消息等);
  5. 回传:将函数执行结果拼入上下文,模型据此生成面向用户的最终回答。

3.3 示意代码

  1. // 通用示意代码(伪代码),参数用业界通用的JSON Schema风格描述
  2. // 1. 声明可被模型调用的函数
  3. ToolSpec queryOrder = ToolSpec.of(
  4. "queryOrder", // 函数名
  5. "根据订单号查询订单状态与金额", // 用途说明,供模型判断何时使用
  6. Map.of("orderId", "string") // 参数结构
  7. );
  8. // 2. 携带函数描述发起对话
  9. ChatResponse resp = modelClient.call(
  10. new Prompt(userMessage, List.of(queryOrder)));
  11. // 3. 模型返回调用意图,由应用侧执行真实逻辑
  12. if (resp.hasToolCall()) {
  13. ToolCall call = resp.getToolCall();
  14. String result = orderService.query(call.getArg("orderId"));
  15. // 4. 将结果回传,让模型生成最终自然语言回答
  16. ChatResponse finalResp = modelClient.call(
  17. new Prompt(userMessage, call, result));
  18. }

3.4 典型场景

查询类(天气、订单、库存)、动作类(创建工单、发送通知)、计算类(用确定性计算弥补模型的数值短板)等。凡是“模型不该猜、必须查真数据”的场景,都适合引入函数调用。

四、Agent:会“思考规划”的自主执行体

4.1 定义

Agent(智能体)是以大模型为“决策大脑”,能够围绕一个目标自主拆解任务、选择工具、执行动作、观察结果并持续迭代的软件系统。如果说单次Function Call像“一次抬手”,Agent就是把无数次动作组织成完整工作流的“调度者”。

4.2 核心组成

  • 规划:把模糊的目标拆解为可执行的子步骤,并根据进展动态调整顺序;
  • 记忆:短期记忆是对话上下文,长期记忆通常借助向量数据库等外部存储实现跨会话沉淀;
  • 工具使用:通过Function Call等机制触达真实世界的系统与数据;
  • 反思迭代:根据执行结果自我纠偏,而不是“一问一答就结束”。

4.3 运行循环

  1. 接收目标 → 思考(下一步做什么) → 行动(调用工具/生成内容)
  2. ↑ ↓
  3. └──── 观察(结果是否符合预期) ←──────────┘
  4. (循环直至达成目标或触发终止条件)

4.4 与Function Call的关系

Function Call是Agent的“手”,Agent是“大脑加工作习惯”。没有Function Call,Agent只能想不能做;没有Agent式的规划循环,Function Call只能完成孤立的单步操作。二者是组件与系统的关系,而非竞争关系。

五、Skill:AI的“职业技能证书”

5.1 定义

Skill(技能)是对Agent能力的工程化封装:把完成某类任务所需的知识、流程、规则与工具调用方式,打包成一个可复用、可插拔的模块。Agent平时“轻装上阵”,接到相关任务时再“持证上岗”、按需加载对应技能。

5.2 一个Skill通常包含什么

  • 能力说明:告诉Agent“我擅长什么、什么场景该启用我”;
  • 领域知识:操作手册、业务规则、输出规范等文档化内容;
  • 工具依赖:该技能执行时需要调用的函数或外部服务;
  • 输入输出约定:任务的标准流程与交付格式。

每一点都不是可有可无的:能力说明决定技能能否被正确调起,领域知识决定执行质量,工具依赖决定能否落地,输入输出约定决定结果能否被下游稳定消费。

5.3 与Function Call、Agent的区别

  • Function Call面向“单次动作”:一次调用、一个结果;
  • Skill面向“一类任务的完整方法论”:内部可能封装了多组函数调用、专用提示词模板与业务规则;
  • Agent是执行主体,Skill是它可以装备的“能力包”。

5.4 价值

复用(一次封装、多处使用)、解耦(扩展能力不必改动Agent主体)、成本可控(按需加载,避免把所有说明一股脑塞进上下文,挤占有限的窗口资源)。

六、MCP:AI世界的“USB接口”

6.1 定义

MCP(Model Context Protocol,模型上下文协议)是一种开放协议,目标是把“AI应用与外部数据源、工具、服务之间的连接方式”标准化。就像USB统一了外设与电脑的接口,MCP统一了AI应用与外部能力之间的“插口”。

6.2 解决什么问题

在缺乏统一协议时,M个AI应用要对接N个数据源或工具,需要编写接近M×N套定制集成,重复开发且难以维护。引入统一协议后,工具方只需实现一次标准Server,任何支持该协议的AI应用都能即插即用,集成成本从M×N量级降为M+N量级。

6.3 基本角色

  • Host:AI应用本体(例如一个Agent应用);
  • Client:应用内部负责与各Server维持连接的协议组件;
  • Server:对外标准化暴露“资源(可读数据)、工具(可执行操作)、提示模板”的轻量服务。

6.4 与Function Call的关系

二者不对立:Function Call回答“模型如何发起一次调用”,MCP回答“工具如何被发现、被描述、被标准地接入”。实践中常见形态是——模型发起Function Call,而调用的对象正是经MCP接入的标准工具。

七、五者关系总览

概念 一句话定义 所处层次 解决的问题
Prompt 输入给模型的指令与上下文 交互层 让模型准确理解人类意图
Function Call 模型输出结构化调用意图 触发层 让模型能“做事”
Agent 以模型为大脑的自主执行系统 系统层 端到端完成复杂任务
Skill 可插拔的任务能力封装 能力层 让能力可复用、可扩展
MCP 连接AI与外部工具的开放协议 连接层 统一集成标准,降低对接成本

从下往上看:MCP负责“接进来”,Function Call负责“调得动”,Skill负责“组织好”,Agent负责“跑完全程”,而Prompt贯穿始终,是每一层中人与模型、组件与模型之间传递意图的“普通话”。

八、一个典型协作场景

以“生成本周订单运维日报”为例,走一遍完整链路:

  1. 用户通过Prompt下达目标与格式要求;
  2. Agent进行规划:取数 → 计算指标 → 生成图表 → 撰写报告;
  3. Agent经MCP发现企业已注册的数据服务与消息服务,获得标准化工具清单;
  4. 针对每次取数,模型通过Function Call输出结构化调用请求,应用执行后回传结果;
  5. “日报撰写”的方法论被封装为Skill,Agent按需加载其中的写作规范与模板;
  6. 全部完成后,Agent汇总输出日报,并经消息工具推送出去。

一条链路上,五个概念各司其职、缺一不可。

九、使用注意事项

  • Prompt:需要持续迭代与效果评测;警惕提示词注入风险;模板应纳入版本管理,避免线上随意改动;
  • Function Call:严格校验入参类型与范围;对敏感操作增加权限控制与二次确认;设置超时、重试与幂等机制;
  • Agent:设定明确的终止条件与最大步数,防止无限循环;控制token成本预算;关键动作引入人工审批与审计日志;
  • Skill:职责单一、边界清晰,避免技能之间循环依赖;能力说明写得越准确,被Agent正确调起的概率越高;
  • MCP:遵循最小权限原则分配工具;做好鉴权与访问控制;对Server的可用性、版本兼容性进行监控,避免协议升级导致连接失效。

十、总结

回到定义本身:Prompt是意图的载体,Function Call是动作的触发器,Agent是自主完成任务的大脑,Skill是可插拔的能力包,MCP是标准化的连接协议。 五者分别位于交互、触发、系统、能力组织与连接五个不同层次,共同构成“会沟通、能动手、有章法、可扩展、易集成”的大模型应用技术栈。理解每个概念“是什么、在哪一层、解决什么问题”,比记住任何比喻都更重要——只有建立在这一认知框架之上,开发者才能在架构设计与技术选型时准确划定各组件的职责边界,避免概念混用带来的设计混乱。