9.4 KiB
技能开发教程
这份文档是给技术人员看的,目标不是解释概念,而是让你拿到 skill-template 后,可以一步一步开发出一个新的 skill。
本文默认你开发的是当前最常见的一类技能:
- 有明确的
scripts/main.pyCLI 入口 - 可能需要读写本地 SQLite
- 可能需要调用兄弟技能
- 业务逻辑主要放在
scripts/service/
如果你开发的是发布型 skill,这个模板就是直接可用的起点。
1. 先理解模板的定位
skill-template 不是业务 skill,它只是一个新 skill 仓库模板。
你不应该直接在这个仓库里开发业务,而应该:
- 复制这个目录
- 改成新 skill 的目录名
- 把占位内容替换掉
- 再开始写业务逻辑
2. 新 skill 的标准目录结构
复制模板后,你应该保留下面这套结构:
your-skill/
├─ .github/
├─ assets/
├─ evals/
├─ references/
├─ scripts/
│ ├─ cli/
│ ├─ db/
│ ├─ jiangchang_skill_core/
│ ├─ service/
│ └─ util/
├─ tests/
├─ .gitignore
├─ README.md
├─ release.ps1
└─ SKILL.md
各目录职责如下:
assets/:放示例输出、schema、静态说明资源references/:放研发和编排需要长期维护的文档scripts/:放真正的代码tests/:放自动化测试evals/:放人工验收材料、评估清单、示例场景
3. scripts/ 内部如何分层
scripts/ 不是乱放 Python 文件,而是按职责分层:
scripts/
├─ main.py
├─ cli/
├─ db/
├─ jiangchang_skill_core/
├─ service/
└─ util/
每层的职责要明确:
-
main.py作用:唯一 CLI 入口 只做启动、编码兼容、引入cli.app -
cli/作用:参数解析、命令分发、用法说明 不写具体业务逻辑 -
db/作用:SQLite 连接、建表、repository 不写页面操作和业务编排 -
service/作用:核心业务逻辑 比如发布流程、调用兄弟技能、浏览器自动化 -
util/作用:常量、日志、路径、时间工具、通用帮助函数 -
jiangchang_skill_core/作用:运行时环境与统一日志副本 一般按现有规范技能复制,不要自己乱改结构
4. 开发一个新 skill 的标准步骤
下面这套顺序建议严格按步骤做,不要一上来就直接写 service。
第一步:复制模板并改目录名
例如你要开发 weibo-publisher:
- 复制
skill-template - 新目录改成
weibo-publisher - 初始化为独立 git 仓库
- 关联它自己的远端仓库
目录名要和 skill slug 对齐,后面很多地方都依赖这个命名。
第二步:先改 4 个最关键的标识
复制后优先改下面这些地方:
SKILL.mdscripts/util/constants.pyreferences/下的文案scripts/service/下的平台占位文件名
最先要统一的是:
- 技能中文名
slug- 平台中文名
- 平台内部键
- 日志 logger 名
5. 哪些占位内容必须替换
复制后,至少要全局检查并替换下面这些内容:
your-skill-slugyour-platform-key技能开发模板(复制后请修改)你的平台名platform_playwright.pyopenclaw.skill.your_skill_slug
如果你是做发布型 skill,通常还要替换:
publish命令中的中文提示references/CLI.md的命令示例references/README.md的用户话术references/SCHEMA.md的数据库文件名
6. SKILL.md 应该怎么写
SKILL.md 是技能清单,不是设计文档。
应该重点写:
- 技能名称
- 技能描述
- slug
- category
- dependencies
- 何时使用本技能
- 对用户的引导话术
- CLI 使用原则
不要在 SKILL.md 里写大量实现细节。
实现细节放在:
references/- 代码注释
service/实现里
7. references/ 应该放什么
references/ 是当前规范 skill 的文档中心,建议至少有这些:
-
README.md面向内部说明和技能作用介绍 -
CLI.md写清楚命令、参数、默认值、兄弟技能调用方式 -
RUNTIME.md写清楚运行时目录、环境变量、入口约定 -
SCHEMA.md写清楚数据库路径、核心表结构、日志表结构 -
DEVELOPMENT.md写给技术人员的开发教程,也就是本文档
如果后面某个 skill 需要更细的说明,可以再加:
ERRORS.mdINTEGRATION.mdPLATFORMS.md
8. assets/ 应该放什么
assets/ 不放业务代码,只放辅助材料。
建议放:
-
examples/比如version输出示例、log-get输出示例 -
schemas/比如日志记录、机读 JSON 的 schema
不要把正式研发文档放到 assets/。
文档应该进 references/。
9. cli 层怎么写
建议保持一个原则:
cli只负责解析参数和路由service才负责干活
也就是说,cli/app.py 的职责是:
- 打印帮助
- 定义
publish / logs / log-get / health / version - 把参数转交给
service.publish_service
不要在 cli/app.py 里直接写:
- 浏览器自动化
- 子进程调用兄弟技能
- SQLite 逻辑
10. service 层怎么写
service 是核心层。
通常可以这样拆:
-
publish_service.py放命令编排、参数兜底、结果分流 -
sibling_bridge.py放兄弟技能调用,例如调account-manager、content-manager -
*_playwright.py放浏览器后台自动化 -
entitlement_service.py放鉴权逻辑
一个很重要的原则
不要把所有逻辑都堆进一个文件。
推荐流向是:
cli.app -> service.publish_service -> service.sibling_bridge / service.xxx_playwright -> db
11. db 层怎么写
如果你的 skill 需要记录日志或本地状态,建议:
-
db/connection.py只做连接和建表 -
db/publish_logs_repository.py只做增删查改
不要在 db 层里:
- 调浏览器
- 打印用户提示
- 拼接业务流程
12. 如何接兄弟技能
如果 skill 要依赖兄弟 skill,不要在业务代码里写死绝对路径。
统一通过:
scripts/util/runtime_paths.pyscripts/service/sibling_bridge.py
来做调用。
常见调用对象是:
account-managercontent-manager
调用原则:
- 通过
get_skills_root()找到兄弟技能根目录 - 再拼出对应
scripts/main.py - 用子进程调用
- 机器可读输出优先 JSON
13. 如何开发发布型 skill
如果你开发的是 publisher 类 skill,建议按这个顺序做:
- 先把目录结构搭完整
- 先让
health/version跑通 - 再让
publish_service.py的骨架跑通 - 再接
sibling_bridge.py - 最后再写
*_playwright.py
不要一开始就直接写页面选择器。
推荐先确保这些基础能力正常:
- 能取到账号
- 能取到文章
- 能写日志
- CLI 子命令通了
- 错误返回值格式定好了
然后再进浏览器自动化。
14. 本地开发的最小验证顺序
建议每次新 skill 开发时按下面顺序验证:
1. 验证入口
python scripts/main.py health
python scripts/main.py version
2. 验证 CLI 路由
python scripts/main.py -h
python scripts/main.py publish -h
3. 验证本地日志与数据库
如果是发布型 skill,再继续:
python scripts/main.py logs
python scripts/main.py log-get 1
4. 最后再验证真实业务
比如:
python scripts/main.py publish
15. 发布前检查清单
每个新 skill 发布前,建议技术人员逐条确认:
- 目录结构符合当前模板
SKILL.md中 slug、名称、描述都已替换scripts/util/constants.py已修改references/CLI.md示例命令已改成真实命令service下的平台文件名已改对- 没有残留旧平台名
health/version可运行.gitignore生效,没有把__pycache__提交进去release.ps1存在.github/workflows/release_skill.yaml存在
16. 常见错误
错误 1:只改了目录名,没改 slug
表现:
- 数据目录不对
- 版本输出不对
- 日志名不对
要检查:
SKILL.mdscripts/util/constants.py
错误 2:平台中文名改了,内部键没改
表现:
- 兄弟技能筛选账号失败
- 发布命令走错平台
要检查:
publish_service.pysibling_bridge.pyreferences/CLI.md
错误 3:把业务逻辑写进 CLI
表现:
- 文件越来越乱
- 不方便测
- 参数和业务耦合太重
要改回:
cli只做参数解析service才做业务
错误 4:保留了旧模板结构
表现:
- 仓库同时存在
docs/、optional/、skill_main.py - 技术人员不知道看哪一套
现在的新模板原则是:
- 不做旧结构兼容
- 统一走
references/+scripts/main.py
17. 推荐开发顺序总结
如果让一个新人照着做,我建议他按这个顺序:
- 复制模板并改目录名
- 改
SKILL.md - 改
scripts/util/constants.py - 改
references/ - 改
scripts/cli/app.py - 改
scripts/service/ - 跑
health/version - 再做业务联调
- 最后 release
18. 这份模板的底线要求
以后新建 skill,至少要满足这几点:
- 目录结构统一
- 入口统一为
scripts/main.py - 文档统一放
references/ - 业务核心逻辑统一放
scripts/service/ - 不再使用旧模板历史结构
如果做不到这些,后面 skill 一多,就会越来越乱。