news 2026/10/2 18:50:06

Agent Skills与MCP深度解析:让Agent从“会说”到“会做”

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Agent Skills与MCP深度解析:让Agent从“会说”到“会做”

Agent Skills 和 MCP 这两个词,最近在 AI 工程圈里已经快被说烂了,但真正把它们放到同一个项目里跑过一遍的人,可能还没那么多。我原本也觉得,一个是指令技能封装,一个是工具调用协议,各管各的;直到我自己在一个自动化测试项目里同时引入两者之后,才意识到它们根本不是并列关系,而是一个管脑子、一个管手脚,而且只有配合起来才能把 Agent 从"会说"变成"会做"。这篇文章我不打算从概念定义开始抄一遍文档,而是结合我实际用 Playwright MCP、Chrome DevTools MCP,以及自建 Skill 库的经验,把这两者的关系拆开揉碎讲清楚。

1. 先把主角认清楚:Agent Skills 和 MCP 到底是什么

1.1 Agent Skills:给 Agent 塞进一套"操作手册"

Agent Skills 说白了,就是我们可以给 Agent 预置的一套可复用的"技能包"。这个技能包不只是一个简单的提示词,而是包含任务目标、执行步骤、边界条件、常见坑位、甚至少量示例代码的结构化知识集合。比如你想让 Agent 成为一个合格的"网页信息采集员",传统做法是每次对话时把采集步骤、选择器规则、反爬策略全部敲一遍;而有了 Skill,你可以把这些内容写进一个SKILL.md文件里,告诉 Agent "遇到网页采集任务时,先读这个 Skill,再按里面的步骤走"。

我自己实践的 Skill 目录大致长这样:

skills/ web_scraper/ SKILL.md examples/ 12306_ticket_query.md amazon_price_trace.md sql_optimizer/ SKILL.md prompts/ index_design.md

SKILL.md里写的不只是操作步骤,还包括了什么时候应该激活这个技能、什么情况下需要主动停止并请求人工介入。这其实是在给 Agent 划定"能力边界",避免它在一个任务上无限发散。很多团队觉得 Agent 不听话,其实不是模型不行,而是没有给它足够清晰的"操作手册",导致每次都在现场发挥。

1.2 MCP:给 Agent 装上了标准化的"插座"

MCP(Model Context Protocol,模型上下文协议)是一个让 AI 模型与外部工具、数据源进行标准化交互的协议。你可以把它理解为电脑上的 USB-C 接口:只要你的设备支持 USB-C,那么不管接的是显示器、硬盘还是扩展坞,都能即插即用。MCP 想做的事情也一样——只要工具方按 MCP 协议封装一个 Server,任何支持 MCP 的 Agent 客户端就能直接调用这个工具的能力,不用为每个工具单独写一套适配逻辑。

我们经常在贴子里看到类似wss://api.xiaozhi.me/mcp/?token=<your_token>这样的 endpoint,这就是一个通过 WebSocket 方式暴露的远程 MCP 服务地址。wss意味着这个连接走的是加密的 WebSocket,通常用于实时双向消息推送;而本地工具则更多通过 stdio 方式启动子进程通信。MCP 规范现在主要支持 stdio、HTTP(Streamable HTTP)以及 WebSocket 等传输层,底层请求都遵循 JSON-RPC 2.0 框架。

MCP 和之前那些工具调用框架最大的不同,在于它把"工具发现—鉴权—请求—响应"这个流程标准化了。以前接一个工具就要写一套 adapter,还要处理各种奇奇怪怪的参数格式;现在只要这个工具实现了 MCP Server,Agent 就能通过tools/list拿到工具清单,通过tools/call发起调用,整个流程完全一致。这也是为什么 MCP 能在这么短时间里被各家 Agent 产品广泛支持的原因。

2. 拆开看本质:Skills 是"招数",MCP 是"经脉"

2.1 一个武侠类比帮你快速理解两者分工

如果非要用一个类比,我会把 Agent 比作一个武林高手。Skills 就是他的招式库,比如降龙十八掌、打狗棒法,每个招式都有固定的心法口诀和步伐套路;而 MCP 则像是打通任督二脉的经脉系统,真气能顺畅地流转到四肢百骸,让那些招数得以真正打出来。没有 Skills,Agent 就像一个内力深厚但脑袋空空的人,不知道该怎么出招;没有 MCP,Agent 就像一个只会背口诀但手脚被绑住的武林高手,什么也做不了。

