简介:本文系统对比Prompt、Function Call、Agent、Skill与MCP五类AI应用开发中的高频概念,从抽象层级、职责边界、技术架构、接入成本、安全治理与适用场景等维度拆解相同点与核心差异,并给出条件化的选型建议与落地注意事项,帮助你理清AI应用的分层设计思路,做出清晰的技术判断。
随着大模型从“能聊天”走向“能干活”,AI应用开发中涌现出一批高频概念:Prompt(提示词)、Function Call(函数调用)、Agent(智能体)、Skill(技能)以及MCP(模型上下文协议)。不少开发者在学习时会困惑:它们是同一类东西吗?是互相替代的关系吗?为什么已经接了Function Call,还要了解MCP?提示词写得足够好,为什么还要封装Skill?
关键在于认识到:这五个概念并不处于同一抽象层级,而是构成了一条自下而上的能力栈,Prompt解决“怎么说”,Function Call解决“怎么做”,Agent解决“怎么规划”,Skill解决“怎么沉淀”,MCP解决“怎么连接”。理解了这条主线,选型时就不会迷失。本文围绕“Agent Skill、MCP与Prompt的区别”这一核心问题展开,同时将Function Call与Agent纳入对比,因为只有把五层放在一起看,才能真正理解各自的位置与价值。
Prompt是输入给大模型的文本指令,包含系统设定、用户问题、上下文材料与输出要求,决定了模型的身份、任务目标与回答方式。类比来说,去餐厅点菜时说的“来一份宫保鸡丁”就是Prompt,模型是理解并执行指令的“厨师”。
工程实践中,Prompt通常由“系统提示词+用户提示词”构成。下面是框架无关的通用示意代码:
// 通用示意:构造一次带系统设定与用户问题的模型调用String systemText = "你是一个资深后端工程师,擅长用通俗语言解释技术概念。";String userText = "什么是幂等性?";ModelResponse response = modelClient.call(Message.system(systemText),Message.user(userText));
实际业务中,朴素的Prompt往往不够稳定,还需要提示词工程:通过角色设定、任务拆解、少样本示例、输出格式约束等手段引导模型,例如通过模板复用并约束输出行为:
// 通用示意:模板化PromptString template = """你是一个资深的Java开发工程师。请根据以下需求生成代码,要求包含必要注释并处理异常:需求:%s请输出完整的类代码。""";String prompt = String.format(template, requirement);
Prompt只能让模型“说”,Function Call让模型能“请求执行动作”。其原理是:应用侧预先向模型声明可用函数清单(名称、用途、参数结构),模型在理解用户意图后不直接编造答案,而是返回结构化的调用请求,由应用侧真正执行函数,再把结果回传给模型继续生成。
// 通用示意:向模型声明可用工具{"tools": [{"name": "queryOrderStatus","description": "根据订单号查询订单状态","parameters": { "orderId": "string" }}]}
需要注意:模型本身并不执行函数,它只负责“决定调用哪个函数、传什么参数”,真正的执行永远发生在应用侧。
Agent是在模型之上叠加了“目标—规划—执行—观察—再规划”循环的应用形态,通常由四部分组成:模型(推理大脑)、记忆(上下文与历史状态)、工具(通过Function Call或协议接入的能力)、规划策略(任务拆解与反思机制)。单次Function Call是“一问一答式的动作触发”,而Agent面对的是“分析本季度数据并生成报告”这类无法一步完成的任务:它会把目标拆成多个步骤,交替执行调用、检查、修正,直到完成或触发终止条件。
Skill把某类任务的“方法论”打包成结构化能力单元,包含技能说明(何时触发、按什么步骤执行、输出什么规范)、参考资料与可选的辅助脚本,Agent在需要时按需加载:
skills/└─ code-review/ # 一个“代码评审”技能包├─ SKILL.md # 技能说明:触发时机、执行步骤、输出规范├─ references/ # 评审清单、编码规范等参考材料└─ scripts/ # 可选的辅助检查脚本
Skill解决的核心问题是“能力复用与知识沉淀”:领域经验不必每次重写超长Prompt,而是封装成技能供不同Agent装配。它与Prompt的区别在于结构化与可管理性,与Function Call的区别在于它包含“怎么做”的知识,而不仅是“能做什么”的接口。
MCP(Model Context Protocol,模型上下文协议)是一类规范大模型应用与外部数据源、工具之间连接方式的开放协议,常被类比为“AI世界的USB接口”。在标准协议出现之前,应用每接入一个新系统都要单独编写工具定义与对接代码;有了协议之后,工具提供方按协议实现服务端,应用侧只需支持协议即可发现并调用能力:
// 通用示意:应用侧通过标准协议连接外部服务{"mcpServers": {"内部知识库": { "capabilities": ["search", "fetchDocument"] },"数据库服务": { "capabilities": ["query", "listTables"] }}}
一个直观类比:Prompt是“对话”,Function Call是“手”,Agent是“大脑与双手的协作”,Skill是“岗位培训手册”,MCP是“标准化的插座”。
Prompt几乎没有额外依赖,修改字符串即可生效,但效果高度依赖模型本身;Function Call需要应用侧建立函数注册、参数校验、执行与结果回传的完整闭环;Agent需要规划循环、记忆管理、错误恢复、终止条件等框架性组件,架构复杂度最高;Skill需要技能仓库、加载机制与生命周期管理;MCP则需要协议客户端与服务端实现、服务发现与通信管理。
Prompt以静态为主,可通过模板参数化;Function Call的工具清单通常在部署时确定;MCP支持运行时动态发现工具能力,扩展更灵活;Skill支持按需加载、渐进披露,避免上下文被一次性塞满;Agent则在运行时动态规划步骤,应对不确定性任务。
Prompt接入成本最低;Function Call居中,但每新增一个工具都要编写定义与实现,工具数量增长后维护成本线性上升;MCP前期需要实现协议接入,但之后新工具可“即插即用”,长期边际成本更低;Skill的成本主要在于按规范整理与持续维护知识资产;Agent的接入成本最高,涉及整体架构改造与流程设计。
Prompt面临提示词注入与敏感信息泄露风险;Function Call与MCP需要严格的工具权限控制、最小权限原则、身份认证与审计日志,MCP服务端还需考虑数据隔离;Skill需要内容审核与版本管理,防止过时知识误导模型;Agent存在“权限放大效应”,一旦规划失误可能连续执行危险动作,通常需要引入审批环节与人机协同。
Prompt需要版本管理与A/B评测;工具类接入需要管理接口变更与兼容性;Agent需要全链路追踪与可观测性建设;MCP需要保障服务端可用性并纳入统一监控。层级越往上,排障难度越大,运维投入越高。
| 维度 | Prompt | Function Call | Agent | Skill | MCP |
|---|---|---|---|---|---|
| 本质定位 | 模型的输入指令 | 模型的动作触发机制 | 自主规划执行的应用形态 | 任务方法论的结构化封装 | 工具接入的标准协议 |
| 所处层级 | 调用层 | 能力约定层 | 应用形态层 | 知识组织层 | 连接协议层 |
| 解决的问题 | 理解意图、约束输出 | 让模型触发真实动作 | 拆解并完成复杂任务 | 能力复用与知识沉淀 | 工具标准化、可插拔 |
| 动态性 | 静态为主 | 部署时注册 | 运行时规划 | 按需加载 | 运行时发现 |
| 接入成本 | 低 | 中 | 高 | 中 | 中(一次接入长期复用) |
| 安全关注点 | 注入、泄露 | 参数校验、权限 | 审批、终止条件、审计 | 内容与版本治理 | 认证、隔离、审计 |
| 典型场景 | 问答、生成、摘要 | 查询、单一动作执行 | 多步骤自动化 | 领域专家经验沉淀 | 企业系统集成、工具生态 |
Prompt、Function Call、Agent、Skill与MCP不是竞争关系,而是分层递进的能力栈:Prompt定义沟通语言,Function Call赋予动手能力,Agent提供规划大脑,Skill沉淀职业经验,MCP打通外部世界。选型的核心思路是“按需上层次”,先明确任务复杂度、工具规模、知识复用需求与安全容忍度,再决定在哪一层投入,必要时组合多层能力,以最小成本获得稳定可控的AI应用。