乐于分享
好东西不私藏

OpenClaw 技能系统源码探索

OpenClaw 技能系统源码探索

想象一下,你有一个万能的 AI 助手,但它需要完成特定领域的专业任务时却显得力不从心。比如你想让它帮你操作 1Password 读取密钥,它不知道该怎么登录、怎么安全地处理敏感信息。这时候,OpenClaw 的技能系统(Skills System) 就派上用场了。

技能系统就像是给 AI 助手添加的专业插件,让它能够胜任各种特定领域的任务。本文将用通俗易懂的方式,带你了解 OpenClaw 技能系统的设计与实现。

什么是技能系统?

简单来说,技能系统是 OpenClaw 用来扩展 AI 助手能力的一种机制。它允许开发者或用户为 AI 助手编写”技能说明书”,告诉 AI 在特定场景下应该如何正确、专业地行动。

就像人类厨师需要菜谱、汽车需要说明书一样,AI 助手也需要通过技能来掌握专业技能。一个技能可能包括:如何安装软件、如何登录账户、如何安全地处理密码等。

技能文件:AI 的专业指南

在 OpenClaw 中,每个技能都存储在一个名为 SKILL.md 的文件中。这个文件名本身就暗示了它的作用——它是技能的”技能卡”。

技能文件的结构

让我们以 1Password 技能为例,看看它的结构:

---name: 1passworddescription: Set up and use 1Password CLI (op). Use when installing              the CLI, enabling desktop app integration, signing in...homepage: https://developer.1password.com/docs/cli/get-started/metadata:  {    "openclaw": {      "emoji": "🔐",      "requires": { "bins": ["op"] },      "install": [{ "kind": "brew", "formula": "1password-cli" }]    }  }---# 1Password CLI## Workflow1. Check OS + shell.2. Verify CLI present: `op --version`.3. Create tmux session...4. Sign in...5. Read secrets...## Guardrails- Never paste secrets into logs- Prefer `op run` / `op inject` over writing to disk

这个文件分为两大部分:

前置数据(Frontmatter):位于 --- 之间的 YAML 格式数据,包含技能的基本信息:

  • name
    技能名称
  • description
    技能描述,用于 AI 识别何时使用
  • metadata
    技术配置,如依赖项、安装方法等

内容主体:使用 Markdown 格式,包含:

  • Workflow
    标准工作流程,AI 按步骤执行
  • References
    参考资料文档
  • Guardrails
    安全规则,确保正确使用

技能的发现与加载

当你请求 AI 助手完成某个任务时,OpenClaw 会经历以下过程:

第一步:扫描技能目录

OpenClaw 会在多个预设位置扫描技能文件:

技能加载优先级(低 → 高):1. 额外目录(extraDirs)2. 捆绑技能(bundled) - OpenClaw 内置3. 管理技能(managed) - 用户管理4. 个人代理技能(personalAgentsSkills)5. 项目代理技能(projectAgentsSkills)6. 工作区技能(workspaceSkills) - 当前项目

第二步:解析技能文件

对于找到的每个 SKILL.md 文件,系统会:

  1. 读取文件内容
    安全地读取文件,防止路径遍历攻击
  2. 解析前置数据
    提取名称、描述、依赖等信息
  3. 验证完整性
    确保必要字段存在
  4. 创建技能对象
    生成结构化的技能数据

第三步:格式化呈现

加载的技能会被格式化成 XML 格式的提示,发送给 AI 模型:

<available_skills><skill><name>1password</name><description>Set up and use 1Password CLI (op)...</description><location>~/.bun/install/global/node_modules/@openclaw/skills/1password/SKILL.md</location></skill><skill><name>github</name><description>GitHub CLI operations...</description><location>~/.bun/install/global/node_modules/@openclaw/skills/github/SKILL.md</location></skill></available_skills>

AI 如何使用技能

技能文件加载后,AI 是如何使用它的呢?这里涉及一个精妙的协作机制:

交互流程

