当前位置: 首页 > news >正文

OpenClaw Skills 开发实战笔记

什么是 Skill?简单说,Skill 是一个文件夹,里面包含SKILL.md(核心指令文件)和配套脚本。它的作用是给 Agent 赋予特定的"工作流程"能力,而不是零散的、每次都要重新解释的指令。

Skill vs Memory:最根本的差别是精度。Memory 是模糊检索——Agent 每次都要"理解"存储的内容,时间长了还会衰减、遗忘。Skill 是精确的文本合约SKILL.md白纸黑字地写清楚"什么时候用、怎么做、不能怎么做",Agent 不需要理解和解释,只需要执行。

什么时候用 Skill?当你需要 Agent重复、稳定地执行同一类任务时,比如定时生成报告、按流程处理数据、自动巡检系统。一个任务如果要跑 3 次以上,流程相对稳定,就值得做成 Skill。

我开发了几个 Skills,踩了不少坑。下面分享几个主要问题、解决方案和相关经验。


踩坑记录

起因:靠 memory 执行重复任务,不稳定

最初的想法很简单:让 OpenClaw 执行一个任务,然后告诉它"记住这个流程",存到 memory 里。想着以后再让它跑同样的任务就直接用 memory 里的流程。

但实际上很快就出现了问题:多跑几次,输出质量飘忽不定;第二天再让它做,要么格式全变、完全不符合要求,要么直接失忆;更离谱的是,有时候它还会否认自己之前做过这个任务。

根本原因是 OpenClaw 的 memory 是模糊检索,不是精确存储。它记住的是大概的意思,不是逐字逐步的流程。每次回忆时重新"理解"一遍,自然每次理解不一样。而且 memory 会被新信息冲刷,时间一长,早期存的内容权重就下降了。

所以我最后的结论是:要让 Agent 稳定重复执行同一个任务,不能靠 memory(不精确),必须靠 Skill(精确的文本指令)。SKILL.md 是白纸黑字的,不存在"忘了"或"理解偏差"的问题。

在开发 Skill 的过程中,我遇到了几个问题。下面逐一记录。


问题 1:OpenClaw 找不到刚部署的 Skill

现象:把新 Skill 部署到<workspace>/skills目录下,但 OpenClaw 找不到这个 Skill,不会自动触发。

原因:OpenClaw 似乎不会主动扫描<workspace>/skills下的新 Skill,新部署的 Skill 不会自动加载 (原因不明)。

解决方案

  1. 先执行命令确认 Skill 状态为"ready"
    openclaw skills list
  2. 告诉 OpenClaw:
    刷新 skill 列表
  3. 如果刷新后还没有识别到新 Skill,告诉它:
    我在 workspace 下加了新的 [abc] skill
  4. 然后要求它读取新 Skill:
    读一下 [abc] skill
  5. OpenClaw 会读取该 Skill 的 SKILL.md 文件并描述其内容,证明 Skill 已被成功加载

OpenClaw Skill 加载优先级(官方文档)

OpenClaw 从多个位置加载 Skills,优先级从高到低:

优先级位置说明
1(最高)<workspace>/skills工作区 Skill
2<workspace>/.agents/skills项目 Agent 的 Skill
3~/.agents/skills用户个人 Skill
4~/.openclaw/skills本地全局 Skill
5Bundled skillsOpenClaw 安装包自带的内置 Skill
6(最低)skills.load.extraDirs配置文件指定的额外目录

同名 Skill 出现在多个位置时,高优先级覆盖低优先级。

:这部分内容参考自 OpenClaw 官方文档。


问题 2:修改 SKILL.md 后 Agent 还在用旧版本

现象:改了 SKILL.md 的内容,但 Agent 下次执行时还是按旧逻辑走。

原因:OpenClaw 宣称支持热重载,配置里也开了watch: true,但实际上 Skill 更改后并不一定会自动更新(原因不明)。这个坑特别隐蔽 — 你可能测了半天,最后才意识到 Agent 根本没用新版本。

我的配置(watch 已开启):

