跳转到内容

Skills Manager

头文件:claw_skill.h

claw_skill 负责在模型上下文中管理用户可见的「Skills」:

  • 文件系统中有一组 Skills 文件(若干 .md)和一份 Skills 清单(skills_list.json),描述有哪些 Skills、摘要是什么、文档文件是谁。
  • 每个 Session 有一组「当前激活」的 Skill id,持久化在 Session 状态目录下。
  • 激活某个 Skill 后,模型侧可以看到更完整的 Skill 文档,并可通过 cap_skill 提供的工具继续激活/关闭 Skill。

claw_skill_config_t 主要字段:

  • skills_root_dir:Skills 文件与 skills_list.json 的根目录(demo:/fatfs/skills)。
  • session_state_root_dir:每个 session 的激活状态文件存放目录(demo 与会话历史共用相同根路径)。
  • max_file_bytes:单个 Skill 文档文件的最大读取字节数(防止超大文档撑满上下文)。

claw_skill 以两个 context provider 的形式接入 claw_core

  1. claw_skill_skills_list_provider:每次请求时,把 skills_list.json 中所有 Skills 的 id、summary 渲染成文本注入系统 Prompt,让模型知道「当前有哪些可用 Skills」。
  2. claw_skill_active_skill_docs_provider:把当前 session 中已激活的 Skills 的 .md 文件内容拼入上下文,提供完整的 Skill 文档。

因此,激活某个 Skill 等价于把它的 .md 内容加入下一次请求的上下文,模型看到的工具说明、行为约定都由这份文档决定。

激活状态是按 session 隔离的:

  • Session A 激活 weather,Session B 不受影响。
  • 状态以文件形式持久化在 session_state_dir,重启后恢复。
  • 可通过 cap_skill 提供的 activate_skill / deactivate_skill 工具由模型操作,也可用 Console skill 命令人工操作。

运行时读取的 /fatfs/skills/skills_list.json 由两个来源合并而来:

  1. application/basic_demo/fatfs_image/skills/:demo 工程自带的 Skills 文件,通过 FATFS 镜像直接打包进固件。
  2. 组件自带 Skills:各 cap_* / lua_module_* 组件目录下的 skills/ 子目录,由 tools/sync_component_skills.py 在构建阶段自动同步合并到 fatfs_image/skills/,再一并打包。

注意:application/basic_demo/main/skills/ 目录下的文件参与上述同步流程,不会出现在运行时 FATFS 上,请勿将 Skill 文件放在此处。