简介:Prompt、Function Call、Agent、Skill与MCP是大模型应用开发中最容易混淆的五个概念。本文从定义出发,系统讲清每个概念“是什么、解决什么问题、处于哪一层”,并结合通用示意代码、典型协作场景与对比表格,帮助开发者快速建立完整认知框架,为架构设计与技术选型理清思路。
随着大模型从“聊天工具”演进为“能执行任务的系统”,技术栈正在快速分层:怎么跟模型说话、怎么让它调用接口、怎么让它自主完成目标、怎么组织它的能力、怎么把它接进企业系统——每一步都催生了一个专门的概念。这五个概念并不处在同一个抽象层级上,却经常出现在同一篇文档、同一场分享里,因此极易混淆。
可以先用一句话建立直觉:
下面逐层拆解,说清每个概念的定义、原理、边界与相互关系。
Prompt(提示词)是输入给大模型的指令与上下文信息的总称,通常由系统提示词(System Prompt)和用户提示词(User Prompt)等部分组成。它决定了模型“以什么身份、按什么规则、回答什么问题”。从技术视角看,Prompt是模型推理的直接输入;从使用视角看,它是人类意图与模型能力之间的“翻译官”。Prompt质量的高低,直接决定模型输出的准确性、稳定性与安全性,因此围绕它形成了“提示词工程”这一专门方法论。
在具体工程中,开发者通常通过各云服务商提供的模型服务接口完成调用(如百度智能云的模型服务),各家接口形态大同小异,核心都是“组织好消息列表,发起一次对话”。以下为与具体框架无关的通用示意代码(伪代码):
// 通用示意代码:构造一次最基本的模型调用String systemPrompt = "你是一名资深Java架构师,擅长用通俗语言解释技术概念。";String userPrompt = "请解释什么是MCP协议。";ChatResponse response = modelClient.call(new Prompt(systemPrompt, userPrompt));String answer = response.getOutputText();
其中系统提示词设定角色与约束,用户提示词承载具体问题,二者共同构成一次完整交互的最小单元。
实际业务中很少手写一次性提示词,而是把提示词沉淀为可复用的模板,用变量填充动态内容,从而保证输出风格稳定、便于统一评测与迭代:
String template = """你是一名资深Java开发工程师。请根据以下需求生成Java代码,要求:1. 包含必要的注释;2. 考虑异常处理;3. 输出完整的类代码。需求:%s""";String prompt = String.format(template, requirement);
Prompt解决的是“沟通”问题。但它有一个天然边界:模型本身只能“说”,不能“做”——它无法查数据库、无法调内部接口、无法发送消息。要让AI真正参与业务流程,就需要下一层的机制。
Function Call(函数调用,也称工具调用)是一种约定机制:开发者预先向模型描述可用的外部函数(名称、用途、参数结构),模型在对话中判断需要时,并不真的执行函数,而是输出一段结构化的“调用意图”(函数名加参数),由应用代码执行后,再把结果回传给模型继续生成回答。
必须强调一点:模型始终只负责“决定调用什么、传什么参数”,真正的执行者和安全边界都在应用侧。这一分工既发挥了模型的规划能力,也保留了工程上对权限与风险的控制权。
// 通用示意代码(伪代码),参数用业界通用的JSON Schema风格描述// 1. 声明可被模型调用的函数ToolSpec queryOrder = ToolSpec.of("queryOrder", // 函数名"根据订单号查询订单状态与金额", // 用途说明,供模型判断何时使用Map.of("orderId", "string") // 参数结构);// 2. 携带函数描述发起对话ChatResponse resp = modelClient.call(new Prompt(userMessage, List.of(queryOrder)));// 3. 模型返回调用意图,由应用侧执行真实逻辑if (resp.hasToolCall()) {ToolCall call = resp.getToolCall();String result = orderService.query(call.getArg("orderId"));// 4. 将结果回传,让模型生成最终自然语言回答ChatResponse finalResp = modelClient.call(new Prompt(userMessage, call, result));}
查询类(天气、订单、库存)、动作类(创建工单、发送通知)、计算类(用确定性计算弥补模型的数值短板)等。凡是“模型不该猜、必须查真数据”的场景,都适合引入函数调用。
Agent(智能体)是以大模型为“决策大脑”,能够围绕一个目标自主拆解任务、选择工具、执行动作、观察结果并持续迭代的软件系统。如果说单次Function Call像“一次抬手”,Agent就是把无数次动作组织成完整工作流的“调度者”。
接收目标 → 思考(下一步做什么) → 行动(调用工具/生成内容)↑ ↓└──── 观察(结果是否符合预期) ←──────────┘(循环直至达成目标或触发终止条件)
Function Call是Agent的“手”,Agent是“大脑加工作习惯”。没有Function Call,Agent只能想不能做;没有Agent式的规划循环,Function Call只能完成孤立的单步操作。二者是组件与系统的关系,而非竞争关系。
Skill(技能)是对Agent能力的工程化封装:把完成某类任务所需的知识、流程、规则与工具调用方式,打包成一个可复用、可插拔的模块。Agent平时“轻装上阵”,接到相关任务时再“持证上岗”、按需加载对应技能。
每一点都不是可有可无的:能力说明决定技能能否被正确调起,领域知识决定执行质量,工具依赖决定能否落地,输入输出约定决定结果能否被下游稳定消费。
复用(一次封装、多处使用)、解耦(扩展能力不必改动Agent主体)、成本可控(按需加载,避免把所有说明一股脑塞进上下文,挤占有限的窗口资源)。
MCP(Model Context Protocol,模型上下文协议)是一种开放协议,目标是把“AI应用与外部数据源、工具、服务之间的连接方式”标准化。就像USB统一了外设与电脑的接口,MCP统一了AI应用与外部能力之间的“插口”。
在缺乏统一协议时,M个AI应用要对接N个数据源或工具,需要编写接近M×N套定制集成,重复开发且难以维护。引入统一协议后,工具方只需实现一次标准Server,任何支持该协议的AI应用都能即插即用,集成成本从M×N量级降为M+N量级。
二者不对立:Function Call回答“模型如何发起一次调用”,MCP回答“工具如何被发现、被描述、被标准地接入”。实践中常见形态是——模型发起Function Call,而调用的对象正是经MCP接入的标准工具。
| 概念 | 一句话定义 | 所处层次 | 解决的问题 |
|---|---|---|---|
| Prompt | 输入给模型的指令与上下文 | 交互层 | 让模型准确理解人类意图 |
| Function Call | 模型输出结构化调用意图 | 触发层 | 让模型能“做事” |
| Agent | 以模型为大脑的自主执行系统 | 系统层 | 端到端完成复杂任务 |
| Skill | 可插拔的任务能力封装 | 能力层 | 让能力可复用、可扩展 |
| MCP | 连接AI与外部工具的开放协议 | 连接层 | 统一集成标准,降低对接成本 |
从下往上看:MCP负责“接进来”,Function Call负责“调得动”,Skill负责“组织好”,Agent负责“跑完全程”,而Prompt贯穿始终,是每一层中人与模型、组件与模型之间传递意图的“普通话”。
以“生成本周订单运维日报”为例,走一遍完整链路:
一条链路上,五个概念各司其职、缺一不可。
回到定义本身:Prompt是意图的载体,Function Call是动作的触发器,Agent是自主完成任务的大脑,Skill是可插拔的能力包,MCP是标准化的连接协议。 五者分别位于交互、触发、系统、能力组织与连接五个不同层次,共同构成“会沟通、能动手、有章法、可扩展、易集成”的大模型应用技术栈。理解每个概念“是什么、在哪一层、解决什么问题”,比记住任何比喻都更重要——只有建立在这一认知框架之上,开发者才能在架构设计与技术选型时准确划定各组件的职责边界,避免概念混用带来的设计混乱。