首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >OpenClaw 架构下 Skills System —— 为什么“文档即工具”是 OpenClaw 的扩展灵魂

OpenClaw 架构下 Skills System —— 为什么“文档即工具”是 OpenClaw 的扩展灵魂

作者头像
jack.yang
发布2026-03-15 07:55:54
发布2026-03-15 07:55:54
6300
举报
文章被收录于专栏:openclaw系列openclaw系列

关键词:Skills System|SKILL.md|文档即工具|依赖声明|环境感知|零配置扩展

在 OpenClaw 中,AI 的能力边界不由代码硬编码决定,而由一组名为 Skills(技能)的轻量级模块动态扩展。每个 Skill 以纯文本文件 SKILL.md 形式存在,既是人类可读的使用文档,又是机器可执行的工具定义

这种“文档即工具”(Documentation-as-Tool)的设计,使 OpenClaw 实现了三大突破:

  • 开发者友好:写文档 = 写功能
  • 用户透明:无需黑箱,所有能力可审计
  • 系统安全:依赖与权限显式声明,拒绝隐式行为

本文将详解 Skills System 的核心机制:

  1. SKILL.md 结构:Frontmatter + Markdown 示例
  2. 依赖声明与自动安装(brew/npm/uv)
  3. 环境感知:按 OS/架构过滤技能

一、为什么需要 Skills System?

传统 AI 工具链面临两大问题:

  • 能力封闭:工具逻辑藏在代码中,用户无法理解或修改
  • 扩展复杂:新增功能需重启服务、编写 TypeScript、处理依赖

OpenClaw 的解法是:让每个技能成为自包含的“说明书+执行蓝图”

你看到的文档,就是 AI 执行的依据

二、SKILL.md:一份文件,双重身份

每个 Skill 存储为项目目录下的 .SKILL.md 文件(注意后缀),例如:

代码语言:javascript
复制
skills/
├── restart_db.SKILL.md
├── analyze_logs.SKILL.md
└── deploy_webapp.SKILL.md

文件结构:YAML Frontmatter + Markdown Body

代码语言:javascript
复制
---
name: restart_db
description: 重启指定 Kubernetes 部署中的数据库
parameters:
  - name: deployment
    type: string
    required: true
    description: 数据库部署名(如 'postgres-prod')
dependencies:
  - type: command
    name: kubectl
  - type: package
    manager: brew
    name: k9s
os: ["linux", "darwin"]
examples:
  - input: "重启生产数据库"
    args: { deployment: "postgres-prod" }
---

## 使用说明

本技能通过 `kubectl rollout restart` 安全重启数据库 Pod。

### 权限要求
- 必须拥有目标命名空间的 `deployments/rollout` 更新权限

### 安全限制
- 禁止操作 `kube-system` 命名空间
- 自动添加 `--namespace=default`(若未指定)

## 执行逻辑

```bash
kubectl rollout restart deployment/{{ deployment }} --namespace={{ namespace | default("default") }}
代码语言:javascript
复制
> **人类读 Markdown,机器读 Frontmatter + 模板**。

---

## 三、核心组件:Skill Parser 与 Executor

OpenClaw 启动时自动扫描 `skills/` 目录:

### 1. **解析阶段**(parse-skill-md.ts)
- 提取 YAML Frontmatter → 构建 `SkillMetadata`
- 验证参数契约(类型、必填)
- 编译模板(Handlebars 语法)

### 2. **注册阶段**
```ts
const skill = parseSkillFile('skills/restart_db.SKILL.md');
skillRegistry.register(skill.name, skill);

3. 执行阶段(当 LLM 调用该技能)

代码语言:javascript
复制
// agent-core.ts
if (toolCall.name in skillRegistry) {
  const skill = skillRegistry.get(toolCall.name);
  
  // 1. 检查环境兼容性
  if (!isOSCompatible(skill.os)) {
    throw new Error(`Skill ${name} not supported on this OS`);
  }

  // 2. 安装依赖(若缺失)
  await installDependencies(skill.dependencies);

  // 3. 渲染命令模板
  const cmd = renderTemplate(skill.template, toolCall.args);

  // 4. 在沙箱中执行
  return execInSandbox(cmd);
}

从文档到执行,全自动流水线

四、机制一:依赖声明与自动安装

技能可声明运行所需依赖,OpenClaw 自动安装(需用户审批):

支持的依赖类型

image
image

示例:Python 技能依赖

