简介:本文从技术演进与工程落地角度,系统梳理Agent Skill、MCP、Function Calling、Tool Calling与Prompt之间的关系。读者将理解各层能力的定位、调用链路与适用边界,并掌握在智能体应用中组合使用这些能力的通用方法、配置思路与排查策略。
本教程要帮助开发者、技术负责人和智能体应用搭建者完成一件事:理清 Agent Skill、MCP、Function Calling、Tool Calling 与 Prompt 在智能体系统中的层级关系,并能够根据实际业务场景正确组合使用这些能力。
很多人在接触智能体开发时会被这些概念绕晕。它们有的偏学术范式,有的偏协议标准,有的偏模型原生能力,有的偏工程执行链路。如果不从“能力分层”和“调用时序”两个角度去拆解,很容易出现设计混乱、重复建设、上下文浪费或执行成功率低等问题。
完成本教程后,你将能够:
本教程不依赖任何特定云平台或商业智能体框架,所有描述均采用通用技术概念。文中的配置示例以伪代码和通用 JSON 结构为主,便于读者映射到自己熟悉的技术栈中。
以下场景中,理解这些概念的差异与协作关系尤其重要:
如果你正处于上述任一场景,建议按照本教程的顺序完整阅读,尤其是“能力分层模型”和“实施步骤”两部分。
在开始理解和实践之前,建议具备以下基础:
如果你打算边学边做,需要准备:
在继续之前,请先接受一个核心判断:这些概念不是同一层级的东西,因此不能简单问“谁替代谁”,而应该问“谁在哪一层解决什么问题”。
如果一开始就把它们当成并列关系,后续的理解会非常困难。建议带着“分层”的视角阅读全文。
智能体执行能力的演进不是跳跃式的,而是沿着“学术范式—模型能力—工程标准化—执行效率优化”的路径逐步推进。
早期研究提出了“推理与行动结合”的范式,让模型不再一次输出完整答案,而是在推理过程中逐步调用外部能力并根据反馈调整下一步。这一思想解决了两个问题:一是模型缺乏外部信息反馈导致的“空想式推理”,二是传统决策框架缺乏高层规划能力的问题。
随后,模型底座能力增强,能够理解复杂指令并完成逻辑推理。接着,研究者证明了模型可以学会何时调用什么接口来增强自身能力。产品层面开始出现插件机制,让模型访问实时信息、执行计算或使用第三方服务。
但插件和工具定义长期处于碎片化状态,不同框架有不同描述方式。于是出现了用于统一工具发现与调用方式的开放标准,把工具和数据从特定框架中解耦出来。再之后,为了进一步提升复杂任务的成功率并降低上下文消耗,出现了技能标准,让推理框架能更有效地执行标准作业流程。
从这一演进可以看出:能力标准化是工程化落地过程中的自然结果,而不是某一家厂商的独创。
为了理清关系,我们将这些概念分为三个层级:模型原生能力层、工程执行链路层、任务编排标准层。
Prompt 是使用者与大语言模型之间的指令界面。它通过自然语言或结构化模板告诉模型“你是谁、你要做什么、有什么约束、输出什么格式”。Prompt 本身不具备调用外部工具的能力,但它可以诱导模型生成符合特定格式的文本,进而被外部程序解析。
Function Calling 是模型经过训练后具备的一种结构化输出能力。模型可以理解 JSON Schema,并在需要时生成一个符合该 Schema 的工具调用请求。注意,Function Calling 本身只负责“生成调用意图和参数”,真正执行是由外部程序完成的。
Tool Calling 是应用层执行工具并获取反馈的完整过程。它包含几个环节:定义工具及参数 Schema、将工具信息注入模型上下文、模型生成函数调用请求、应用解析请求并执行实际函数、把执行结果返回给模型。Function Calling 只是 Tool Calling 链条中的“生成调用请求”环节。
Agent 是具备规划、记忆和工具使用能力的更高层抽象。Agent 不只调用单个工具,它会根据模糊目标自主拆解任务、决定调用哪些工具、观察反馈并调整策略,直到完成目标或达到终止条件。
MCP(Model Context Protocol,模型上下文协议) 是用于统一工具发现与调用方式的开放标准。它解决的是“工具定义碎片化”问题:不同框架、不同服务提供方可以按照同一套协议暴露工具和数据,Agent 侧则按照同一套协议发现和调用。MCP 位于工程执行链路层之上,抽象的是“工具如何被描述、发现和调用”。
Agent Skill 是面向任务成功率和上下文效率的标准。它解决的是“复杂任务如何可靠执行”的问题:把一个反复出现的复杂任务沉淀为可复用的标准作业流程,其中包含执行步骤、所需工具、输入输出约定和质量校验规则。Skill 并非替代 MCP,而是建立在模型推理能力与工具协议之上,让 Agent 在遇到该类任务时更稳定地执行。
| 概念 | 层级 | 解决的问题 | 不负责的事情 |
|---|---|---|---|
| Prompt | 模型交互层 | 如何向模型表达任务和约束 | 不直接执行外部动作 |
| Function Calling | 模型原生能力层 | 如何让模型输出结构化工具调用请求 | 不执行工具本身 |
| Tool Calling | 工程执行链路层 | 如何完成“生成调用—执行—返回结果”的闭环 | 不解决多工具编排策略 |
| Agent | 应用抽象层 | 如何围绕目标自主规划与执行 | 不规定工具发现和调用的具体标准 |
| MCP | 工具协议标准层 | 如何统一工具的发现、描述与调用方式 | 不解决复杂任务流程编排效率 |
| Agent Skill | 任务编排标准层 | 如何让复杂任务按标准流程稳定执行并降低上下文消耗 | 不替代模型推理能力,也不替代工具协议 |
为了真正理解这些能力如何协同工作,我们拆解一个通用场景:用户向智能体提出“帮我把这份数据按照规则清洗并生成分析报告”。
用户请求首先进入 Agent。Agent 的规划模块分析目标:任务不是一个简单工具调用,而是需要多个步骤。它可能拆解为:读取数据、检查字段完整性、清洗异常值、统计分析、生成报告。
这一阶段主要依赖 Prompt 工程和模型推理能力。Prompt 需要清晰描述 Agent 的角色、可用的能力边界、输出格式以及安全约束。
Agent 需要知道有哪些工具可用。在标准化体系中,Agent 通过协议客户端连接到一个或多个工具提供方。工具提供方通过 MCP 或类似协议暴露工具列表、参数 Schema、权限范围和调用方式。
此时 Agent 不需要事先硬编码所有工具定义。它通过协议动态发现可用能力,并根据当前子任务选择合适工具。
Agent 确定需要调用“数据读取工具”后,模型基于工具的参数 Schema 生成一个结构化调用请求。这就是 Function Calling 能力发挥作用的地方。
例如,模型生成如下 JSON:
{"tool": "data_reader","parameters": {"source": "s3://bucket/dataset.csv","format": "csv","limit": 1000}}
参数 Schema 由工具提供方在工具描述中定义。模型必须按照该 Schema 填充参数,字段类型、枚举值、必填项都要符合约定。
应用层解析模型生成的调用请求,实际执行 data_reader 函数,并把结果以模型可读的形式返回。这一步就是 Tool Calling 的后半段。执行结果可能包含数据片段、错误信息或状态码。
模型根据工具返回结果判断下一步。如果数据读取成功,继续规划清洗逻辑;如果读取失败,模型可能调整参数或选择备用方案。这是“推理—行动—观察”循环在工程上的具体体现。
如果“数据清洗与报告生成”已经被沉淀为一个 Agent Skill,Agent 在识别到这是一个重复性复杂任务时,会加载该技能定义。技能定义中可能包含标准步骤、每一步的验收条件、可用工具清单和异常处理策略。
此时 Agent 不再临时规划每一步,而是按照技能中的流程执行。这既提升了稳定性,也减少了重复推理带来的上下文消耗。
下面给出一个通用实施流程。你可以基于自己的技术栈调整具体实现,但分层思路保持一致。
在动手设计前,先回答两个问题:
判断结果影响后续设计:
工具层设计是基础。每个工具需要明确:
在标准化协议下,这些元信息由工具提供方统一暴露。消费者无需关心工具的具体实现,只需按照协议发现与调用。
Prompt 设计和 Function Calling 配置是相互配合的。Prompt 负责高层意图和约束,Function Calling 负责精确参数生成。
建议采用“角色—任务—工具—约束—输出格式”的结构化 Prompt 模板。在工具调用场景下,需要明确告知模型“当需要外部信息时,必须生成工具调用请求,而不是编造结果”。
同时,为每个工具定义清晰的描述文本。模型对工具的理解很大程度取决于这段描述。描述应包含:工具的作用、适用场景、不适用场景、参数含义和返回内容说明。
当工具源较多或需要跨团队复用时,应引入统一协议层。协议层的主要工作是:
接入后,Agent 侧的集成代码可以显著简化。新增工具源时,无需修改 Agent 核心逻辑,只需按照协议注册即可。
对于高频复杂任务,在工具层稳定后,进行技能抽取。抽取过程如下:
第一步,记录真实执行过程。 观察熟练操作者或现有 Agent 完成该类任务时的关键步骤、判断分支和常见失败点。
第二步,提炼标准作业流程。 将过程固化为有序步骤序列,每一步包含:触发条件、输入、操作、预期输出、质量校验方法。
第三步,定义异常处理策略。 对每一步可能出现的失败场景给出重试、降级或人工介入规则。
第四步,打包为可复用技能。 技能定义中引用工具层能力,但不重复定义工具。技能关注的是“先做什么、再做什么、什么情况算完成”。
第五步,在 Agent 中注册并测试。 通过一批真实样例验证技能触发是否准确、执行是否稳定、上下文消耗是否下降。
上线后需要关注几个指标:
根据监控数据,持续优化 Prompt、工具描述、技能流程和协议配置。
下面是一个中立的工具定义示例,展示协议层通用的元信息结构:
{"name": "query_order_status","description": "根据订单号查询订单当前状态。适用于用户询问订单进度时。","parameters": {"type": "object","properties": {"order_id": {"type": "string","description": "订单唯一标识,长度 16 位"}},"required": ["order_id"]},"returns": {"type": "object","properties": {"status": {"type": "string","enum": ["pending", "shipping", "delivered", "cancelled"]},"updated_at": {"type": "string","description": "最后更新时间"}}}}
这个结构的关键是描述清晰、参数约束完整、枚举值穷尽。模型生成调用请求时,依赖这些信息。
技能定义通常包含元信息、输入输出约定、步骤流程和依赖工具:
skill:name: "data_cleaning_and_report"description: "对指定数据集执行标准清洗并生成分析报告"triggers:- "清洗数据"- "生成数据分析报告"inputs:- name: "data_source"type: "string"required: truesteps:- step: 1action: "read_data"tool: "data_reader"validate: "data_schema_check"- step: 2action: "clean_outliers"tool: "data_cleaner"validate: "outlier_removed"- step: 3action: "generate_report"tool: "report_builder"validate: "report_format_check"failure_policy:retry: 2fallback: "human_review"
技能定义的重点在于“标准流程”和“质量校验”,它让 Agent 不必每次重新规划步骤,而是按照验证过的路径执行。
完成接入或配置后,需要从以下维度验证效果:
设计一组覆盖正常参数、边界参数和异常参数的测试用例。验证标准:
若引入了统一协议,需要验证:
使用一批真实业务样例,对比“使用技能前”和“使用技能后”的差异,主要观察:
建议在测试集上建立基线指标,再引入技能或协议层后量化对比。
可能原因:
排查思路:
可能原因:
排查思路:
可能原因:
排查思路:
可能原因:
排查思路:
Agent Skill、MCP、Function Calling、Tool Calling 与 Prompt 不是同一层级的替代关系,而是智能体系统中不同层面的协作组件。
在实际落地时,建议按照“先理清任务复杂度与重复性,再分层设计工具、协议与技能”的顺序推进。不要一开始就堆叠全部能力,而是根据真实痛点逐步引入。
掌握这些概念的关键,不是记住定义,而是理解它们各自在一条完整任务执行链路中的位置。当你能够画出一次任务从用户请求到最终结果的完整时序图,并清楚每一层在哪里介入、为什么介入时,就已经真正理解了这些能力的区别与协作方式。