这个类比虽然有点江湖气,但确实能说明问题:Skills 关注的是"做什么、怎么做",MCP 关注的是"通过什么通道和介质去做"。Skills 里面可能包含工具调用的顺序、参数选择倾向、失败重试策略;MCP 则负责把 Agent 的意图翻译成具体工具的调用指令,再把结果拿回来交给模型理解。

2.2 软件协议还是硬件协议?MCP 更接近"软件开发中的接口规范"

有人看到"MCP 是软件协议 硬件协议那个概念叫什么来着",其实想问的是它属于哪一层的协议。MCP 是纯应用层软件协议,跟 HTTP、WebSocket 这些传输协议层级不同;它更像是一套"接口规范"——约定好了请求体长什么样、错误码怎么定义、鉴权信息放在哪。类比到硬件世界,它最接近的是 USB 接口规范;软件世界里,它和 LSP(Language Server Protocol)的思路一脉相承:通过统一协议屏蔽底层差异,让各类客户端能共享同一种交互模式。

理解这一层很重要,因为很多人会把 MCP 当成某种具体的传输协议去配置,结果一遇到wss://或stdio://就迷糊。实际上 MCP 不关心你是用 WebSocket 还是标准输入输出,它只定义"业务层"的交互规则。传输方式是可替换的,而协议本身是稳定的。这点在我们排查问题的时候特别有用——连接不上时先确认传输层,再排查协议层,能少走好多弯路。

2.3 对比一张表:两者关注维度完全不同

对比项Agent SkillsMCP
定位能力封装与行为编排工具接入与通信标准化
粒度面向具体任务(如"采集商品价格")面向通用工具能力(如"打开浏览器")
内容步骤、提示词、模板、边界条件工具定义、请求/响应格式、鉴权方式
复用方式按需加载到上下文客户端自动发现并调用
举例电商采集 Skill、SQL优化 SkillPlaywright MCP、Chrome DevTools MCP、文件系统 MCP
失败影响Agent 行为偏离或任务中断工具调用超时或返回错误

从表格能看出,Skills 和 MCP 并不在一个维度上,不存在谁替代谁。MCP 强调的是"连得上",Skills 强调的是"用得好"。现实里很多 Agent 项目只接了 MCP 没有沉淀 Skills,结果模型虽然能调用工具,但调用得很笨,经常用错参数、走错流程;反过来只有 Skills 没有 MCP,那 Skills 里写的步骤也只能是纸上谈兵。

3. 关系核心:MCP 提供"能力接口",Skills 教会 Agent 怎么用好这些接口

3.1 "认知"和"交互"的闭环

我自己的体会是,Agent 工程化里最关键的闭环是:模型负责决策,Skills 提供决策依据,MCP 负责执行交互。举个例子,在网页自动化场景里,Playwright MCP 会暴露browser_navigate、browser_click、browser_snapshot这些工具,它们能力很强,但如果你只给模型一个工具列表,模型很可能不知道正确的点击顺序是什么,也不懂怎么处理弹窗、懒加载这些意外情况。

这时候如果有一个名为web_checkout_flow的 Skill,里面写清楚了"进入商品页—加购物车—填写地址—提交订单"的标准化流程,还额外标注了"遇到 anti-bot 检测时暂时停止并截图反馈",Agent 就能按 Skill 的指引去调用 MCP 工具。所谓 Skilles 提供"认知",MCP 提供"交互",两者合在一起,Agent 才能从"有手"变成"上手"。

3.2 一个典型案例:自动采集商品信息

我最近帮朋友搭过一个采集化妆品价格的小项目,目标站点是某个电商平台。只接 Playwright MCP 的版本是这样的:用户说"帮我看看那款面霜多少钱",Agent 会先调用browser_navigate打开首页,然后试图搜索,但因为不知道站点特定的搜索框选择器,经常点错位置;而且它每次重新开始都要摸索一遍流程,效率很低。

后来我给项目加了一个ecommerce_price_lookupSkill,内容大致包括:

  • 触发条件:当用户请求涉及该电商平台的价格查询时自动加载。
  • 标准流程:先访问商品搜索页,使用固定搜索框选择器,等待搜索结果卡片渲染,再提取价格字段。
  • 注意事项:页面存在延迟加载,必须先滚动到底部再截取数据;请求频率过高会被限制,两次查询之间至少间隔 3 秒。
  • 兜底策略:如果 5 秒内未能找到价格元素,放弃并提示用户手动输入商品链接。

