Agent开发四要素:Skills、Rules、Prompt与MCP的分工协作体系
发布时间:2026/10/24 3:00:39 锦皓数字建站

在工作中我把这句话讲给不少人听过Agent Skills、Rules、Prompt、MCP它们不是四个需要“二选一”的技术选型而是一套需要同时理解的分工体系。一旦你把四者各自管什么、互相怎么配合弄清楚后面不管是搭一个简单的自动回复机器人还是做一个多工具调度的复杂Agent思路都会顺很多。这篇文章就是冲着“理清楚”去的。我先讲整体设计思路再把Skills与MCP、Rules与Prompt两组最容易混淆的概念拆开对比最后给出一套可以照着做的落地流程和故障排查方法。适合正在做Agent应用开发、做技术选型或者被这几个概念绕晕的读者。1. 整体设计思路为什么这四件事会被同时摆上台面1.1 一个日常场景看四类机制的差别假设你现在有一个“助手Agent”它收到的任务是“帮我整理本周工作周报并翻译成英文发给老板。”如果你只写一段Prompt会发现在很长一段时间里Agent确实能完成这件事但每次完成的格式都不太一样有时直接输出英文有时先给中文再给英文有时把翻译结果放在代码块里老板打开看到一堆反引号。这时候你会想能不能让“翻译成英文”变成Agent一定会做的一个固定动作这就是Skills能解决的场景。你把“周报翻译”拆成一个技能定义好输入中文周报、步骤分段翻译、检查术语、输出英文和最终格式Agent在遇到同类需求时会主动调用这个技能而不是每次都“自由发挥”。再往下走如果这个Agent需要真正访问某个外部系统比如查询内部工时数据、向某个项目管理软件提交内容那就不是Prompt和Skills能覆盖的了。你需要通过MCP服务去连接外部系统让Agent拥有“调外部工具”的能力。MCP解决的是“Agent怎么与外部世界对话”的问题。而Rules负责给整个过程布置“红线”。比如“周报中不允许出现客户敏感信息”“翻译时不得改变数字精度”“所有输出必须使用Markdown格式”。Rules不负责告诉Agent怎么做事只负责限制Agent不能越界。就这么一个场景四类机制全部上场了Prompt描述目标与路径Skills提供做事步骤MCP打通外部工具Rules约束行为边界。它们的配合关系大体是Rules管边界Prompt管表达Skills管内化能力MCP管外部连接。1.2 四者的协作关系与常见误区我接触过不少开发者最容易犯的误区是把所有想让Agent做的事情都塞进Prompt等到Prompt长到几千字、模型开始“记不住前面要求”之后才回头找结构化的办法。Prompt并不是越长越好。模型的注意力窗口虽然是连续的但生效强度会衰减。你让Agent记住“一共十条规定”不如把其中三条真正重要的“不可协商条款”写进Rules再把操作流程切分成Skills让Agent一步步执行。这样Prompt反而可以短下来只承担“交代本次任务的背景、目标、偏好”这一层。另一个误区是把MCP当成Skills的替代品。Skills是Agent自身的能力沉淀它不依赖外部服务MCP是Agent和外部服务之间的管道。一个擅长写代码的Agent它的“代码生成”能力来自Skills而它如果要调用某个云平台API来部署代码走的才是MCP。两者不是竞争关系而是“内功”和“兵器”的关系。所以我倾向于用一张拆解图去理解Rules不可协商的约束永远是最高优先级。Skills可复用、可组合的步骤集合Agent自己的“肌肉记忆”。Prompt当前这轮任务的目标和上下文表达负责“说清楚这次要干什么”。MCP外部工具和数据的统一接入层由Agent按需使用。这四者的优先级从高到低是Rules Skills MCP Prompt。当用户指令与Rules冲突时Rules必须赢当Prompt描述过于模糊而某个Skills恰好吃这个场景时Agent可以直接触发Skills不必每次都等Prompt给全所有细节。2. 核心机制解析Skills与MCP两个“执行层”的边界与配合2.1 Skills写给Agent自己的操作手册你可以在脑海中把Skills想象成一份“作业指导书”。它不是给最终用户看的也不是给程序员看的而是给Agent模型看的结构化文档。它有名字、有描述、有触发条件、有执行步骤有时候还带几个示例。当Agent判断当前任务和某个技能描述匹配时它就会“翻出”这份指导书按步骤执行。Skills的价值有三点第一解决“模型每次表现不稳定”的问题。不写Skill时Agent每次都是临场发挥类似让一个新人凭感觉处理问题写完Skill后Agent每次执行都像老员工照着SOP走输出质量下限明显提高。第二解决“长指令失效”的问题。把大量步骤拆到一个Skill里Prompt里只写“用周报技能处理”模型在需要时再展开技能内容注意力负担小得多。第三解决“能力复用”的问题。一套技能可以服务多个场景。比如“调用搜索并总结”这个Skills既可以被“写行业分析”用也可以被“查资料写邮件”用被不同任务共享。以一个“报告摘要技能”为例描述部分可以这样组织{ name: report_summarizer, description: 当用户提供长文档或链接时提取核心观点并生成300字以内摘要, instructions: [ 1. 获取输入文档内容, 2. 提取中心论点与三个支撑论据, 3. 忽略铺陈和重复信息, 4. 按观点论据结构输出 ], max_output_tokens: 350 }这不是唯一标准但体现了一种思路让Agent知道“什么时候用”“用了之后怎么做”“做到什么程度停”。这个结构的价值比写上几百字复杂的自然语言描述要高得多因为它具备条件判断和执行边界。2.2 MCP打开外部世界的统一管道MCP解决的问题一句话可以概括为让Agent不需要为每个外部工具写一套专属调用方式而是通过一套标准协议去发现工具、调用工具、接收结果。打个比方Skills是Agent自己掌握的厨艺MCP是厨房里那些“接上水电燃气就能用的标准接口”。只要接口是标准的不管是煤气灶还是电磁炉插上去就能用。开发者不需要为每个燃气品牌写一套对接逻辑。MCP服务器一般会暴露三类能力工具Tools可执行的动作比如“查询气温API”“创建工单”“发送消息”资源Resources可读取的数据比如“某个数据库的表结构”“某个项目的配置文件”提示Prompts可复用的提示模板解决不同客户端之间提示片段复用的问题。通过这三类能力Agent可以通过MCP完成“查数据-做决策-执行动作”的闭环。例如在一个“故障报修助手”里MCP服务提供“读取设备状态”资源和“创建维修工单”工具Agent先查资源再判断是否需要创建工单一旦需要就去调用工具。整个过程用户只接触对话界面底层全走MCP。我实测下来最明显的感受是MCP让Agent的能力范围从“模型知识截止日期之前”延伸到“当前真实世界的数据与操作”。但这同时也带来了新问题外部工具返回的数据格式、错误码、权限限制都需要Agent在运行时做判断。如果工具返回了“403无权限”Agent能不能正确解读取决于你在MCP工具描述里是否写清楚了返回值和错误语义。这部分非常考验设计者不能指望模型“天生会处理”。2.3 什么时候用Skills什么时候接MCP我在实际设计系统的时候会先做一个判断“这个能力是Agent自己就能完成的还是必须要外部系统配合”如果Agent不依赖外部系统、只靠模型本身就能完成比如信息整理、文本润色、格式转换、代码生成那优先考虑做成Skills。它的优势是稳定、轻量、不依赖网络和第三方服务。如果任务必须读取外部数据或触发外部操作例如查询实时库存、发送邮件、调用某个内部办公系统的API那么就需要通过MCP接入。MCP在这里的不可替代性在于Agent不仅需要“知道”流程还需要“执行”真实操作。一个容易出现的坑是大家喜欢把“需要调用API”就直接列入Skill步骤指望模型去猜API怎么调。结果模型给出了不存在的参数格式、错误认证方式甚至编造接口文档。正确做法是API调用统一放到MCP服务层Skills只负责编排“做什么”MCP负责“怎么连”。两者配合各司其职。3. 行为约束与表达方式Rules和Prompt的双层结构3.1 Rules不可协商的底线Rules解决的是“绝对不能做什么”和“必须总是做什么”这两类问题。它的特点是稳定、全局、静态不会因为某一次任务不同而改变。例如在面向某个垂直行业的Agent产品中Rules可能会包含不编造数据。没有来源支撑的信息必须明确回答“未找到可靠数据”不执行删除类操作。凡是涉及删除、清空、重置的指令必须先与用户二次确认输出中必须保留原文中所有数字和单位任何换算必须在括号中备注回答医疗、金融类问题时必须附加风险提示与“请咨询专业人士”字样。这些内容如果全部写进Prompt每次调用都要占用大量上下文窗口还可能出现“模型注意力漂移”导致漏遵守。把它们提取为Rules之后系统可以更高优先级的方式注入甚至可以配置为不可被用户指令覆盖。在工程上一部分框架支持在系统层单独配置“不可违反的规则”优先于任何用户Prompt。我个人的习惯是Rules的数量控制在五条以内。超过五条模型遵守的概率会明显下降。如果真的有很多边界要求可以归并同类项或者考虑拆成多个Agent场景而不是把一堆规则压在一个系统里。3.2 Prompt为当前这一轮任务做定制表达Prompt和Rules最大的区别是Prompt通常是临时的、具体的、场景相关的它需要回答“这一次用户到底想让我干什么”。一个有效的Prompt通常包含六个部分角色你是什么身份。例如“你是一名周报编辑助手”。背景为什么会有这个任务。例如“用户本周有三场会议和一次客户拜访”。任务明确要交付什么。例如“把会议纪要和拜访记录整理成一份中英双语周报”。约束这次任务的独特限制。例如“每段不超过五十字”。示例给出一段“标准答案”样例帮助模型理解你想要的风格。输出格式说明交付结构。例如“开头一句话总结然后按项目列要点”。这六部分不一定每次全上但背景和任务至少要清晰。模型不是读心机器你不说清楚“这次为什么做”它只能靠猜猜的准确率就打了折扣。我在写Prompt时特别注意一个地方不要把Rules反复重申。有些开发者喜欢在Prompt里把禁止事项重复三遍结果Rules和Prompt打架模型反而迷糊。正确做法是Rules放在系统级Prompt里只写“跟本次任务相关”的新增要求。只有出现“本次特殊需要覆盖常规规则”的场景时才在Prompt里明确说明并设置优先级标记。3.3 优先级冲突时谁说了算实际运行中会发生这种情况用户说“帮我把所有数据都换成美元汇率来显示”而Rules规定“展示必须保留原始币种换算必须标注”。这时系统应该怎么表现正确答案是Rules胜出Agent应该拒绝“只显示美元”的要求并解释我可以换算并同时显示美元和原始币种。这里的“拒绝”不是对抗用户而是维护产品底线。尤其是金融、医疗、法务等场景一旦模型为了讨好用户而违反底线后果会很难收拾。另一种冲突是Prompt与Skills的冲突用户让Agent“不要调用搜索技能直接凭记忆回答”同时某个Skills默认会在不确定时调用搜索。这种情况我会做一个可配置的策略允许用户显式禁用某项技能。但必须在Rules层面保证“如果回答涉及时效性极强的数据即便用户禁用搜索也必须声明‘此回答未经实时验证’”。处理冲突的通用原则是安全类Rule最高业务类Rule其次Skills建议再次最后才是Prompt。虽然不可能做到绝对通用但作为默认优先级它能让大多数场景的行为保持一致。4. 实操过程与落地路径从概念到可运行的四步法4.1 落地前的“四问”决策清单在任何一个新Agent任务上线前我会先在文档里做一轮拆解。拆解的核心是提四个问题这个任务是否高频如果用户每周都会用同一种方式处理同类内容那就值得沉淀为Skills。这个任务是否需要外部数据或操作如果是就需要MCP而不是在Prompt里硬编API参数。这个任务有哪些不可触碰的边界比如敏感词、数据格式、隐私限制这些写进Rules。这个任务是否每次都有不同要求如果是那Prompt负责接收变化部分而不是把变化写死在Skills里。这四个问题问完之后再动手搭建思路会非常明确。我见过不少反例先找了一堆Prompt模板改了几十个版本最后发现要解决的问题根本不在Prompt层而是对外数据获取不稳定这就等于一直在错误楼层装修。4.2 一个完整的设计实例旅行规划Agent举个例子假设我们要做一个“行程规划Agent”用户输入出发地和天数Agent给出完整行程建议。听起来很简单但真正实现时四类机制全部用上了。Rule层写死三条不编造航班时间和酒店价格凡是具体价格和时段信息必须标注“需以官网实时数据为准”涉及夜间行程必须自动加入安全提示每次回答必须给出至少两个备选方案。Skill层做一个“行程生成”技能步骤包括提取用户偏好按主题分类目的地为每一天分配上午、下午、晚上三个时段输出包含预算级别的行程表。这个技能可以被“一日游”“多日游”“亲子游”等不同任务共用。MCP层接入两个服务一个提供景区开放时间与门票信息一个提供当地天气预报。Agent在生成行程前先通过MCP获取这些实时数据再写进行程计划。Prompt层只负责接收本次会话的用户意图目的地、天数、交通偏好、同行人员等。它不需要知道“怎么定行程”那部分是Skill的职责它只需要说清楚“这次想玩什么”。这样一个完整系统跑起来之后用户感受到的是一个“有常识、守规矩、能给实时建议”的助手。而从开发者角度看每个层面都可以独立修改、独立测试。如果发现“行程生成质量不行”我会先看Skill的步骤和示例而不是去改MCP配置如果发现“Agent偶尔编造酒店价格”那说明Rule没生效要检查规则注入是否正确。4.3 最小可用原则从一层开始而不是全面铺开很多人在刚开始做Agent时容易被“全部上四件套”的想法带着走。我的建议是能用一层解决就不要上四层。如果你只做一个“会议纪要整理”的简单工具也许只需要一个好Prompt就够了上Skills反而增加复杂度。当你发现同一个过程要被反复使用、输出格式始终不稳定时再把相关步骤提练成Skills。等你需要读外部数据、操作外部系统时才去接MCP。而Rules我建议从第一天就建立哪怕只有三条因为后面再补规则总会有遗漏。这也是所谓“演进式架构”的思路每一层都有切入时机不要提前设计过度。我见过有些项目在最开始就接了六个MCP服务看着功能很强实际上六个服务中有四个在真实业务里根本用不上还增加了启动时间和故障点。正确的做法是先跑通最小链路再逐步增加能力。比如旅行规划Agent的第一版可以先用Rules Prompt跑通流程输出一份纯文本行程第二版再引入Skills来固定格式第三版接上MCP获取实时天气。每一步都小到可以快速验证出了问题也容易定位。5. 常见问题与排查技巧实录真实环境里踩过的坑5.1 高频故障速查表下面整理了一些我在实践中反复遇到的典型问题以及对应的排查思路。这套速查表适用于大多数基于大模型开发的Agent应用。现象最可能原因排查方向Agent行为飘忽同样的输入结果差异极大缺少Skills模型全凭临场发挥检查是否提取了可复用的Skills并确认技能描述是否清晰外部工具返回数据后Agent开始编造额外参数MCP工具描述不够完整在MCP工具定义中写清楚参数类型、取值范围、默认值、错误返回场景用户指令明显违反一种约定Agent还是执行Rules没有被系统级注入或被Prompt覆盖调整注入顺序将Rules设为不可覆盖并增加冲突处理策略Skills无法被触发Agent完全“找不到”这个能力技能描述与任务场景匹配度太低重写技能描述加入更多触发关键词和情景示例MCP服务连接成功但Agent反复报错工具不存在工具在MCP Server中注册异常或客户端缓存问题检查MCP Server的工具列表清客户端缓存重新初始化连接Prompt很长但效果很差上下文被无关信息占满关键指令被稀释精简Prompt把固定步骤迁移到Skills把底线迁移到Rules同一套配置不同模型效果差异很大模型对指示遵循能力不同针对目标模型做Propmt和Skills的微调不要在模型间无差别迁移这张表的特点是每个现象都指向“层”的错配。排错时不要只看表层而是先定位问题发生在哪一层再对症下药。5.2 两个独家排查技巧第一个技巧我称之为“规则优先级测试法”。当你不确定某一条约束到底有没有生效时不要直接问“你会遵守吗”而是构造一个测试用例去触发冲突。例如如果我想确认“不允许编造航班价格”这条Rule是否真的起作用我会让Agent去回答一个它不可能知道价格的航班看看它会不会给出具体数字。如果它直接编了一个价格说明Rule没有生效如果它拒绝并给出“请以官网实时信息为准”那Rule生效了。这个方法比空泛地问“你的规则是什么”要可靠得多因为模型在抽象层面往往会说“我会遵守”但在具体执行时不一定能贯彻。第二个技巧是“日志行为溯源法”。很多Agent框架会输出内部的详细日志包括模型的思考片段、调用了哪些工具、触发了哪些技能。遇到奇怪输出时我会先把日志翻出来判断这次结果是由哪一层主导的。如果是Skills主导但输出表现不对那就是技能定义有问题如果是MCP返回的内容本身有误那问题在服务端而不是模型。不用日志就盲目改Prompt是排查问题时的第一大忌。5.3 防止“技能库膨胀”与“规则倦怠”最后分享一个长期维护层面的经验。随着Agent功能不断叠加Skills的数量会越来越多可能几百个。这时候模型每次做“技能检索”的难度也在增加经常出现“明明有某个技能但模型没找到”的情况。解决方式有两个一是在技能描述里增加高频同义词与场景短语二是做技能分组把相近技能放到同一个索引目录下减少模型需要检索的候选数。Rules同样存在“规则倦怠”问题。当规则数量过多或相似度过高时模型对规则的敏感度就会下降。我的做法是每隔一段时间就复盘一次Rules把已经不再是底线的条款删掉把重复的合并确保最终留存下来的都是“违反后果极其严重”的条目。还有一个小细节不要紧抱着一套系统配置不放。不同模型版本对指令的遵循能力有差异换模型后必须重新验证Rules和Skills的效果。我曾经在旧模型上表现完美的技能换到一个新模型后反而触发率下降了不少原因是新模型的思维方式更偏“整体理解”而不是“逐步遵循”后来调整了技能描述结构才恢复稳定。6. 独立判断与经验沉淀我如何从“能用”走到“好用”前面讲了一大堆机制、结构和流程可能看起来很系统但真正让我觉得“这四件事理清楚了”的标志并不是能背出概念而是能在一开始就对“哪个问题该用哪个机制解决”形成直觉。根据我自己的经验形成这种直觉需要刻意练习。每次遇到Agent行为不符合预期时不要急着改代码或改Prompt而是先写下这个问题属于哪一类是边界被突破是能力没触发是外部信息缺失还是目标表述不清坚持做这样的分类大约经过十来个case之后你就不再会被“模型太笨”这类笼统的抱怨牵着走了。还有一点关于工具选型的体会很多人会花很多时间在不同Agent框架和模型API之间比较反而忽略了底层架构设计的训练。框架换起来很快可机制没搭对换什么都一样。Rules写得一团糟、Skills没有沉淀、MCP工具描述全靠模型猜这些问题跟用哪个模型没有关系。所以我会建议新手从“最小但完整”的项目做起一个场景三条规则一个复合技能一个外部数据接口。把这件事完整跑通再去扩展。你会在做的过程中慢慢明白为什么Rules要剥离出来为什么步骤级能力要进入Skills为什么外部调用要统一走协议层。这些体验不是读文档能替代的。Skills、Rules、Prompt、MCP这四个概念单独拎出来任何一项都有大量文档可查但真正把它们协作起来用才是从“调接口”走向“做产品”的关键一步。希望这篇文章能帮你把那层窗户纸捅破。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。