需围绕技能定义、执行环境、上下文感知与调用协议四维度系统搭建:一、用yaml规范定义skill元信息与参数;二、以纯python函数实现executor并返回标准响应;三、在config.yaml中配置scan_paths与priority并校验;四、通过context参数注入会话与用户信息;五、用call_skill实现skill间协同调用。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您希望基于OpenClaw框架从零开始构建一套完整、可复用、可扩展的个人Skills套装,则需围绕技能定义、执行环境、上下文感知与调用协议四个核心维度进行系统性搭建。以下是具体实施路径:
一、定义Skill基础结构与YAML规范
每个Skill必须以标准化YAML文件描述其元信息、输入参数、触发条件及执行逻辑,确保OpenClaw运行时能统一解析与注册。该结构是整个Skills生态的语法基石,缺失或格式错误将导致Skill无法被加载。
1、在项目根目录下创建skills/子目录,并在其中为每个Skill新建独立子文件夹,如skills/weather_query/。
2、在该子文件夹内新建skill.yaml,按以下字段严格填写:name(唯一标识符)、version(语义化版本号)、description(功能简述)、inputs(键值对形式声明必需参数及类型)、triggers(支持的intent列表或正则pattern)、executor(指向Python模块路径,如weather_query.main:run)。
3、确保inputs中每个参数包含type(如string、number、boolean)和required(布尔值),不允许多余字段或嵌套schema。
二、实现Skill执行逻辑与本地函数封装
Executor模块必须为纯Python函数,接收字典参数并返回标准响应结构,禁止直接操作全局状态或依赖未声明的外部服务实例。该函数是Skill能力的实际载体,其健壮性决定整个技能的可用性。
1、在skills/weather_query/下创建main.py,定义run函数,签名必须为def run(inputs: dict) -> dict:。
2、函数内部仅使用inputs字典提取参数,调用已安装的第三方库(如requests)完成业务逻辑,禁止读取环境变量或配置文件。
3、返回字典必须包含"status"(success或error)、"data"(业务结果)和"message"(人类可读提示),不可省略任一键。
三、配置OpenClaw Runtime技能加载策略
OpenClaw默认仅扫描预设路径下的YAML文件并动态导入对应executor,需显式声明扫描范围与加载优先级,否则新添加的Skill将处于未注册状态,无法被意图识别器匹配。
1、编辑项目根目录的config.yaml,在skills节点下添加scan_paths列表,填入["skills/"]或更精确的子路径如["skills/weather_query/", "skills/reminder/"]。
完整的工作区安全套件:检测未授权修改,扫描提示注入模式,自动响应应对措施——快照恢复、技能隔离、Git回滚和自动保护扫描。智能体工作区的完整安装后安全层。
2、若存在同名Skill冲突,通过priority字段指定整数值,数值越大优先级越高,OpenClaw将丢弃低优先级同名注册项。
3、启动OpenClaw服务前,执行openclaw-cli validate --all命令校验所有YAML语法及executor路径可达性,输出VALID后方可继续。
四、注入上下文感知中间件
单一Skill需能感知当前会话ID、用户身份、设备类型等上下文信息,以便执行个性化逻辑。OpenClaw通过ContextProvider接口注入,而非硬编码获取,保障Skill的可移植性与测试隔离性。
1、在skills/weather_query/main.py中,于run函数签名末尾添加**, context参数,使函数变为def run(inputs: dict, **context) -> dict:。
2、在context字典中可安全访问"session_id"、"user_id"、"device_type"等字段,无需判空——OpenClaw保证这些键始终存在且为字符串类型。
3、禁止在run函数内修改context字典内容,所有副作用必须通过返回值中的"data"字段显式表达。
五、启用Skill间协同调用协议
复杂任务需多个Skill链式协作,OpenClaw提供call_skill内置函数实现跨Skill同步调用,调用方无需关心目标Skill的路径或参数校验,由Runtime统一处理。
1、在任意Skill的run函数中,导入from openclaw.runtime import call_skill。
2、使用result = call_skill("weather_query", {"location": "Beijing"})发起调用,第一个参数为skill.yaml中定义的name字段值,第二个参数为符合其inputs声明的字典。
3、call_skill返回结构与本地run函数一致,即含status、data、message三字段,调用方须检查result["status"] == "success"后再使用result["data"]。