"skills": { "load": { "watch": true, // 已设为 true,但不一定生效 "watchDebounceMs": 250 } }

解决方案

  1. 修改 SKILL.md 后,告诉 OpenClaw:

    [abc] skill 已更新,重新加载
  2. 通常 OpenClaw 会总结一下变化点(新增/删除/修改了什么)

  3. 确认一下总结是否正确,确保新版本已被加载

  4. 如果发现还是用旧逻辑,让 OpenClaw 清除记忆:

    清除和 [abc] skill 相关的记忆

    然后重新加载 Skill

教训:不要假设热重载生效了。每次在测试 Skill 的改动前,要确保 Skill 已经更新。


问题 3:黑盒创建 Skill 可能行不通

现象:最开始我让 OpenClaw 用skill-creator把任务执行的过程直接写成 Skill(我并没有检查 SKILL.md 的内容),纯黑盒测试 — 跑一遍看结果,不行就让skill-creator改,改完再跑,反复循环。但这种做法总有各种问题,而且效率很低。

原因

  • 不管是 OpenClaw 对需求的理解、它设计的方案,还是它做的改动,都可能存在偏差。它以为自己改好了,实际上问题还在。而我在不清楚 Skill 内容的情况下,做出的判断也不一定对 — 双方都在猜。
  • Agent 对"什么是好的 Skill"缺乏判断力 — 它能写出语法正确的 SKILL.md,但不懂什么样的指令能让自己严格执行。它的"修改"本质上是猜测,不是反思。

解决 — 用写代码的方式写 Skill(可以用 coding agent 写):

  1. 先开发依赖脚本(scripts)— 抓取、解析、数据处理等脚本,要先测通,确保这层没问题
  2. 再写 SKILL.md— 这一步要仔细检查 SKILL.md 内容,确保描述准确、步骤严谨
  3. 最后放到 OpenClaw 里集成测试— 测试 Skill 是否能按预期工作
  4. 固化有效版本— 一旦某个版本工作正常,通过版本控制 (例如git) 管理起来。能用的版本及时 commit,后续改坏了可以随时回退

这样做效率高了很多。更重要的是,出了问题我知道该查哪一层 — 因为我了解 Skill 内部是怎么回事。

教训:Skill 的核心设计还是需要由人来做 (尤其对于复杂的)。Skill Creator 适合生成初稿,不适合迭代打磨。


问题 4:定时任务不执行,或者执行了但不调用 Skill

现象:我需要一个定时任务,按照 Skill 执行操作并把结果发送到飞书 DM。但实际情况是:要么任务没按时执行,要么没调用 Skill,要么执行出错。

原因:定时任务有两种做法:1)系统 cron job;2)OpenClaw 内置的定时任务机制。应该使用方案 2,并正确配置。

解决:在 OpenClaw 的 Web UI 上配置(配置文件位于~/.openclaw/cron/jobs.json)。以我的定时任务为例:

基本信息

  • 名称:填任务名称

调度

  • 调度:选"Cron",配置好 Cron 表达式
  • 时区:填Asia/Shanghai

执行

  • 会话:选"隔离会话"
  • 唤醒模式:选"立即"
  • 执行内容:选"运行助手任务(隔离)"
  • 超时:填一个合理的超时时间
  • 助手任务提示:填具体的任务描述 — 这里要写得能够触发你的 Skill

投递

  • 结果投递:选"发布摘要(默认)"
  • 频道:选"飞书"

注意:Skill 里不需要写发送飞书的步骤,只需返回执行结果即可。隔离会话的结果会通过 Inter-session Message 回传到主会话,再由主会话投递到飞书。

教训:定时任务要用 OpenClaw 内置机制,不要用系统 cron。最关键的是"助手任务提示"那段话必须能触发 Skill,否则 Agent 不知道该调用什么。


问题 5:Agent 不严格执行 Skill,生成质量差

现象:Skill 里写了明确的步骤和格式要求,但 Agent 并不严格执行,输出质量不稳定。

原因:SKILL.md 里的指令太"建议性",不够强制。Agent 天然倾向于偷懒和走捷径。

