智能技能生成器(Skill AutoGen)
概述
本技能根据用户的自然语言描述,自主生成完整的 WorkBuddy 技能包。涵盖需求分析、技能类型决策、SKILL.md 生成、配套脚本/引用/资源创建、结构验证、打包分发、SKILLHUB 自动发布(自动打开官网 → 登录 → 自动填写发布表单 → 自动提交审核)全流程。
触发词
- 创建技能 / 创建一个技能 / 创建一个能xxx的技能
- 写一个skill / 写一个技能
- 帮我做一个技能 / 做一个技能
- 生成技能 / 自动生成技能
- 制作skill / 制作技能
- skill自动生成 / 技能生成器
- 帮我开发一个技能
工作流程
阶段一:需求采集与分析
当用户触发本技能时,按以下步骤分析用户需求:
1.1 解析用户描述
从用户的自然语言描述中提取以下关键信息:
| 维度 | 提取内容 | 示例 |
|---|---|---|
| 核心功能 | 技能要做什么 | "批量提取PDF中的发票号码" |
| 输入 | 需要什么输入文件/数据 | PDF文件 |
| 输出 | 产出什么结果 | Excel明细表 |
| 触发场景 | 什么情况下使用 | 财务人员批量处理发票 |
| 交互方式 | 是否需要弹窗交互 | 需要文件上传弹窗 |
| 自动化 | 是否需要定时任务 | 每日定时执行 |
1.2 补充询问(仅在信息不足时)
如果用户描述已足够清晰,跳过询问直接进入下一阶段。仅在以下关键信息缺失时才询问用户:
- 核心功能不明确 → "这个技能具体要实现什么功能?"
- 输入输出不明确 → "需要处理什么文件?输出什么格式?"
- 交互方式未提及但有歧义 → "需要弹窗交互还是直接命令行执行?"
原则:最多询问2轮,每轮不超过3个问题。能推断的不要问。
1.3 需求确认
将分析结果整理为简要清单,向用户确认:
技能需求确认:
- 名称:xxx
- 核心功能:xxx
- 输入:xxx
- 输出:xxx
- 交互方式:xxx
- 是否需要定时:xxx
收到用户确认后进入阶段二。如果用户说"直接做"或类似表述,跳过确认直接生成。
阶段二:技能结构决策
根据需求分析结果,确定技能的类型和资源结构。详细决策树见 references/skill_patterns.md。
2.1 确定技能类型
用户需求 → 技能类型映射:
有明确的步骤流程(如:上传→处理→输出) → 工作流型(Workflow-Based)
有多种独立操作(如:合并/分割/转换) → 任务型(Task-Based)
是标准/规范/知识库(如:品牌规范/编码标准) → 参考型(Reference/Guidelines)
需要弹窗交互+文件上传+sendPrompt → 交互型(Interactive)
需要定时执行(如:每日天气推送) → 自动化型(Automation)
混合特征 → 混合型(组合上述模式)
2.2 确定资源需求
| 资源类型 | 需要的条件 | 存放位置 |
|---|---|---|
| scripts/ | 需要重复执行的确定性代码(PDF处理、数据转换等) | scripts/ |
| references/ | 需要AI参考的文档(API文档、数据模式、业务规则) | references/ |
| assets/ | 需要在输出中使用的文件(模板、图标、字体) | assets/ |
原则:只包含真正需要的资源。不需要的目录不要创建。
2.3 确定技能名称
技能名称规则:
- YAML frontmatter 中的 name:小写字母+数字+连字符,如 invoice-extractor
- 目录名:与 name 一致,或使用中文描述性名称(如"发票号码提取器")
- SKILLHUB 发布时使用 slug(英文连字符格式)
阶段三:生成技能
3.1 初始化技能目录
使用内置脚本初始化技能目录结构:
C:\Users\admin\.workbuddy\binaries\python\envs\default\Scripts\python.exe ~/.workbuddy/skills/skill-autogen/scripts/init_skill.py <skill-name> --path <output-directory>
- 用户级技能(默认):
--path ~/.workbuddy/skills/ - 项目级技能:
--path .workbuddy/skills/
3.2 生成 SKILL.md
SKILL.md 是技能的核心文件。生成时必须遵循以下规范:
YAML Frontmatter(必须):
---
name: skill-smith110
description: "完整描述技能的功能和触发场景。第三人称。"
agent_created: true
---
SKILL.md 正文结构(根据技能类型选择):
详见 references/skill_patterns.md 中的模板。核心原则:
- 使用祈使句:用"执行X""检查Y"而非"你应该执行X"
- 包含具体示例:给出真实的用户请求示例
- 引用配套资源:如果创建了 scripts/references/assets,在正文中引用
- 包含触发词:列出用户会说的触发短语
- 包含完整工作流:从触发到完成的完整步骤
- 中文优先:面向中文用户,使用简体中文
交互型技能额外要求:
- 包含完整的弹窗 HTML 代码
- 弹窗中必须包含「开始xxx ↗」按钮(使用 sendPrompt)
- 文件上传使用 <input type="file"> + FileReader
- 大文件必须逐文件 sendPrompt 传输(参考用户级记忆中的铁律)
3.3 生成配套资源
根据阶段二的决策,生成必要的配套资源:
脚本(scripts/):
- 只为需要确定性执行的重复任务创建脚本
- Python 脚本使用标准库优先,避免第三方依赖
- 脚本头部包含文档字符串说明用途和参数
- Windows 兼容:处理中文路径时使用 encoding='utf-8'
引用文档(references/):
- 为复杂的领域知识、API文档、数据模式创建引用文档
- 在 SKILL.md 中注明何时应加载哪个引用文档
- 大文件(>10k字)在 SKILL.md 中包含 grep 搜索模式
资源文件(assets/):
- 为模板、图标等输出使用的文件创建资源目录
- 在 SKILL.md 中说明如何使用这些资源
3.4 删除不需要的模板文件
init_skill.py 会创建示例文件。生成完成后,删除不需要的示例文件和目录。
阶段四:验证
使用内置验证脚本检查技能结构:
C:\Users\admin\.workbuddy\binaries\python\envs\default\Scripts\python.exe ~/.workbuddy/skills/skill-autogen/scripts/validate_skill.py <skill-directory>
验证检查项:
- [ ] SKILL.md 存在
- [ ] YAML frontmatter 格式正确
- [ ] name 字段存在且符合命名规范(小写+连字符)
- [ ] description 字段存在且不含尖括号
- [ ] agent_created: true 已设置
- [ ] 无 TODO 占位符残留
详细质量检查清单见 references/quality_checklist.md。
如果验证失败,修复问题后重新验证,直到通过。
阶段五:打包与发布
5.1 打包
验证通过后,将技能打包为可分发的 zip 文件:
C:\Users\admin\.workbuddy\binaries\python\envs\default\Scripts\python.exe ~/.workbuddy/skills/skill-autogen/scripts/package_skill.py <skill-directory> <output-directory>
打包脚本会自动:
1. 运行验证
2. 将技能目录压缩为 <skill-name>.zip
3. 保持正确的目录结构
5.2 自动发布到 SKILLHUB(推荐)
打包完成后,进入「阶段六」自动打开 SKILLHUB 官网、自动填写发布表单并自动提交审核。用户只需在登录环节人工介入一次。
若需手动发布,见 references/skillhub_guide.md。
5.3 本地安装验证
发布前建议先本地测试:
1. 技能已生成在 ~/.workbuddy/skills/ 下
2. 在新对话中触发技能,验证功能正常
3. 测试所有触发词是否能正确激活技能
阶段六:自动发布到 SKILLHUB(浏览器自动化)
打包完成后,自动打开 SKILLHUB 官网并完成发布。此阶段把「打包 → 打开官网 → 登录 → 填写表单 → 提交审核」串成一条自动流程,用户只在登录环节人工介入一次。详细步骤与排查见 references/skillhub_auto_publish.md。
6.1 生成发布清单
运行发布清单脚本,把发布表单需要的字段汇总为一份 JSON(供浏览器自动填写使用):
C:\Users\admin\.workbuddy\binaries\python\envs\default\Scripts\python.exe ~/.workbuddy/skills/skill-autogen/scripts/prepare_publish.py <skill-directory> <zip文件绝对路径> --display-name "中文显示名" --category "分类" --icon <图标绝对路径>
脚本生成 publish_manifest.json,包含:
- slug:技能英文标识(取自 SKILL.md frontmatter 的 name)
- display_name:显示名称(中文)
- description:市场展示描述
- category:分类(效率工具/数据处理/财务税务/开发工具/办公协作/生活服务)
- icon_path:图标文件绝对路径(PNG,可省略)
- zip_path:打包好的 zip 绝对路径
- version:版本号
6.2 加载浏览器自动化能力
调用 agent-browser 技能(浏览器自动化)执行后续网页操作。若当前环境未安装该技能,先搜索并安装「agent-browser」;若确认无浏览器自动化能力,降级为手动发布(见 references/skillhub_guide.md),并用默认浏览器打开 https://skillhub.cn/ 辅助用户操作。
6.3 打开 SKILLHUB 官网
- 用浏览器自动化打开官网
https://skillhub.cn/ - 等待页面加载完成
6.4 登录(用户人工介入一次)
- 定位并点击页面上的「登录」按钮
- 弹出登录方式(扫码/手机号/账号密码)后,提示用户:请在弹出的登录窗口完成登录
- 轮询等待登录成功(检测到用户头像/用户名、或「登录」按钮消失、或出现「发布」入口即视为已登录)
- 若登录超时或用户取消,向用户确认后重试
6.5 进入发布页
- 点击「发布 SKILL」/「发布技能」/「上传技能」入口
- 等待发布表单页加载完成
6.6 自动填写发布表单
按 publish_manifest.json 自动填写以下字段:
| 表单字段 | 数据来源 |
|---|---|
| 技能名称(显示名) | display_name |
| 技能描述 | description |
| 分类 | category |
| 图标 | 上传 icon_path 对应的 PNG |
| 技能文件 | 上传 zip_path 对应的 zip |
填写技巧:
- 名称/描述为文本框 → 用浏览器自动化的 fill/type 填充
- 分类为下拉框 → 用 select 选择对应选项
- 图标/zip 为文件上传 → 用 file input 的 set_files 上传本地文件
6.7 提交审核
- 点击「提交审核」/「发布」/「提交」按钮
- 优先自动点击提交;若按钮不可自动点击(出现人机验证、滑块、二次确认弹窗),提示用户手动点击提交审核
- 提交后记录页面反馈(成功提示 / 审核中状态),并向用户汇报结果
6.8 发布结果汇报
发布完成后,向用户汇报:
- 技能名称 + slug
- 是否已提交审核 / 当前状态
- SKILLHUB 链接(如已生成)
若任一步骤失败,明确告知失败环节和原因,并给出手动操作路径。
技能模式快速参考
根据用户需求快速选择技能模式。完整版见 references/skill_patterns.md。
模式A:工作流型
适用:有明确步骤的流程(上传→处理→输出)
结构:概述 → 触发词 → 工作流程(阶段一→二→三) → 脚本引用
模式B:任务型
适用:多种独立操作(合并/分割/转换)
结构:概述 → 触发词 → 快速开始 → 任务1 → 任务2 → ...
模式C:交互型
适用:需要弹窗+文件上传+用户交互
结构:概述 → 触发词 → 弹窗HTML → AI执行指令 → 脚本引用
必须包含:sendPrompt 按钮(带 ↗ 箭头)、file input 上传
模式D:自动化型
适用:需要定时执行的任务
结构:概述 → 触发词 → 配置弹窗 → automation创建 → 执行脚本
模式E:参考型
适用:标准/规范/知识库
结构:概述 → 规范内容 → 使用示例
生成质量标准
生成的技能必须满足以下质量标准(完整清单见 references/quality_checklist.md):
必须满足(P0)
- SKILL.md 有正确的 YAML frontmatter(name + description + agent_created: true)
- name 符合命名规范(小写字母+数字+连字符,不以连字符开头/结尾,无连续连字符)
- description 完整描述功能和触发场景,不含尖括号
- 无 TODO 占位符残留
- 正文使用祈使句
- 包含触发词列表
- 配套脚本可独立执行(无语法错误)
强烈建议(P1)
- 包含具体的用户请求示例
- description 中包含"何时使用此技能"的说明
- 交互型技能包含完整可用的弹窗 HTML
- 脚本使用 Python 标准库优先
- 中文内容使用简体中文
建议满足(P2)
- 包含错误处理和排查指南
- 包含依赖说明
- 技能名称语义清晰
重要约束
- 不要创建空目录:只创建实际有文件的目录
- 不要过度设计:简单任务不需要 scripts/references/assets
- 中文优先:面向中文用户,所有面向用户的内容使用简体中文
- 复用现有工具:优先使用 WorkBuddy 内置能力(show_widget、automation_update 等)
- 安全第一:不包含敏感信息(密钥、密码),不执行危险操作
- 文件命名:全名不得简写,使用完整描述性名称
支付宝付费改造契约(PAYSKILL)
本技能为付费技能(PAYSKILL)。调用遵循支付宝 AI 生意画像契约,由平台调度层执行 probe → pay → complete → ack 流程:
- probe(探测):平台调用前先探测是否已持有本技能的支付宝有效订阅 / 付费凭证。已付费则直接放行。
- 402 Payment-Needed:未付费时,脚本向标准输出返回 HTTP 状态
402与Payment-Needed标记,提示用户通过支付宝完成付费(pay),平台据此唤起付费页。 - complete(扣费确认):用户在支付宝完成扣费后,平台下发
Payment-Proof(付费凭证)。 - ack(验签放行):平台携带
Payment-Proof重试本次调用;scripts/payment_gate.py验签该凭证,确认有效后放行主流程。
订阅持久化与幂等:
- 付费状态缓存在本地
.pay_cache/state.json,避免每次调用重复付费(订阅持久化)。 - 同一
Payment-Proof在 24h 幂等窗口内仅生效一次,避免重复扣费。
现金流改造后的调用套路:
用户调用 → 平台 probe →
未付费:下发 402 Payment-Needed → 支付宝 pay → complete → 下发 Payment-Proof
已付费/携带 Proof:脚本 ack 验签 → 放行主流程
> 本契约由 SkillHUB 平台调度层解析,脚本本地仅处理 402 / 验签 / 持久化 三环节;付费本体交给支付宝。
支付宝 AI 按量付费(Machine Pay / A2M)改造说明
本 Skill 已按支付宝官方 A2M 协议改造为 Pay Skill,付费闸口位于 scripts/payment_gate.py,统一调用云端计费服务 https://pay.pembroli.cn/api/resource。
付费流程
- 未付费调用时,服务端返回 HTTP 402 +
Payment-Needed头,携带金额、商户、订单号及 RSA2 签名。 - 买家侧
payment_gate.py收到 402 后引导用户完成支付,平台回传Payment-Proof。 - 客户端携带
Payment-Proof重试资源端点。
验付调用
服务端收到 Payment-Proof 后,调用支付宝验付接口(alipay.aipay.agent.payment.verify)核验凭证有效性(trade_no、out_trade_no、active 状态),验证失败返回 400,验证通过才进入资源发放。
履约确认
资源发放成功后,服务端异步调用履约确认接口(alipay.aipay.agent.fulfillment.confirm,trade_no)回执,标记本笔订单已履约;并按 out_trade_no 做幂等,重复请求直接返回已缓存结果,杜绝重复收费。
幂等与缓存
买家侧按 slug 本地缓存 Payment-Proof(24h TTL),有效期内免重复支付;服务端按订单号幂等,保证同一笔订单只履约一次。