怎么把任意网站变成 Skill?
准备工作
- 目标网站:选择一个你每天都会使用的、有明确重复操作的网站(例如 GitHub、Notion、Jira)。
- 浏览器:Chrome 或 Edge(需包含开发者工具)。
- AI 助手:能够上传文件并生成代码的大语言模型(如 ChatGPT、Claude 等)。
- 基础认知:理解 Skill 的本质是一份 Markdown 操作手册 + 可选脚本,不是复杂程序。
🚶 第一步:解决网站的登录认证
目标:让 Skill 能“代表你”访问需要登录的网站。
方式 A:直接复用 Cookie(最简单)
- 登录网站:在浏览器中正常登录目标网站。
- 复制 Cookie:
- 按
F12打开开发者工具 → 切换到Application(应用程序)标签页。 - 在左侧找到
Cookies→ 点击目标网站的域名。 - 在右侧表格中,任意一条 Cookie 记录上右键 → 选择 “复制” → “复制全部”(或类似选项),将整个 Cookie 字符串复制到剪贴板。
- 按
- 保存 Cookie:
- 在你的 Skill 项目目录(例如
my-skills/github-create-issue/)中,创建一个配置文件(如cookies.txt或直接写在后续的脚本里)。 - 将复制的 Cookie 字符串完整粘贴进去。
- 注意:Cookie 会过期,过期后重复此步骤刷新即可。
- 在你的 Skill 项目目录(例如
方式 B:用 CDP 自动登录(进阶)
- 如果你想完全自动化登录,可以在 Skill 中编写一段脚本,通过 Chrome DevTools Protocol (CDP) 直接复用你电脑上已登录的 Chrome 浏览器用户数据(Profile)。这样每次执行 Skill 时会自动“继承”登录态。
- 新手建议先使用方式 A,跑通流程后再尝试。
📹 第二步:用 Chrome HAR 录制你的目标操作
目标:录制你想自动化的那个具体操作,生成 HAR 文件(HTTP Archive,即浏览器网络请求的完整存档)。
录制准备
- 打开浏览器开发者工具(
F12)。 - 点击 Network(网络) 标签页。
- 确保左上角的红色录制按钮处于 开启状态(红色)。
- 勾选「Preserve log」(保留日志),防止页面跳转时清空记录。
执行录制
- 回到网站页面,只做你想自动化的那一个操作,并且尽量保持“干净”:
- ✅ 正确示例:在 GitHub 上创建一个 Issue → 点击“New Issue” → 填写标题和描述 → 点击“Submit”。
- ❌ 错误示例:创建 Issue 的过程中,又去点了其他仓库、浏览了其他页面。
- 操作完成后,立即回到开发者工具的 Network 标签页。
- 在任意一个网络请求上 右键 → 选择 “Save all as HAR with content”(将所有内容另存为 HAR)。
- 将生成的
.har文件保存到本地,文件名建议能体现操作内容,如github_create_issue.har。
录制技巧:
- 只录制核心操作,避免多余点击,这样生成的 HAR 文件更小、关键请求更突出。
- 对于复杂操作(如填写表单),尽量一次性完成,减少中间步骤。
🤖 第三步:让 AI 分析 HAR,生成可复用脚本
目标:把 HAR 文件交给 AI,让它自动分析出关键 API 并生成操作脚本(如 Python)。
操作步骤
- 打开 AI 对话窗口(如 ChatGPT)。
- 上传 HAR 文件,并输入提示词。一个高效的提示词模板如下:
“请分析这个 HAR 文件,它记录了我在 [网站名,如 GitHub] 上执行 [操作名,如创建一个 Issue] 的完整网络请求。
- 识别出实现该操作最关键的 1-2 个 HTTP 请求(通常是 POST 或 PUT 请求)。
- 提取这些请求的完整 URL、请求头(Headers,特别是 Cookie 和认证信息)、请求体(Body)结构。
- 基于以上信息,为我生成一个 Python 脚本,该脚本应:
- 能够独立运行,使用
requests库。 - 包含必要的函数,入参应设为可配置(如 Issue 标题、内容)。
- 包含错误处理(如检查 HTTP 状态码)。
- 请假设 Cookie 已经以字符串形式提供(从外部传入)。”
- 能够独立运行,使用
- 检查与调整:
- AI 生成的脚本通常能直接运行,但你需要检查以下几点:
- Cookie 的传入方式(是否从文件读取)。
- 请求体中是否有动态参数(如时间戳、随机数),若有,需要让 AI 调整逻辑。
- 依赖库是否已安装(如
requests)。
- AI 生成的脚本通常能直接运行,但你需要检查以下几点:
📝 第四步:写 SKILL.md,把脚本组装成 Skill
目标:创建一份 Markdown 文件 SKILL.md,作为 AI Agent 读取的唯一入口,告诉它“何时用、怎么用、出错了怎么办”。
4.1 创建 Skill 目录结构
在你的工作目录下,为每个 Skill 创建一个独立文件夹,例如:
my-skills/
└── github-create-issue/
├── SKILL.md (必需)
├── scripts/
│ └── create_issue.py (上一步生成的脚本)
└── habits.json (可选,用于记录用户习惯)
4.2 编写 SKILL.md 核心内容
A. YAML Frontmatter(触发条件)
在文件最开头用 --- 包裹 YAML 元数据,定义触发词:
---
title: GitHub Create Issue Skill
description: |
在 GitHub 上创建一个新的 Issue。触发词:创建 issue, 新建问题, make issue, create github issue。
Use when user asks to create an issue in a GitHub repository.
version: 0.1.0
author: you
---
B. 路径抽象(使用 ${SKILL_DIR})
在后续所有脚本或文件路径中,使用 ${SKILL_DIR} 变量代替绝对路径,这样 Skill 可以安装在任何位置:
## 脚本路径
- 创建 Issue 脚本:`${SKILL_DIR}/scripts/create_issue.py`
- Cookie 文件:`${SKILL_DIR}/cookies.txt`
C. 定义清晰的工作流(Step by Step)
使用有序列表,每一步写清楚“输入 → 执行 → 输出”:
## 工作流
1. **确认必要信息**
* 输入:用户可能提供了仓库名、Issue 标题、描述。如果缺失,使用 `AskUserQuestion` 向用户收集(详见下文)。
* 输出:确认后的参数 `repo`, `title`, `body`。
2. **检查认证状态**
* 执行:运行 `${SKILL_DIR}/scripts/check_auth.py`(一个简单的 GET 请求验证 Cookie 是否有效)。
* 输出:如果返回 401/403,跳转到“错误处理 - 重新登录”。
3. **创建 Issue**
* 执行:运行 `${SKILL_DIR}/scripts/create_issue.py`,传入上一步得到的参数。
* 输出:返回 Issue 的 URL 或成功提示。
4. **返回结果**
* 输出:向用户展示 Issue 链接,并记录本次操作到 `${SKILL_DIR}/habits.json`(记录用户选择的仓库等,用于下次默认推荐)。
D. 引入 AskUserQuestion(智能提问)
这是 Skill 交互的关键。在工作流中,需要用户确认参数时,使用 AskUserQuestion 关键词,并附带一个 JSON 结构来描述问题:
## 用户交互示例
当需要收集创建 Issue 的参数时,AI 应使用 AskUserQuestion 并呈现以下问题面板:
{
"type": "form",
"title": "创建 GitHub Issue",
"fields": [
{
"name": "repository",
"label": "选择仓库",
"type": "select",
"options": ["user/repo1", "user/repo2"],
"default": "{{从 habits.json 读取的最近使用仓库}}"
},
{
"name": "title",
"label": "标题",
"type": "text"
},
{
"name": "body",
"label": "描述",
"type": "textarea"
}
]
}
用户提交后,将字段值传递给后续脚本。
- 习惯文件:在每次成功创建 Issue 后,脚本应更新
habits.json,将本次选择的仓库记录为该工作区的默认值。下次 AskUserQuestion 时,default字段就会自动填充习惯值。
E. 错误处理
列出可能发生的错误及处理方式,用表格形式最清晰:
## 错误处理
| 错误类型 | 检测方式 | 处理步骤 |
| --- | --- | --- |
| Cookie 过期 | 调用 API 返回 401 | 1. 提示用户“登录已过期,请重新复制 Cookie”。<br>2. 询问用户是否要打开登录页面。 |
| 网络超时 | 脚本抛出超时异常 | 渐进重试:首次等待 15 秒 → 失败后等待 30 秒 → 再失败等待 60 秒 → 最终提示用户手动检查网络。 |
| 依赖缺失 | 脚本运行前检测 `requests` | 如果缺失,提示用户 `pip install requests`。 |
F. 渐进重试与健康检查
在 SKILL.md 中写明重试逻辑和前置检查:
## 鲁棒性配置
- **渐进重试**:对于认证类或临时性错误,采用 [15s, 30s, 60s] 的间隔重试,三次失败后终止。
- **健康检查**:在执行创建操作前,先发送一个 GET 请求到某已知存在的资源(如仓库详情),确保 Cookie 有效且接口可达。
✅ 第五步:测试与迭代
- 运行第一个版本:将 SKILL.md 和脚本交给支持 Agent Skills 标准的 AI 客户端(如支持此协议的 AI 助手),用触发词尝试执行。
- 对照检查清单(原文 Checklist):
- SKILL.md 是否精简(< 300 行)?
- Frontmatter 是否包含中英文触发词?
- 所有路径是否用了
${SKILL_DIR}? - 工作流步骤是否清晰,每一步有输入/输出?
- 认证是否有过期重试逻辑?
- 脚本是否有依赖检测?
- 持续迭代:
- v0.1:能创建 Issue 即可。
- v0.2:增加查询 Issue 列表的功能。
- v0.3:支持批量创建。
- 让使用驱动进化,不必追求一开始就完美。
💡 真实案例参考:任务管理 Skill(15 分钟快速原型)
- 目标:为一个任务管理系统(如 Linear、Jira)创建“创建任务”的 Skill。
- 操作:
- 登录:用方式 A 复制 Cookie 到
cookies.txt。 - 录制:新建一个任务,录制 HAR。
- AI 生成:让 AI 分析 HAR,生成
create_task.py。 - SKILL.md:
- Frontmatter:触发词 “创建任务, create task”。
- 工作流:收集任务标题、描述 → 检查 Cookie → 运行脚本。
- AskUserQuestion:询问任务标题、优先级、项目。
- 错误处理:401 提示重新登录,超时重试。
- 完成:第一版只有 50 行 SKILL.md + 100 行 Python,能解决每天重复创建任务的痛点。
- 登录:用方式 A 复制 Cookie 到
总结
按照以上步骤,你就能把任意网站变成 AI 可调用的 Skill。核心思想是:用 HAR 录制替代 API 文档研究,用 AI 生成替代手写代码,用 SKILL.md 替代硬编码逻辑。
“Agent执行Skill”与“代码级RPA”的核心区别
这两种方法的目标都是实现自动化,但路径和本质截然不同。以下是详细的对比:
| 维度 | Agent 执行 Skill (文章方案) | 代码级 RPA |
|---|---|---|
| 操作对象 | 网站的后端API(直接与服务器通信) | 浏览器的DOM元素(模拟鼠标点击、键盘输入) |
| 实现原理 | 1. 通过HAR分析出关键API请求。 2. 生成代码(如Python脚本)直接发送HTTP请求来操作。 | 1. 通过选择器(XPath、CSS)定位网页上的按钮、输入框。 2. 用Selenium、Playwright等工具模拟用户操作。 |
| 稳定性 | 高。API接口通常比网页UI稳定,只要不改版,脚本可以长期运行。 | 低。UI极易变化(按钮位置、class名称改变),导致选择器失效,维护成本高。 |
| 执行效率 | 极快。直接进行数据交换,无需等待页面渲染、动画加载。 | 较慢。必须等待页面加载、元素可见,速度受限于前端性能。 |
| 处理能力 | 强。可以直接批量处理数据(如一次创建100个任务),不受UI限制。 | 弱。受限于UI设计,难以高效处理批量操作。 |
| 适用场景 | 操作有明确后端API对应的场景,如: • 创建/查询数据 • 状态更新 • 文件上传/下载 | 必须通过UI操作的复杂场景,如: • 验证码/滑块拖动 • 复杂的JS渲染图表导出 • 操作无独立API的遗留系统 |
| 开发门槛 | 低。核心是“录制+AI分析”,会使用浏览器开发者工具即可。 | 较高。需要掌握页面元素定位、等待策略、调试选择器等技能。 |
| 维护方式 | 主要关注API是否变更,变则需重新录制HAR更新脚本。 | 主要关注UI是否变更,变则需更新元素选择器和操作逻辑 |