代码语言:javascript
复制
dependencies:
  - type: python
    packages:
      - "pandas>=2.0"
      - "matplotlib"
    installer: uv  # 或 pip

安全策略

  • 首次使用才安装:避免启动时静默下载
  • 用户审批:高危依赖(如 sudo 工具)需手动确认
  • 隔离环境:Python 包安装至 .venv/skill-name/

依赖即声明,安装即可控

五、机制二:环境感知 —— 按 OS/架构过滤技能

并非所有技能在所有设备上都适用:

  • Windows 无法运行 brew
  • ARM 设备可能无 NVIDIA 驱动

OpenClaw 通过 osarch 字段实现自动过滤:

Frontmatter 声明

代码语言:javascript
复制
os: ["linux", "darwin"]     # 不支持 Windows
arch: ["amd64", "arm64"]   # 不支持 32 位

运行时过滤

代码语言:javascript
复制
function isSkillCompatible(skill: Skill): boolean {
  const currentOS = process.platform; // 'linux', 'darwin', 'win32'
  const currentArch = process.arch;   // 'x64', 'arm64'

  return (
    (skill.os?.includes(currentOS) ?? true) &&
    (skill.arch?.includes(currentArch) ?? true)
  );
}

// 注册时跳过不兼容技能
if (isSkillCompatible(skill)) {
  registry.register(skill.name, skill);
}

效果

  • 用户在 Windows 上看不到 brew install 相关技能
  • Raspberry Pi 自动禁用 CUDA 依赖技能

技能适配环境,而非环境迁就技能

六、安全与审计优势

1. 透明性

  • 所有技能源码可见,无隐藏逻辑
  • 用户可审查 SKILL.md 后再启用

2. 最小权限

  • 技能只能访问 allowedPaths 中的目录
  • 命令模板经沙箱执行,无法逃逸

3. 版本控制友好

  • SKILL.md 可纳入 Git,支持 diff/PR
  • 团队可共建内部技能库

七、开发者体验:创建一个新技能

只需三步:

1. 创建文件

代码语言:javascript
复制
touch skills/hello_world.SKILL.md

2. 编写内容

代码语言:javascript
复制
---
name: hello_world
description: 向用户问好
parameters:
  - name: name
    type: string
    required: true
examples:
  - input: "打招呼"
    args: { name: "Alice" }
---

echo "Hello, {{ name }}! Today is $(date)."

3. 保存即生效

  • 无需重启 OpenClaw(开发模式热重载)
  • Web UI 自动显示新技能及示例

写文档,就是写功能

八、未来方向:技能市场与社区共享

OpenClaw 计划推出:

  • 官方技能仓库openclaw-skills/core
  • 一键导入openclaw skill add github.com/user/repo
  • 自动测试:每个 PR 运行技能契约测试

但核心原则不变:所有技能必须是纯文本、可审计、无二进制

结语:文档不是附属品,而是第一等公民

Skills System 的本质,是对“代码即文档”理念的逆向升华——文档即代码,文档即能力,文档即信任。在 AI 能力日益强大的今天,OpenClaw 选择将控制权交还给用户:你不仅知道 AI 能做什么,更清楚它为什么能做、如何做、在什么条件下做

这不仅是扩展机制,更是开源精神在 AI 时代的延续。

在下一篇中,我们将探讨 OpenClaw 的部署模型演进:从单机 Docker 到 Kubernetes Operator。

下一篇预告第 19 篇:深入解析 OpenClaw 如何通过 ws-log.ts 模块实现高效、可读、低开销的 WebSocket 日志系统

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、为什么需要 Skills System?
  • 二、SKILL.md:一份文件,双重身份
    • 文件结构:YAML Frontmatter + Markdown Body
    • 3. 执行阶段(当 LLM 调用该技能)
  • 四、机制一:依赖声明与自动安装
    • 支持的依赖类型
    • 示例:Python 技能依赖
    • 安全策略
  • 五、机制二:环境感知 —— 按 OS/架构过滤技能
    • Frontmatter 声明
    • 运行时过滤
    • 效果
  • 六、安全与审计优势
    • 1. 透明性
    • 2. 最小权限
    • 3. 版本控制友好
  • 七、开发者体验:创建一个新技能
    • 1. 创建文件
    • 2. 编写内容
    • 3. 保存即生效
  • 八、未来方向:技能市场与社区共享
  • 结语:文档不是附属品,而是第一等公民
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档