Skills
Skills 可以为大语言模型提供更多的模块化「技能」——包括但不限于工具用法、工作流程、最佳实践、指导原则等。 与 Prompt 相比,Skills 可以精炼、整合、持久化「技能」,并在需要时按需加载,无需每次都提供完整的指示。
ESP-Claw 支持使用 Skills 机制动态管理上下文,同时扩展 Agent 的能力。特别地,ESP-Claw 可以通过 Skills 调用硬件设备,实现硬件控制。
手动增删和修改 Skills
Section titled “手动增删和修改 Skills”Skills 存放在文件系统中,默认路径为 /fatfs/skills。你可以通过 Web 配置页的文件系统管理功能增删 Skills。
文件夹fatfs
文件夹skills
- skills_list.json 储存 Skills 列表及元数据
- cap_im_qq.md QQ IM 能力用法的 Skill
- cap_lua_run.md Lua 脚本执行的 Skill
- cap_scheduler.md 定时调度器用法的 Skill
- cap_router_mgr.md Event Router 规则管理的 Skill
- lua_module_gpio.md Lua GPIO 模块用法的 Skill
- …
列表与元数据
Section titled “列表与元数据”与 Claude 的 Agent Skills 相比,ESP-Claw 的 Skills 不支持在 Markdown YAML Header 中定义 Skills 的属性。所有的元数据需要在 skills_list.json 中提供。
skills_list.json 格式
其中 id 与 summary 对应模型可见的 Skills 清单中的 Skill ID 与摘要。
cap_groups 是可选字段,指定一个 Capability Group ID 列表。当该 Skill 被激活时,列表中的 Group 会自动对 LLM 可见(开放相应工具);当该 Skill 被停用后,这些 Group 不再被纳入该 Skill 的可见集合。这一机制将「工具用法文档」与「工具本身」绑定在同一个 Skill 的生命周期内,避免大模型在不了解用法时就能访问工具。
Skill 文件
Section titled “Skill 文件”Skill 文件格式类似普通的 Markdown 文件。在 Skill 文件中,你需要详细提供「技能」——工具用法、工作流程、最佳实践、指导原则等。例如:
撰写有效的 Skill 文档
Section titled “撰写有效的 Skill 文档”Skill 的 .md 文件会在 LLM 激活后注入对话上下文,内容应面向 LLM 撰写,而非面向人类开发者。
好的 Skill 文档应具备:
| 要素 | 说明 |
|---|---|
| 场景描述 | 明确「何时用」,帮助 LLM 决定是否激活 |
| 调用规则 | 参数约束、顺序要求、频率限制 |
| JSON 示例 | 完整可复制的调用示例,而非自然语言描述 |
| 错误对照 | 常见错误信息与对应处理方式 |
| 与其他工具的关系 | 例如「需先调用 X 获取路径,再调用本工具」 |
以下是一份完整的 Capability Skill 文档模板:
Lua 模块 Skill 的写法
Section titled “Lua 模块 Skill 的写法”lua_module_* 的 Skill 面向「LLM 编写 Lua 代码」的场景,与 cap_* Skill 的 JSON 调用示例不同,应提供精确的 API 参考:
lua_module Skill 文档应包含:
| 要素 | 说明 |
|---|---|
| 简要说明 | 控制什么硬件、连接到哪个引脚/接口 |
| 初始化说明 | require 是否有副作用、是否需要额外 init 步骤 |
| 完整 API 参考 | 每个函数的参数类型、返回值、Lua 示例 |
| 使用规则 | 调用限制、与其他模块的依赖关系(如「需先 board_manager 初始化」) |
| 错误行为 | 哪些情况会 raise Lua error |
以 lua_module_display 的 Skill 为例,它详细列出了每个绘图函数的参数签名、可选 table 字段、返回值,以及「文本只支持 ASCII」等关键约束,这些信息都是 LLM 编写代码时不可或缺的。
一个 Skill 还是多个 Skill?
Section titled “一个 Skill 还是多个 Skill?”若 Capability 功能复杂、存在多个独立使用场景,可以拆分为多个 Skill,各自绑定相同的 Group:
这样 LLM 在简单任务时只激活 Basic Skill,保持上下文精简;复杂任务时再激活 Advanced Skill 获取完整指引。
由 Agent 增删和修改 Skills
Section titled “由 Agent 增删和修改 Skills”Skills 通常是某段重复工作或指导的精炼,因此通常可以在要求 Agent 完成某一项任务后,由 Agent 完成 Skills 的总结和迭代。
Skills 如何工作
Section titled “Skills 如何工作”通过上下文可以为模型提供 Tools、提出要求或额外规范。 但每次对话均需提供每个工具的完整用法、提供每条约束或技能的完整文档,不可避免地会导致上下文过长,影响模型表现、增加 Token 消耗。
Skills 是一种渐进式向大模型披露能力的机制。在初始状态下,大语言模型只会「看到」Skills 清单与每个 Skill 的摘要。 当模型认为某个 Skill 是当前工作所需的,模型会主动激活该 Skill,获取该 Skill 的完整文档。
若 Skill 配置了 cap_groups,激活时系统还会同步开放对应的 Capability Group,使 LLM 能立即调用相关工具,无需额外手动启用。任务完成后,模型可调用 deactivate_skill 停用 Skill,相关 Group 也随之退出该 Skill 的可见集,保持上下文精简。