加了 Skill 之后,Agent 的行为立刻变得稳定得多。它不再是"每次临场发挥",而是像有经验的老手在按 SOP 办事。而底层真正执行操作的还是 Playwright MCP——通过browser_type、browser_click、browser_snapshot这些工具完成了所有实际动作。

3.3 Skills 还能决定 MCP 工具的"正确姿势"

MCP Server 暴露工具时,虽然会提供参数 schema,但模型未必知道怎样传参最合理。比如 Chrome DevTools MCP 里有一个take_screenshot工具,参数里没有规定"截图前要不要等页面稳定",而很多页面渲染是异步的,直接截图会拍到空白。如果 Skill 里明确写了"调用take_screenshot前先等待网络空闲事件",模型就会在调用前主动插入等待逻辑。

这个细节挺重要的。MCP 工具像一把好刀,但刀法好不好,要看 Skills 调教得好不好。工具调用参数里隐含的"时序关系"、"失败重试策略"和"上下文信息"是模型从 schema 里学不来的,只能沉淀在 Skill 文档里。

3.4 多 MCP Server 协同时的"编排大脑"

当项目里不止一个 MCP Server 时,Skills 的编排价值会更明显。比如同时接了 Playwright MCP 和一个数据库 MCP Server,用户提了一个需求:"从数据库里找出所有订单金额超过 500 的用户,然后去他们的个人主页抓取头像。"这个任务需要先查数据库,再遍历浏览器访问每个主页。如果没有 Skill,模型很可能在第一步就把所有用户 ID 一股脑塞给浏览器工具,导致上下文爆炸。

而一个设计良好的 Skill 会这样引导Agent:先在数据库里查询并只保留前 10 个用户 ID,然后逐个取出 ID 调用浏览器导航,每处理完一个就释放相关上下文。这种"跨工具状态管理"的经验,只有写进 Skill 才能被稳定复用。MCP 把工具连接好了,但工具之间的配合策略,必须靠 Skills 来承载。

4. 实战:在真实项目里编排 Skills + MCP 的完整配置

4.1 本地开发环境怎么配置 MCP Server

以 Claude Desktop 或 Trae IDE 这类客户端为例,MCP Server 的配置文件一般长这样。这里给出 Playwright MCP 和 Chrome DevTools MCP 的配置:

{ "mcpServers": { "playwright": { "command": "npx", "args": ["@playwright/mcp@latest"] }, "chrome-devtools": { "command": "npx", "args": ["chrome-devtools-mcp@latest"] } } }

各客户端的配置路径不一样:Claude Desktop 在claude_desktop_config.json里,Trae IDE 一般在项目级的.trae/config里。关键是command要能被 shell 直接执行,npx依赖 Node 环境,建议先用node -v确认版本在 18 以上。远程 MCP Server 则使用 URL 方式配置:

{ "mcpServers": { "remote-xiaozhi": { "url": "wss://api.xiaozhi.me/mcp/?token=<your_token>" } } }

如果你在官方文档或别人分享的配置里看到类似的wss://地址,注意把 token 换成自己的,不要直接用别人的凭据,否则既不安全,也可能随时失效。

4.2 编写一个真正让 Agent"变聪明"的 Skill

我习惯把 Skills 放在一个独立仓库里,结构如下:

skills/mcp_web_automation/SKILL.md skills/mcp_web_automation/examples/baidu_search.md

SKILL.md的核心部分是"当 Agent 需要控制浏览器时,应遵循以下操作准则":

# Web 自动化通用准则 ## 适用场景 用户要求打开网页、点击元素、填写表单、截图、抓取内容等浏览器交互任务。 ## 工具使用顺序 1. 调用 `browser_navigate` 跳转到目标 URL。 2. 调用 `browser_snapshot` 获取当前页面可访问性快照,而不是盲目猜测选择器。 3. 根据快照中的角色、名称、定位符来调用 `browser_click` 和 `browser_fill`。 4. 截图前先使用 `browser_wait_for_selector` 等待关键元素可见。 ## 注意事项 - 如果快照为空,先滚动页面或等待 1-2 秒再重新获取。 - 遇到弹窗时优先尝试关闭按钮,不要直接忽略。 - 如果连续三次操作没有改变页面状态,停止操作并向用户报告。

这个 Skill 最大的作用,是让 Agent 在所有浏览器任务里形成统一的调用习惯。实际上,我在多个项目里复用同一个 Skill,即使底层 MCP Server 从 Playwright 换成了其他实现,Skill 仍能继续指导 Agent 完成任务——因为底层工具名字变了,但操作逻辑是相通的。

