本文分析 OpenClaw 框架中 Skill 扩展机制的设计原理与实现方式,通过开发一个"每日技术日报"自定义技能的完整过程,展示从 SKILL.md 编写、目录结构组织、安装调试到发布的全流程。Skill 采用 Markdown 格式定义,无需代码编译,通过语义匹配触发,渐进式加载管理上下文。
在使用 OpenClaw 进行日常工作自动化的过程中,我遇到了一个需求:每天早上自动搜集技术领域的热点新闻,整理成中文摘要日报,推送到 Slack 工作频道。
OpenClaw 本身提供了天气查询、网页摘要等内置能力,但没有直接满足这个需求的功能。框架提供了一套名为 Skill 的能力扩展机制,允许用户通过编写 Markdown 格式的定义文件来为 AI Agent 添加新能力。
本文记录我从零开发这个 Skill 的完整过程,包括对 Skill 机制的理解、SKILL.md 的编写规范、实际代码以及调试经验。
Skill 是 OpenClaw 框架中 AI Agent 的能力扩展单元。与传统软件插件不同,Skill 不是可执行代码,而是一份结构化的 Markdown 文档。AI Agent 读取文档中的指令后,自行调用底层工具完成任务。
这种设计的逻辑是:既然 AI Agent 已经具备理解自然语言、调用工具的能力,那么给它一份写清楚"做什么、怎么做"的操作文档,就等于给了它一个新技能。
- 扫描阶段:Agent 启动后,扫描所有已安装 Skill 的 和 字段
- 匹配阶段:收到用户请求时,Agent 根据 description 语义判断是否有 Skill 适配
- 加载阶段:匹配成功后,读取 SKILL.md 的正文内容
- 执行阶段:按正文中的指令步骤执行任务,按需读取附属资源
Skill 采用三层渐进加载模型:
这种设计解决的核心问题是上下文窗口的容量管理——Agent 的上下文空间有限,不可能同时加载所有 Skill 的完整内容。
标准的 Skill 目录结构:
SKILL.md 是仅有的必需文件,其余目录按需创建。
各目录的设计意图:
- scripts/:存放需要确定性执行的脚本。适用于逻辑固定、每次执行结果应一致的操作。脚本可以被 Agent 直接执行而无需加载到上下文中。
- references/:供 Agent 按需查阅的参考文档。典型场景包括 API 文档、数据源列表、领域知识说明。只在 Agent 判断需要时才读取。
- assets/:用于输出的资源文件,如报告模板、图标等。Agent 在输出中直接引用这些文件,而不读取其内容到上下文。
设计原则:SKILL.md 保持精简,将大段参考内容拆分到 references/ 目录,通过引用方式关联。
GPT plus 代充 只需 145
name 字段:
- 格式要求:小写字母 + 数字 + 连字符
- 长度限制:64 字符以内
- 命名风格:推荐使用动词前导的描述性名称
description 字段:
- 这是 Skill 的触发机制,Agent 通过读取此字段判断是否激活 Skill
- 需要同时描述"做什么"和"什么时候用"
- 建议覆盖用户可能使用的多种表述方式
- 注意:触发条件必须写在 description 中,不要写在正文里(正文只在触发后才被读取)
YAML 语法注意事项:
- description 中包含冒号时需要引号或多行语法
- 推荐使用 多行块标量语法
正文是写给 Agent 的操作指令,建议使用祈使句风格。
推荐包含以下部分:
- 使用场景(适用 / 不适用)
- 执行流程(具体步骤)
- 输出格式规范
- 注意事项和边界条件
每天早上自动搜索技术热点,生成中文摘要日报,推送到 Slack 频道,同时本地归档。
GPT plus 代充 只需 145
使用 message 工具发送到指定 Slack 频道:
- 默认频道:当前对话所在频道
- 如果用户指定了频道,发送到指定频道
- 消息格式使用 Slack 兼容的 Markdown
将日报保存到 归档。
如需批量抓取,可执行辅助脚本:
建议通过 OpenClaw 的 cron 功能设置每日定时执行:
- 时间:每天早上 9:00(UTC+8)
- 任务:生成技术日报并推送到 Slack
- 搜索结果依赖 web_search 工具的可用性
- 单次生成的日报条目控制在 8-12 条,避免信息过载
- 如搜索结果不足,如实告知,不要编造内容
GPT plus 代充 只需 145
脚本从亚马逊云科技官方博客的 RSS 源获取内容,作为 Agent 主搜索流程的补充数据源。
将 Skill 目录放置到 OpenClaw 的标准路径下:
OpenClaw 会在下次会话时自动扫描并加载,无需重启服务。
在 Slack 中向 Agent 发送:
GPT plus 代充 只需 145
预期行为:
- Agent 识别请求匹配 Skill
- 读取 SKILL.md 指令
- 执行 web_search 搜索热点
- 按模板生成日报
- 推送到 Slack 并本地归档
也可以尝试其他表述以验证触发覆盖面:"帮我整理今天的技术热点"、"来一份技术日报"。
询问 Agent:"你有哪些 skills?"
如果 Skill 未出现在列表中,检查:
- 文件路径是否正确
- YAML frontmatter 的 分隔符是否完整
- 和 字段是否存在
Skill 已加载但未被触发,通常是 description 覆盖不足。扩充关键词和场景描述即可。
常见问题——description 中的特殊字符:
排查清单:
- 执行权限:
- 依赖工具: 等是否已安装
- 网络连通:确认可以访问外部服务
description 的质量直接决定 Skill 的触发准确率。我的做法是先写一个基本版本上线,在实际使用中观察哪些表述没有命中,迭代补充。
一个好的 description 应该覆盖:
- 功能描述(做什么)
- 触发场景(什么时候用)
- 关键词变体(用户可能的不同说法)
GPT plus 代充 只需 145
当 Skill 功能复杂时,利用 references/ 目录按领域拆分:
SKILL.md 中按需引用:
GPT plus 代充 只需 145
Agent 只加载实际需要的文件,避免上下文浪费。
除了 cron 定时任务,OpenClaw 的 heartbeat 机制也可以触发 Skill——在 HEARTBEAT.md 中添加检查项,Agent 在心跳周期中主动执行。
ClawHub 是 OpenClaw 的技能共享平台。发布流程:
- 确保 frontmatter 完整
- 使用打包工具生成 文件
- 提交到 ClawHub
OpenClaw 的 Skill 机制提供了一种基于 Markdown 的 AI Agent 能力扩展方案。其核心设计特点:
- Markdown 协议:以文档形式定义能力,降低开发门槛
- 语义触发:通过 description 字段实现基于语义的匹配
- 三层渐进加载:元数据常驻、正文按需、资源延迟加载,保护上下文窗口
- 约定式目录结构:scripts/references/assets 各司其职
我在亚马逊云科技的实际工作中使用这套机制自动化了多个重复性流程。从实践来看,Skill 的开发成本较低(本质是写一份 Markdown 文档),而 Agent 的执行效果主要取决于 SKILL.md 指令的清晰度和 description 的覆盖面。
如果你对 AI Agent 的能力扩展机制有兴趣,建议从一个小 Skill 开始实践,逐步积累经验。
欢迎分享你的 Skill 开发经验
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/238988.html