Agent智能体/MCP/Skills
<p>一、Agent</p><p> Agent是一种能够感知环境、进行决策和执行动作的智能体,是感知->规划->行动的<span style="color: rgba(255, 0, 0, 1)">循环</span>,能够以最低限度的配置应对多样化的应用场景;<code>AI Agent = LLM(大脑) + Memory(记忆) + Planning(规划) + Tools(工具)</code>。</p>
<p> 1. 系统构成</p>
<p> A. 感知(Perception):感知是Agent与外部世界互动的桥梁,负责收集和解析环境数据;</p>
<p> B. 规划(Planning):发挥LLM的逻辑推理能力,通过思维链能力实现任务拆解;</p>
<p> C. 记忆(Memory):负责存储信息,为模型提供上下文信息的组件,作用于Prompt,有利于实现持续学习和处理长期任务,侧重于以用户信息为中心,分感觉记忆、<span style="color: rgba(255, 0, 0, 1)">短期记忆和长期记忆</span>,记忆机制分为基于会话、基于列表、基于图谱与基于用户档案等类型;记忆模块的实现依赖存储结构,如短期记忆用键值对内存数据库,长期记忆用向量数据库或知识图谱;</p>
<p> D. 工具(Tools):调用各种工具如API接口来执行复杂的任务,是模型连接外部世界的桥梁;</p>
<p> E. 行动(Action):基于规划和记忆来执行具体的行动;</p>
<p> 2. 关键特征</p>
<p> A. 自主性:无需人工干预即可运行,独立做出决定;</p>
<p> B. 反应式与主动式行为:既能应对环境变化,又能主动采取措施以确保目标实现;</p>
<p> C. 适应性:通过处理新信息和新经验来学习和发展;</p>
<p> D. 目标导向:努力实现预定目标或优化成果;</p>
<p> E. 互动性:与其他代理或人类进行交流和合作;</p>
<p> F. 持久性:持续运行,监控并应对动态环境。</p>
<p> 3. 方式</p>
<p> A. Function Call:通过将用户指令映射到预定义函数或工具,LLM先识别用户意图,再决定调用哪个函数并提取所需参数,更适合简单、明确的任务,强调直接调用工具的高效性;</p>
<p> B. ReAct:即推理+动作,LLM首先思考当前状态与目标,然后选择并调用合适的工具,工具的输出结果又将引导LLM进行下一步的思考与行动,如此循环直到解决问题,更适合复杂、多步骤的任务,强调推理过程的灵活性和可解释性。</p>
<p> 4. 架构模式</p>
<p> A. ReAct:将推理(Reasoning)和行动(Action)紧密结合,形成Thought(分析当前状态,思考下一步行动)—>Action(执行具体操作如工具获取结果)—>Observation(观察行动结果,更新状态)的循环,具有单线程执行、上下文限制和错误积累(一步出错可能导致后续全错)的局限性;</p>
<p> B. Multi-Agent:靠多智能体分工协作处理复杂任务,效率高但架构较复杂,遵循职责分离(每个Agent复制特定领域)、协作机制(由Agent之间通过消息传递协作)、路由决策(由Router或Orchestrator分配任务)的三原则,<span style="color: rgba(255, 0, 0, 1)">注意Sub-Agent是特指某个Agent运行下的子Agent,支持递归嵌套</span>;</p>
<p> C. CodeAct:用代码执行任务,准确性高但对环境要求严;</p>
<p> D. AgenticRAG:比传统RAG更主动,擅长知识检索与更新;</p>
<p> E. Self-Reflection:通过自我修正提升输出可靠性,不过耗时略增。</p>
<p> </p>
<p>二、MCP</p>
<p> MCP(Model Context Protocol)是由Anthropic于2024年底提出的一种通用模型上下文协议,旨在让大语言模型能够安全、高效、结构化地访问外部工具和服务,用来解决工具碎片化、上下文污染及安全性风险的LLM三大痛点。</p>
<p> 1. MCP Server类型</p>
<p> A. stdio类型:采用stdio传输协议,</p>
<p> B. HTTP类型:采用SSE或Streamable HTTP传输协议,适用于本地或远程执行环境。</p>
<p> 2. MCP架构</p>
<p> MCP基于JSON-RPC 2.0协议,采用客户端-主机-服务器架构</p>
<p> Host:用户直接交互的应用(Claude Desktop、Cursor、Windsurf);</p>
<p> Client:Host 应用中管理与特定 Server 通信的组件,模型侧的协议解析器;</p>
<p> Server:连接外部系统的桥梁(数据库、API、本地文件等),实现MCP协议的服务端。</p>
<p> 3. MCP三个操作</p>
<p> Resources(资源)—— 应用控制,读取数据</p>
<p> Tools(工具)—— 模型控制,执行动作 </p>
<p> Prompts(提示)—— 用户控制,复杂指令</p>
<p> 4. mcp.json</p>
<div class="cnblogs_code">
<pre>{
"mcpServers": {
"服务器名称": {
// 配置具体的参数
}
}
}</pre>
</div>
<p> A. 服务器名称:唯一标识符,用于在配置中区分不同的MCP服务器;</p>
<p> B. type:传输方式,定义客户端与MCP服务器之间的通信协议,可自动推断</p>
<p> stdio:标准输入输出流通信,适用于本地环境;</p>
<p> sse:Server-Sent Events,适用于单向数据流;</p>
<p> http:标准HTTP请求响应,适用于本地或远程执行环境;</p>
<p> websocket:双向实时通信。</p>
<p> C. command:要执行的命令或可执行文件路径,当type=stdio时必须,如npx;</p>
<p> npx:下载到临时缓存位置,可能会被自动清理,常用于一次性执行,默认目录C:\Users\你的用户名\AppData\Local\npm-cache。</p>
<p> D. args:传递给命令的参数列表;</p>
<p> E. env:环境变量参数;</p>
<p> F. disabled:是否禁用此MCP服务器;</p>
<p> G. url:远程MCP服务器的完整URL地址;</p>
<p> H. headers:发送到远程服务器的HTTP头部信息;</p>
<p> I. timeout:工具调用的超时时间,默认30000,单位毫秒;</p>
<p> 5. Playwright MCP</p>
<p> Playwright是一个浏览器自动化测试框架,验证网页的交互逻辑,提升开发效率。</p>
<p> 5.1 优点</p>
<p> A. 现代化的架构:采用DevTools Protocol,绕开了WebDriver的性能瓶颈,提供了更快、更可靠的浏览器控制能力;</p>
<p> B. 与生俱来的稳定性:强大的自动等待机制,是Palywright解决业界普遍存在的测试“脆弱性”问题的关键所在;</p>
<p> C. 强大的原生工具链:集成的代码生成器、调试器和追踪查看器,极大地提升了测试脚本的编写与调试效率;</p>
<p> D. 全面的测试能力:原生支持网络请求拦截、移动端设备模拟等复杂场景,无需依赖复杂的第三方库,即可满足现代Web应用的全方位测试要求;</p>
<p> 5.2 参数</p>
<p> headless:false-浏览器会弹出窗口、true-代表无头模式运行</p>
<p> 5.3 工具列表</p>
<div data-zone-id="0" data-line-index="0" data-line="true">
<table class="ace-table" border="1" data-ace-table-col-widths="279;427;"><colgroup><col width="279"><col width="427"></colgroup>
<tbody>
<tr>
<td>
<div data-zone-id="xr1etmv43dghcryfpl09l3wz66okaktevrrxc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true"><strong>工具</strong></div>
</td>
<td>
<div data-zone-id="xr1etmv43dghcryfpl09l3wz66okaktevrrxc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true"><strong>作用</strong></div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1hp49iwoae79q90saaikwzzwirbefqkqlxc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">start_codegen_session</div>
</td>
<td>
<div data-zone-id="xr1hp49iwoae79q90saaikwzzwirbefqkqlxc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">开始一个新的代码生成会话,用于记录 Playwright 操作。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr19mn83893l6dzwz14t25qh6go51ltwhrhxc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">end_codegen_session</div>
</td>
<td>
<div data-zone-id="xr19mn83893l6dzwz14t25qh6go51ltwhrhxc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">结束代码生成会话并生成测试文件。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr14cobyqsdmsemr2dkns2yq9p6eov31bckxc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">get_codegen_session</div>
</td>
<td>
<div data-zone-id="xr14cobyqsdmsemr2dkns2yq9p6eov31bckxc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">获取关于代码生成会话的信息。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1tdwszzqk7r4ss4arohsna9u141ocm3wkxc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">clear_codegen_session</div>
</td>
<td>
<div data-zone-id="xr1tdwszzqk7r4ss4arohsna9u141ocm3wkxc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">清除代码生成会话而不生成测试文件。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1e88iinovv6qljjekpufded11sb30pbctxc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_navigate</div>
</td>
<td>
<div data-zone-id="xr1e88iinovv6qljjekpufded11sb30pbctxc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">导航到一个 URL。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1zpv36m4nez31b4npjfq5vn5i7ojd0km7xc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_screenshot</div>
</td>
<td>
<div data-zone-id="xr1zpv36m4nez31b4npjfq5vn5i7ojd0km7xc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">对当前页面或特定元素进行截图。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1to1ryfr4mtztze03ndqsm15d8qbn4lr2xc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_click</div>
</td>
<td>
<div data-zone-id="xr1to1ryfr4mtztze03ndqsm15d8qbn4lr2xc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">点击页面上的元素。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr13ekihi8r7dl7pjdqhccu12rfs6frku52xc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_iframe_click</div>
</td>
<td>
<div data-zone-id="xr13ekihi8r7dl7pjdqhccu12rfs6frku52xc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">点击 iframe 中的元素。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr14mn50q1fegdpcyw2qu2f5ddw8ontvfm2xc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_iframe_fill</div>
</td>
<td>
<div data-zone-id="xr14mn50q1fegdpcyw2qu2f5ddw8ontvfm2xc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">在页面中的 iframe 里填充某个元素.</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr17p7fvqvum6f0wq5ylpjk7d31plfzrsgvxc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_fill</div>
</td>
<td>
<div data-zone-id="xr17p7fvqvum6f0wq5ylpjk7d31plfzrsgvxc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">填写输入字段。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr19khpahq5v5r98hyzw0s7ph5l8w7difl5xc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_select</div>
</td>
<td>
<div data-zone-id="xr19khpahq5v5r98hyzw0s7ph5l8w7difl5xc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">使用 Select 标签选择页面上的元素。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1cztmp4fh21j48q6v1yuf2zz5hob61iiqxc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_hover</div>
</td>
<td>
<div data-zone-id="xr1cztmp4fh21j48q6v1yuf2zz5hob61iiqxc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">悬停在页面的元素上。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1ghwte544mil16vy5ctvwa1rsj6i5rkkaxc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_upload_file</div>
</td>
<td>
<div data-zone-id="xr1ghwte544mil16vy5ctvwa1rsj6i5rkkaxc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">将文件上传到页面中的 input 元素.</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1m8kgv19qz596l2elf419a28ae6kndgq5xc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_evaluate</div>
</td>
<td>
<div data-zone-id="xr1m8kgv19qz596l2elf419a28ae6kndgq5xc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">在浏览器控制台执行 JavaScript。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1uj6njwrl0ioqga7s62tb026fq78d6h13xc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_console_logs</div>
</td>
<td>
<div data-zone-id="xr1uj6njwrl0ioqga7s62tb026fq78d6h13xc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">检索浏览器的控制台日志(带过滤选项)。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1ujw525uzvl1cws3p47a8ky01ohi6jo60xc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_resize</div>
</td>
<td>
<div data-zone-id="xr1ujw525uzvl1cws3p47a8ky01ohi6jo60xc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">使用自定义尺寸或设备预设来调整浏览器视口大小。支持 143 种以上的设备预设,包括 iPhone、iPad、各类 Android 设备以及桌面浏览器,并提供正确的 User-Agent 和触控(Touch)模拟。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1rjfg9jonbs9azaoo8f0z5lb8u1ylbe13xc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_close</div>
</td>
<td>
<div data-zone-id="xr1rjfg9jonbs9azaoo8f0z5lb8u1ylbe13xc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">关闭浏览器并释放所有资源。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1bwjbb3u30yl2tsij012my7h05dmt5fn9xc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_get</div>
</td>
<td>
<div data-zone-id="xr1bwjbb3u30yl2tsij012my7h05dmt5fn9xc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">执行 HTTP GET 请求。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1jd40baopfi2o9qmygbupz7ue52k4p2rexc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_post</div>
</td>
<td>
<div data-zone-id="xr1jd40baopfi2o9qmygbupz7ue52k4p2rexc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">执行 HTTP POST 请求。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1jcek7r5jpz1tqubt7ycsenek1wjce9u2xc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_put</div>
</td>
<td>
<div data-zone-id="xr1jcek7r5jpz1tqubt7ycsenek1wjce9u2xc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">执行 HTTP PUT 请求。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1csztp1ifhiloa7yovzt4rnqlvhjgrr8zxc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_patch</div>
</td>
<td>
<div data-zone-id="xr1csztp1ifhiloa7yovzt4rnqlvhjgrr8zxc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">执行 HTTP PATCH 请求。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1ttqdbbgc6q5bspnq69qmkt0dzmbw8f9sxc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_delete</div>
</td>
<td>
<div data-zone-id="xr1ttqdbbgc6q5bspnq69qmkt0dzmbw8f9sxc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">执行 HTTP DELETE 请求。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr18whi301mqd3sms1qnrm72nrqjdy6yy6ixc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_expect_response</div>
</td>
<td>
<div data-zone-id="xr18whi301mqd3sms1qnrm72nrqjdy6yy6ixc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">请求 Playwright 开始等待某个 HTTP 响应。该工具只会启动等待操作,但不会阻塞或等待该操作完成。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr10zi69f9ptvvbgmjmdryh0dzsfo2udgd7xc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_assert_response</div>
</td>
<td>
<div data-zone-id="xr10zi69f9ptvvbgmjmdryh0dzsfo2udgd7xc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">等待并校验之前已发起的 HTTP 响应等待操作。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1udh19lvem5dz8f6cafesbpzor9ftgetpxc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_custom_user_agent</div>
</td>
<td>
<div data-zone-id="xr1udh19lvem5dz8f6cafesbpzor9ftgetpxc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">为浏览器设置自定义 User Agent。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1suweemej8s63pp7kf3nsum7tzyjbwewzxc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_get_visible_text</div>
</td>
<td>
<div data-zone-id="xr1suweemej8s63pp7kf3nsum7tzyjbwewzxc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">获取当前页面的可见文本内容。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1yvtgfpjlfr1m6fskjim5zns2pcti8guoxc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_get_visible_html</div>
</td>
<td>
<div data-zone-id="xr1yvtgfpjlfr1m6fskjim5zns2pcti8guoxc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">获取当前页面的 HTML 内容。默认情况下,输出结果会移除所有 <script> 标签,除非显式将 removeScripts 设置为 false。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1vvuiqbusf28din0ud1ra7koa3qk480a5xc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_go_back</div>
</td>
<td>
<div data-zone-id="xr1vvuiqbusf28din0ud1ra7koa3qk480a5xc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">在浏览器历史中后退。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr16ezj5j0iz7dg0czjpz7du1hon7i128jsxc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_go_forward</div>
</td>
<td>
<div data-zone-id="xr16ezj5j0iz7dg0czjpz7du1hon7i128jsxc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">在浏览器历史中前进。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1ub3lv9r0fkel6q5k2ubimcc5vqkqwwu5xc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_drag</div>
</td>
<td>
<div data-zone-id="xr1ub3lv9r0fkel6q5k2ubimcc5vqkqwwu5xc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">将元素拖动到目标位置。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1ola3yoa6tpqotoy02zf5ocdvz5gy63ekxc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_press_key</div>
</td>
<td>
<div data-zone-id="xr1ola3yoa6tpqotoy02zf5ocdvz5gy63ekxc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">按下键盘键。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1pt8sh431tmco8ip6i4mr4itsmoksgip4xc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_save_as_pdf</div>
</td>
<td>
<div data-zone-id="xr1pt8sh431tmco8ip6i4mr4itsmoksgip4xc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">将当前页面保存为 PDF 文件。</div>
</td>
</tr>
<tr>
<td>
<div data-zone-id="xr1q3onpf28ijlsbw9ac952zjkyt8jaar8dxc1zjvonssryl1mjgvi3q69pv1uvf8mls9t" data-line-index="0" data-line="true">playwright_click_and_switch_tab</div>
</td>
<td>
<div data-zone-id="xr1q3onpf28ijlsbw9ac952zjkyt8jaar8dxc18h4881msem40ywsn0njhqfr77e703hme" data-line-index="0" data-line="true">点击一个链接并切换到新打开的标签页。 </div>
</td>
</tr>
</tbody>
</table>
</div>
<p> 5.5 mcp.json</p>
<div class="cnblogs_code">
<pre>{
"mcpServers": {
"Playwright": {
"command": "npx",
"args": [
"-y",
"@executeautomation/playwright-mcp-server"
],
"env": {}
}
}
}</pre>
</div>
<p> 5.6 安装</p>
<p> A. 安装playwright:npm install playwright;</p>
<p> B. 只安装chrome浏览器:npx playwright install chromium。</p>
<p> 6. 其它MCP</p>
<p> A. Chrome DevTool MCP:Chrome DevTool是一个页面深度调试与性能分析工具。</p>
<p> A. MySQL MCP</p>
<p> B. Draw-io画图:https://github.com/DayuanJiang/next-ai-draw-io;</p>
<p> </p>
<p>三、Skill</p>
<p> Skill是一份清晰、严谨、可执行的指令文档,用于明确告诉大模型在什么条件下,按照哪些步骤,产出什么结果。</p>
<p> 1. Skill的结构</p>
<p> A. 一个技能中必须包含一个SKILL.md文件,还可以根据实际需求添加其他文件,如可参考的示例examples、可参考的脚本scripts、可参考的模板templates等,例如:</p>
<p><img src="https://img2024.cnblogs.com/blog/1488713/202603/1488713-20260312095505394-2009750422.png"></p>
<p> B. SKILL.md文件格式</p>
<p><img src="https://img2024.cnblogs.com/blog/1488713/202603/1488713-20260312095554473-902663361.png"></p>
<p> 2. Skill的特点与使用场景</p>
<p> A. 特点:具有结构化、大模型可动态按需加载的优点;</p>
<p> B. 使用场景:用于保证输出结果的一致性与规范性、自动化重复性工作流、总结与共享专业能力。</p>
<p> 3. webapp-testing:网页应用测试</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/ruhuanxingyun/p/19690417
頁:
[1]