4.3 当 MCP 是安全测试工具时:Burp Suite 与 Skill 的组合

最近有个很热的内容是"Trae IDE 搭载 Burp Suite MCP Server 完整指南",让 AI 能直接操控 Burp Suite。对于做安全测试的人来说,这个场景非常实用。Burp Suite MCP 会让 Agent 获得代理流量查看、请求重放、漏洞扫描等能力,但直接用 MCP 工具时,模型并不懂渗透测试的流程。

这时候一个名为burp_scan_guide的 Skill 就能派上用场。它定义了标准的测试流程:先通过 MCP 的get_proxy_history获取请求列表,然后根据用户目标筛选出可疑请求,再用send_to_repeater和send_request_manual进行重放测试。里面还会用大量提示词要求 Agent 在发送修改请求前先保存原始请求,方便对比。这样"Burp Suite 的能力"加上"安全测试的流程经验"才真正发挥出 Agent 渗透助手的作用。

4.4 IDE 场景:让 SQL 优化也变得可复用

JetBrains 系 IDE 的插件(比如通义灵码)也逐步支持通过 MCP 连接数据库。你可以在配置里接入一个数据库 MCP Server,从而实现自然语言查询 Oracle、MySQL 等数据库。但直接让 Agent 查询生产库很危险。于是我写了一个safe_sql_advisorSkill,里面明确要求:任何写操作语句必须先经过EXPLAIN PLAN验证,影响行数超过阈值时自动取消;查询时先读取对应表的最新索引文档,再决定是否使用SELECT *。

这个 Skill 的本质,是把 DBA 的日常经验沉淀成规则。MCP 只是给 Agent 开了一扇访问数据库的窗户,而 Skill 告诉 Agent 什么能看、什么不能碰、碰之前要准备什么。这比单纯在提示词里"劝一句"可靠得多,因为 Skill 的内容会在每次任务执行时被结构化地加载、评估。

5. 常见问题与排查:Agent 找不到工具、MCP 连不上、Skills 不生效

5.1 Codex 提示无法找到 MCP Server

Codex 这类 CLI 工具对 MCP 的配置要求比较苛刻,我遇到过几次"codex无法找到mcp"的情况,最常见的原因是 MCP server 没有在对话启动前被加载。Codex 一般是读取~/.codex/mcp.json或环境变量里配置的 server 列表,你需要先运行类似codex mcp list的命令确认 server 是否已被识别。如果列表里没有,检查配置文件里的name是否唯一,command路径是否为绝对路径。另一个坑是,启动 codex 后手动新增的 MCP server 不会自动热加载,必须重启会话。

5.2 Dify/浏览器 MCP 连接不上:先分清三层问题

在 Dify 这类低代码平台里接浏览器 MCP,如果连不上,我建议按三层排查:传输层、MCP 服务层、工具执行层。先看客户端日志里有没有 "WebSocket connection failed" 或 "stdio process exited" 这类信息,如果是远程wss://地址,还要确认证书是否有有效、token 是否过期。接下来看 MCP Server 是否注册成功,在 Dify 的工具列表里能不能看到对应工具。最后再点一次工具测试,把返回的错误信息拿来看——是超时、权限不足还是选择器没找到。三层逐层定位,基本能解决 80% 的问题。

5.3 Playwright MCP 与 Browser Use MCP 的选择问题

网上经常有人问 "browser use mcp 跟 playwright mcp 有什么区别"。我的对比表:

维度Playwright MCPBrowser Use MCP
底层驱动Playwright(微软维护)Browser Use 自研的浏览器自动化库
稳定性很高,更新频繁不错,但对复杂页面的支持略逊
特色能力直接生成 Playwright 代码片段、全页截图与 AI 代理深度集成,自然语言操作更直接
典型场景测试自动化、数据采集快速原型、个人 AI 助手浏览网页

实操上,如果你写的是严肃的自动化测试,我更推荐 Playwright MCP;如果只是做一个临时爬虫或者验证想法,Browser Use MCP 上手更快。但无论选哪个,Skill 都可以复用,因为 Agent 操作浏览器的逻辑模式高度一致。

5.4 Skills 不生效的排查三板斧

