简介:本文系统厘清 Prompt、MCP 与 Agent Skill 三者的定位差异与协作关系,深入讲解 Skill 的核心设计思想——渐进式披露与按需加载,并给出技能描述编写、分层知识组织、工具接入与结果验证的完整实施步骤和通用示例,帮助开发者显著降低上下文占用,让智能体的工具调用更内行、更可靠。
本教程将帮助读者完成三件事:
适合读者:正在构建智能体(Agent)应用的开发者、负责大模型应用架构设计的工程师与技术负责人,以及希望优化现有提示词与工具调用体系的团队。
Prompt 是开发者与模型交互的最直接载体,包括系统提示词、任务指令与用户输入。它即时性强、与当前任务高度耦合:一次性把要求写清楚,模型照着执行。它的局限同样明显——如果把所有领域的所有细节都写进一份超长提示词,上下文窗口会被迅速占满,模型注意力被稀释,指令遵循质量下降,且这些内容难以跨任务复用。
MCP(Model Context Protocol,模型上下文协议)是一类将外部工具与数据源标准化接入模型的协议。通过它,模型可以调用数据库查询、文件读写、消息发送、图表渲染等原子能力,解决的是“能不能”的问题。但在只有 MCP 的模式下,是否调用工具、调用哪个、参数怎么填,全部由大模型凭通用常识现场判断——模型知道“有哪些工具”,却不一定知道“这个领域的内行做法”。
Skill 的本质,是把某个领域的做事方法沉淀成结构化知识包:一段概括描述、一份详细说明文档,以及可选的脚本、模板与参考资源。它不直接执行动作,而是指导模型“按什么流程做、注意什么坑、在哪个环节调用什么工具”。
| 维度 | Prompt | MCP | Agent Skill |
|---|---|---|---|
| 本质 | 交互指令文本 | 工具接入协议 | 可复用的领域知识包 |
| 解决的问题 | 告诉模型做什么 | 让模型能调用外部能力 | 让模型按内行方法做 |
| 生效方式 | 直接注入上下文 | 运行时工具调用 | 描述常驻、详情按需加载 |
| 上下文成本 | 常驻且随任务膨胀 | 仅工具描述常驻 | 只有概括描述常驻 |
| 复用性 | 低,与任务耦合 | 高,能力跨场景复用 | 高,方法论跨任务复用 |
操作系统不会把硬盘上的全部程序一次性装进内存,而是用到哪个进程才加载哪个——因为内存容量有限且成本高昂。这套经典思想同样适用于大模型:上下文窗口就是内存,技能库就是硬盘。
大脑的存储与检索能力有限,高效的知识管理者只把“最少、最值钱”的核心知识记在脑中,其余知识外置(笔记、文档、资料库)并建立索引,用到时再查。脑子里记的不是全文,而是“去哪查”。
上下文窗口有限,塞得越满,注意力越分散、成本越高。正确做法是:一开始只把各技能的概括描述发给模型,让它根据任务需要判断该深入哪个技能,需要时再加载该技能的完整细节,而不是一上来就全量加载所有技能的全部细节。
你不需要通读整本菜谱,只需在目录中找到要做的几道菜,做哪道时再翻到对应页看详细步骤。技能清单就是目录,技能详情就是具体菜谱页。
本质变化:在“任务”与“MCP 工具”之间加了一层过程化的领域知识。模型从“知道有哪些工具”升级为“知道这个领域的老手会怎么用这些工具”,调用因此更内行、更可靠。
做什么:把目标任务的完整流程拆开,标注每部分归谁管。
为什么:绝大多数“上下文爆炸”和“调用混乱”,根源都是把本该分层的内容全部堆进了系统提示词这一层。
怎么做:将内容分三类填写:
做什么:为每个技能写“名称 + 一两句描述”,这是唯一常驻上下文的部分。
为什么:模型靠这段描述做路由决策,描述含糊则后续全错。
怎么做:描述必须回答“什么情况下应该用我”,而不是“我是什么”。例如不写“这是一个数据分析技能”,而写“当需要把查询结果整理为结论先行的分析报告时使用”。
注意:单个描述控制在几十个词以内;技能数量多时关注清单总长度。
做什么:把领域方法论写成面向模型的结构化文档,建议包含:
做什么:将脚本、模板、参考文件放入技能目录,并在详情文档中建立索引。
为什么:部分资料(完整规范、示例数据)体积大但低频使用,不应进入详情文档,应需要时才读取。
注意:文件命名与文档引用一一对应,避免模型“找得到描述、找不到文件”。
做什么:按协议把外部工具注册给模型并编写工具描述。
为什么:Skill 指导“何时用、怎么用”,工具描述说明“能做什么、参数结构是什么”,二者互补。
注意:工具描述聚焦原子能力即可,不要塞入大量流程性内容——那是 Skill 的职责。职责一旦交叉,模型容易绕过技能直接乱调工具。
做什么:系统提示词 = 简短通用规范 + 技能清单 + 加载纪律。
为什么:明确“先看目录、需要时再读详情”的纪律,是渐进式披露生效的前提。
注意:保持系统提示词精简,所有领域细节都通过技能按需进入。
示意性伪代码(通用示例):
system_prompt:角色与通用规范(保持简短)技能清单:- data-report: 当需要把查询结果整理为结论先行的分析报告时使用- doc-format: 当需要按规范排版文档或生成文档模板时使用加载纪律:先判断任务需要哪个技能,再读取该技能详情,不要一次性读取全部技能。skill[data-report] 详情文档(按需加载):目标:产出"结论-证据-建议"三段式报告步骤:1. 调用工具 db-query 获取原始指标2. 校验完整性:缺失值、异常值、时区一致性3. 按三段式组织内容4. 需要图表时调用 chart-render注意:空值不参与环比计算;时间字段统一时区工具:db-query(输入查询语句)、chart-render(输入数据与图型)
问题 1:模型不选技能或选错技能
原因:概括描述写成了名词解释,缺少使用时机;或多个技能描述边界重叠。
解决:改为条件式描述;为每个技能补充“不适用场景”;合并或拆分职责重叠的技能。
问题 2:模型把所有技能详情全部加载
原因:缺少加载纪律指令;或详情被直接内联进提示词,而非外置为可按需读取的文件。
解决:在系统提示词中固化“先目录后详情”流程;把详情文档外置,让模型通过读取动作获取。
问题 3:工具参数仍频繁出错
原因:技能文档缺少工具用法说明,模型只能依赖工具自身参数定义现场猜测。
解决:在技能文档中补充每个工具的调用时机、参数示例与常见坑。
问题 4:单个技能文档太长,加载一次也占用大量上下文
原因:所有深度资料都写进了详情文档。
解决:文档内部再分层——正文只留流程与要点,长资料作为第三层资源按需读取;必要时拆分为多个子技能。
Prompt、MCP 与 Agent Skill 不是替代关系,而是分层协作:Prompt 是指令层,传达当前任务;MCP 是能力层,打通外部动作;Skill 是知识层,沉淀领域方法论。Skill 的灵魂是渐进式披露——用常驻的概括描述做“目录”,用按需加载的详情做“正文”,让有限的上下文窗口只装最有价值的信息。落地关键动作是:分层梳理任务、编写条件式技能描述、结构化详情文档、明确工具职责边界、在系统提示词中固化加载纪律。后续可继续深入技能路由效果的量化评估与回归测试、多技能组合编排、技能库版本化管理等方向,持续提升智能体应用的专业度与可靠性。