返回首页

文章详情

2026.03.11

3 分钟阅读

openclaw / ai-agent / tool-use / prompt-engineering

OpenClaw 的 Skill 不是工具:它是 Agent 的运行时说明层

从发现、优先级、gating、prompt 注入与安全边界拆解 OpenClaw Skill,解释一份 Markdown 如何改变 Agent 的决策,而又为什么不能把它等同于真实权限。

铺在深色工作台上的 Transformer 架构草图和代码稿纸

当一个 Agent 会查天气、处理图片或调用命令时,我们容易把能力归因给模型:它“学会了”使用工具。

但模型参数、工具接口和操作说明是三件不同的东西。工具提供真实执行能力,模型负责选择下一步,Skill 则告诉 Agent 某类任务什么时候该走哪条路径、有哪些约束、应该如何调用已有工具。

在 OpenClaw 中,这层说明主要由目录里的 SKILL.md 承担。它看起来只是 Markdown,却会进入运行时上下文,直接影响 Agent 的判断。

Skill 教方法,Tool 才执行动作

一个最小 Skill 包含 YAML frontmatter 和正文:

markdown
---
name: image-lab
description: Generate or edit images through the configured provider
---

When the user asks to edit an image, inspect the source first...

namedescription 帮助系统和模型识别用途,正文描述工作流。目录中还可以放脚本、模板和参考资料,但 Skill 本身不是新的底层权限。

如果运行时没有浏览器工具,一份“如何控制浏览器”的 Skill 不会凭空创造浏览器。如果 Agent 已经有 shell 权限,Skill 则可能教它执行一串真实命令。能力来自工具和权限,行为路径来自说明。

这一区分是理解 Agent 系统的第一步。

OpenClaw 如何找到 Skill

根据当前官方文档,同名 Skill 会按来源优先级覆盖。由高到低包括:

  1. 工作区 <workspace>/skills
  2. 项目 Agent 的 <workspace>/.agents/skills
  3. 个人 ~/.agents/skills
  4. 共享的 ~/.openclaw/skills
  5. 安装包自带的 bundled skills;
  6. 额外目录与插件提供的 skills。

优先级的意义很实际:团队可以在项目内覆盖一个通用 Skill,为当前代码库增加更严格的约束,而不用修改全局版本。

它也意味着排查问题不能只问“文件存不存在”,还要问“最终生效的是哪一份”。同名覆盖常常比模型行为更值得先检查。

不是发现了就一定可用

OpenClaw 会在加载时做 eligibility gating。Skill 可以声明所需操作系统、命令、环境变量和配置项;条件不满足时,它不会进入当前可用集合。

例如,一个依赖 ffmpeg 和特定 API key 的视频 Skill,在二进制或环境变量缺失时应被过滤。这样模型不会在一个不可能成功的前提上规划任务。

此外,Agent allowlist 可以进一步限制某个 Agent 看见哪些 Skill。需要注意:allowlist 控制的是能力目录的可见性,不是主机 shell 的安全边界。若同一 Agent 仍有宽泛的 exec 权限,系统还必须用沙箱、OS 用户、命令策略和最小凭证来约束执行。

真正注入 Prompt 的是紧凑目录

符合条件的 Skill 会被编译成紧凑 XML 块,注入 system prompt。这个目录主要包含名称、描述和位置等信息,让模型知道“当前有哪些路径可用”。

模型匹配到相关能力后,可以根据位置读取对应 SKILL.md,再按正文执行。可以把它理解成两层:

text
system prompt 中的 Skill 目录 -> 选择可能相关的 Skill
SKILL.md 详细说明             -> 约束具体执行过程

这种渐进披露避免把所有完整说明一次塞进上下文。官方文档甚至给出了目录的字符开销估算,并建议描述保持简短明确。

Skill 列表通常会在会话开始形成快照;文件变更监视或远程节点变化可以触发刷新。修改 Skill 后行为没有立刻变化时,会话快照也是排查点之一。

Description 是路由规则的一部分

如果 description 只写“helpful utilities”,模型很难知道何时选择它。好的描述应该说明任务类型、典型触发和关键边界,例如“在用户要求生成或编辑图片时使用;编辑前必须检查源图”。

这不是 SEO 文案,而是路由输入。描述过宽会抢走不相关任务,描述过窄则让 Skill 很少被发现。正文写得再好,路由没有命中也不会发挥作用。

因此,评估一个 Skill 不能只看说明是否完整,还要测试:

  • 该触发的请求是否触发;
  • 不该触发的请求是否保持沉默;
  • 依赖缺失时是否被正确过滤;
  • 与同名 Skill 冲突时哪一份生效。

Markdown 也是攻击面

Skill 是会影响 Agent 行为的操作文本。第三方 Skill 还可能附带脚本,并在 Agent 的真实权限下运行。OpenClaw 官方文档明确建议把第三方 Skill 当作不可信代码,在启用前阅读,并对高风险工具使用沙箱。

安装来源、版本更新和依赖安装都应该进入供应链审查。至少要检查:

  • 它要求哪些环境变量和凭证;
  • 正文是否诱导扩大权限或绕过确认;
  • 脚本会访问哪些文件和网络地址;
  • 更新后 SKILL.md 与脚本是否发生实质变化。

“只是 Markdown”不是安全理由。对 Agent 来说,指令本身就可能是执行入口。

我的判断

Skill 最有价值的地方,不是给工具调用换了一个时髦名字,而是把原本散落在 system prompt、团队口头规范和脚本注释里的操作知识,变成可版本化、可覆盖、可测试的运行时资产。

它同时暴露了 Agent 设计的一条底线:说明、能力与权限必须分层。 Skill 可以教模型怎么做,工具决定能不能做,安全策略决定允许做到哪里。把三者混在一起,系统既难排查,也难信任。

参考