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 文件,系统会:
- 读取文件内容
安全地读取文件,防止路径遍历攻击 - 解析前置数据
提取名称、描述、依赖等信息 - 验证完整性
确保必要字段存在 - 创建技能对象
生成结构化的技能数据
第三步:格式化呈现
加载的技能会被格式化成 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 接收到用户请求时,它会:
- 意图识别
分析用户想要完成什么任务 - 技能匹配
从可用技能列表中选择最合适的 - 指令执行
按照 Workflow 的步骤逐步执行 - 安全检查
确保遵守 Guardrails 中的规则 - 结果呈现
以用户友好的方式返回结果
技术实现架构
从代码层面看,OpenClaw 的技能系统设计得非常模块化:
核心模块
|
|
|
|
|---|---|---|
|
|
|
local-loader.ts |
|
|
|
workspace.ts |
|
|
|
frontmatter.ts |
|
|
|
skill-contract.ts |
|
|
|
skills-runtime.ts |
|
|
|
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 真正成为我们得力的专业助手。
夜雨聆风