技能包明明写好了,Agent 却视而不见,这事我也遇到过。一般就三个原因:一是 Skill 的目录命名和描述与用户意图匹配度太低,比如文档里全是"处理页面交互"这种泛泛之词,模型不会主动关联;二是 SKILL.md 的前 10 行没有把触发条件写清楚,Agent 读完之后也不知道该不该用;三是客户端有缓存,新加的 Skill 需要清缓存或重启进程才能被识别。排查时先手动在对话里问一句"你有哪些可用技能",看模型能否准确列出目标 Skill;列不出来就说明注册或索引有问题,列得出来却不主动用,那就是描述粒度问题。

6. 关于两者关系的一点实践总结

我踩过不少坑之后,最大的体会是:不要为了赶时髦接一堆 MCP Server,也不要迷信把 Skills 堆得越多越好。一个 Agent 项目能不能真正提效,取决于你是否为每一个 MCP Server 配好了对应的使用 Skill。先想清楚这个 Agent 要承担哪几类核心任务,比如"网页采集、SQL 查询、安全测试",然后为每类任务写一个高质量 Skill,再去选型 MCP Server,让 Server 提供原始能力,让 Skill 提供使用经验。跑通一个组合后,再逐步复制到其他场景。

另外一个小技巧:把 Skill 文档和 MCP 配置一起纳入版本管理,Skill 单独一个仓库,MCP 配置用环境变量区分本地开发和线上部署。这样当你想给新成员交付一套 Agent 工具链时,只需要 clone 仓库并运行一条安装脚本,他立刻就能得到一个既会用工具、又懂流程的 Agent。这种工程化沉淀的价值,远大于在某个聊天界面里反复调提示词。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 18:49:06

openrig:开源多相机同步采集与三维重建一体化平台

我不止一次在三维重建的交流群里看到有人拿着“openrig”这个标题来问&#xff1a;“这到底是什么&#xff1f;是集群管理工具还是渲染农场的控制器&#xff1f;”如果是放在五年前&#xff0c;我可能也会往算力调度那方向猜。但如果你和我一样常年在摄影测量和多相机采集这个坑…

作者头像 李华
网站建设 2026/10/2 18:48:17

模拟Linux管道操作符:从fork到dup2的底层实现

看到这个标题&#xff0c;可能有人会觉得&#xff0c;管道操作符不就是Shell命令行里的那个“|”符号吗&#xff0c;有什么好深入的&#xff1f;我刚入行时也这么想&#xff0c;直到有一天我尝试在Linux下用C语言亲手模拟一遍管道操作符&#xff0c;才意识到那个“|”背后藏着一…

作者头像 李华
网站建设 2026/10/2 18:47:48

Qwen2.5-VL-7B视觉语言模型微调:从指令跟随到vLLM部署

简介&#xff1a;面向AI研究与开发者的视觉语言指令微调实践项目&#xff0c;基于Qwen25-VL-7B-Instruct模型&#xff0c;聚焦图文混合指令的跟随与高效训练&#xff0c;帮助读者解决多模态模型定制化微调中的数据处理、训练配置与推理部署问题。压缩包共47个文件、16.27MB&…

作者头像 李华
网站建设 2026/10/2 18:47:47

AcFun榜单Python爬虫实战:接口分析、多线程与反爬应对

用 Python 写过爬虫的朋友应该都清楚&#xff0c;真正推动你进步的不是教科书里的 demo&#xff0c;而是带着真实业务诉求的小项目。前阵子我在做内容选题盘点&#xff0c;需要快速掌握 AcFun 上各分区当前哪些视频在霸榜、热度集中在哪些题材、头部作者的产出情况&#xff0c;…

作者头像 李华
网站建设 2026/10/2 18:46:54

YOLOv8无人机航拍牧羊识别:从训练到部署全流程实战

简介&#xff1a;本资源为基于YOLOv8的无人机航拍牧羊目标检测项目代码&#xff0c;面向深度学习与计算机视觉方向的学习者、研究者及需要落地航拍牲畜识别方案的开发者。项目围绕无人机视角下的羊群检测任务&#xff0c;提供从数据配置、模型训练到推理部署的完整工程结构&…

作者头像 李华
网站建设 2026/10/2 18:46:36

RT-Super:面向临床的纵向医学影像与报告联合分割架构

1. 项目本质与临床价值定位RT-Super这个名字乍一听像某个开源框架或硬件加速库&#xff0c;但其实它是一套专为医学影像分析设计的新型深度学习架构&#xff0c;核心目标非常明确&#xff1a;从患者随访过程中积累的纵向影像数据&#xff08;比如连续几个月甚至几年的MRI或CT扫…

作者头像 李华