用户: "请帮我从 1Password 读取 API 密钥"         ↓┌────────────────────────────────────────────┐│ AI 模型分析请求,识别到需要 1Password 技能 │└────────────────────────────────────────────┘         ↓┌────────────────────────────────────────────┐│ AI 使用 Read 工具加载 SKILL.md 文件        │└────────────────────────────────────────────┘         ↓┌────────────────────────────────────────────┐│ AI 解析 Workflow,按步骤执行:             ││   1. 检查环境 (uname, $SHELL)              ││   2. 验证 CLI (op --version)               ││   3. 创建 tmux 会话                        ││   4. 执行登录认证                          ││   5. 读取密钥                              │└────────────────────────────────────────────┘         ↓┌────────────────────────────────────────────┐│ AI 遵循 Guardrails 安全规则               ││ (不粘贴密钥到日志、使用 op run 等)         │└────────────────────────────────────────────┘         ↓用户: 收到结果(安全处理后的响应)

AI 的决策过程

当 AI 接收到用户请求时,它会:

  1. 意图识别
    分析用户想要完成什么任务
  2. 技能匹配
    从可用技能列表中选择最合适的
  3. 指令执行
    按照 Workflow 的步骤逐步执行
  4. 安全检查
    确保遵守 Guardrails 中的规则
  5. 结果呈现
    以用户友好的方式返回结果

技术实现架构

从代码层面看,OpenClaw 的技能系统设计得非常模块化:

核心模块

模块
职责
关键文件
技能加载器
从文件系统加载技能
local-loader.ts
工作区管理
管理多个来源的技能
workspace.ts
前置数据解析
解析 YAML 配置
frontmatter.ts
技能契约
定义技能接口和格式化
skill-contract.ts
运行时集成
与 AI 模型集成
skills-runtime.ts
系统提示构建
构建发送给 AI 的提示
system-prompt.ts

数据流

文件系统 (SKILL.md)    ↓local-loader.ts (读取和解析)    ↓workspace.ts (多来源管理和过滤)    ↓skills-runtime.ts (运行时集成)    ↓system-prompt.ts (构建 AI 提示)    ↓AI 模型 (Claude/GPT/Gemini)    ↓工具调用 (Read/RunCommand)    ↓技能执行结果

技能的优势

为什么 OpenClaw 要设计这样一套技能系统?它带来了哪些好处?

1. 专业性

每个技能都包含了该领域的最佳实践。以 1Password 为例:

  • 正确创建 tmux 会话避免重复登录
  • 使用 op run 而不是直接暴露密钥
  • 遵循安全准则不记录敏感信息

2. 可扩展性

添加新技能非常简单:

  • 创建新的技能目录
  • 编写 SKILL.md 文件
  • 放置到对应目录即可

3. 隔离性

技能之间相互隔离,不会互相影响:

  • 每个技能有独立的目录
  • 依赖项独立管理
  • 冲突最小化

4. 安全性

通过 Guardrails 机制:

  • 禁止危险操作
  • 强制安全最佳实践
  • 减少误操作风险

5. 可维护性

结构化的文件格式:

  • 易于阅读和修改
  • 版本控制友好
  • 便于分享和复用

实际应用场景

技能系统可以应用于多种场景:

开发者工具

  • GitHub
    自动创建仓库、处理 PR
  • Docker
    构建和部署容器
  • Kubernetes
    管理集群和部署

效率工具

  • 1Password
    安全的密钥管理
  • Slack
    消息和频道管理
  • Notion
    文档和知识库操作

系统管理

  • Tmux
    终端会话管理
  • Shell
    命令执行自动化
  • Cron
    定时任务配置

未来展望

OpenClaw 的技能系统是一个持续演进的项目:

  • 更多内置技能
    :开箱即用的技能会越来越多
  • 技能市场
    :可能支持用户分享和销售技能
  • 智能技能推荐
    :根据项目特点自动推荐相关技能
  • 跨平台技能
    :一次编写,多平台运行

结语

OpenClaw 的技能系统是一项巧妙的设计,它通过结构化的文件格式和清晰的接口定义,让 AI 助手能够专业、安全地完成各种特定领域的任务。

这种设计理念体现了几个重要原则:

  • 专业化
    让专业的事交给专业的技能
  • 简单化
    用户只需发出自然语言请求
  • 安全性
    内置最佳实践和安全规则
  • 可扩展
    任何人都可以编写新技能

随着 AI 技术的发展,技能系统将成为人机协作的重要桥梁,让 AI 真正成为我们得力的专业助手。