解决方案

  1. 用强制约束代替建议— 用MUSTMUST NOTNEVER明确规则

    ## 约束 - MUST 严格按模板输出,NEVER 省略内容 - MUST 保留具体数字、数据、关键信息 - NEVER 改原意或自由发挥 - NEVER 跳过任何步骤
  2. 明确输出模板和数据指标— 不是"参考",而是"必须"

    ### 输出模板(MUST 严格遵守) - **[项目名称]** — [数据来源](URL) [用自己的话写 N 字核心内容] 数据指标(MUST 满足): - 类别A MUST ≥ X - 类别B MUST ≥ Y - 类别C MUST = Z(每项 M-N 字)
  3. 用决策树而非文字描述流程— 让 Agent 按逻辑分支执行,而非自由理解

    ## 执行流程(决策树) ① 数据获取 IF 成功 → 进入② IF 失败 → 回退:排查错误,通知用户 ② 数据过滤 IF 符合条件 → 进入③ IF 不符合 → 回退:调整参数,重新过滤 ③ 内容提取与分析 IF 质量指标满足 → 进入④ IF 不满足 → 回退:扩大范围,重新提取 ④ 报告组装 [按模板输出] ⑤ 自检清单 □ 所有指标都满足?□ 所有链接前置? □ 无省略内容? □ 格式正确?
  4. 强制自检清单— 明确哪些必须检查,哪些必须 NEVER

    MUST 逐项检查后才能返回: □ 所有数据按照规则处理过? □ 所有内容用自己的话写过,不是直接复制? □ 所有必填项都有吗? NEVER: - NEVER 输出模板占位符文字 - NEVER 省略任何数据 - NEVER 等待用户确认(ALWAYS 直接执行)

教训:SKILL.md 是给 Agent严格执行的代码,不是建议文档。用MUST/NEVER+ 决策树 + 自检清单,效果比"应该"强 100 倍。


总结

  1. 写合约,不写建议— SKILL.md 是执行代码,用MUST/NEVER的强制规则替代"应该"的建议。决策树、自检清单、明确格式,是让 Agent 严格执行的关键。

  2. 工程方法— 像开发代码产品一样开发 Skill。先把脚本逻辑搞定并测通,再精心设计 SKILL.md(流程、格式、验证点),最后在 OpenClaw 中集成测试。别用黑盒 + 反复试错。

好的 Skill 的稳定性和质量,取决于你是否把它当成"代码产品"来开发。

http://www.jsqmd.com/news/619584/

相关文章:

  • Qwen3-14B私有部署镜像YOLOv11目标检测结果报告智能生成
  • AI原生分支策略失效预警:Feature Branch vs. Model-First Trunk-Based Development对比实测
  • OpenClaw+千问3.5-9B:自动化投资信息收集
  • JSON文件和镜像python文件编写
  • 【Agent-阿程】Agent智能体开发实战指南
  • uniapp地图开发实战:marker聚合与点击事件优化指南
  • Qt图形界面开发:打造GME-Qwen2-VL-2B模型本地化部署与管理桌面工具
  • 如何让Windows 11摆脱臃肿?Win11Debloat帮你一键瘦身
  • Pixel Couplet Gen 商业授权作品集:为品牌方定制的像素风新春营销素材
  • 企业级OpenClaw集中部署安全架构避坑全攻略
  • 电子凸轮追剪曲线生成算法探秘:麦格米特版实践
  • 315/433MHZ无线遥控接收解码源程序 Keil源程序及AD格式电路图
  • AD7712实战:如何用MSP430搞定Σ-Δ型ADC的数据采集(附完整代码)
  • Citra模拟器终极指南:5步快速上手与问题解决教程
  • DeepSeek-OCR-2跨平台应用:移动端文档扫描方案
  • 【GUI-Agent】阶跃星辰 GUI-MCP 解读---()---HITL(Human In The Loop)贡
  • Ostrakon-VL 模型服务Docker化部署与CICD集成指南
  • 小米手表表盘设计终极指南:用Mi-Create免费打造个性表盘
  • 图图的嗨丝造相模型应用:在阿里云上打造你的专属风格图片生成服务
  • 法兰盘毛坯厂家实力排名大揭秘:从产能到交付能力的全方位测评 - 品牌推荐大师1
  • 热电偶冷端补偿:从物理本质到电路实现的深度解析
  • 2026年4月市面上回收羽毛球场木地板厂家,二手体育木地板回收/回收二手篮球场地板,回收羽毛球场木地板厂家报价 - 品牌推荐师
  • FigmaCN中文插件:设计师的母语界面解决方案
  • Anthropic Harness工程入门基础教程(非常详细),收藏这一篇就够了!
  • 第四节:逻辑黑盒与“薛定谔的 Bug”——如何降伏 AI 的“代码幻觉”?
  • 广州聚餐吃海鲜哪里推荐,怎么找?认准美团美食人气榜,避坑又划算 - 资讯焦点
  • 高通CamX架构实战笔记:从IFE、IPE到OIS,搞懂手机相机HAL层那些关键模块
  • 0086.分隔链表
  • 清音听真部署实操:快速搭建个人语音转文字服务,免费试用
  • 1篇2章3节:从参数调节的角度理解到LLM的最佳方案