区分两个概念:

  • 静态加载:启动 Agent 时加载全部 Skill(传统方案)
  • 渐进式分层加载:初始只加载基础层,随任务推进逐层解锁、动态注入 Skill 元信息

🧩 三层加载模型

“渐进式披露”通过以下三个层级实现:

层级 内容 加载时机 Token 消耗 作用
Level 1: 元数据 (Metadata) Skill 的名称 (name) 和简介 (description) Agent 启动时常驻内存 ~100 tokens/个,非常轻量 作为“索引”或“目录”,让 Agent 知道有哪些能力可用
Level 2: 核心指令 (Instructions) SKILL.md 文件中的完整操作流程、最佳实践 当 Level 1 匹配成功,Skill 被“触发”时加载 通常 < 5000 tokens 提供完成任务所需的“操作手册”
Level 3: 附属资源 (Resources) 参考文档、脚本、模板等 按需读取,仅在执行具体操作时访问 几乎无上限,且不占用上下文 作为“弹药库”,按需调用,不占用上下文窗口

正是这种设计,让 Agent 可以在拥有海量 Skills 的情况下,依然保持上下文的轻量高效。一个 Skill 的典型目录结构如下:

skill-name/
├── SKILL.md          # 包含 Level 1 (YAML头部) 和 Level 2 (正文)
├── references/       # Level 3: 补充文档
├── scripts/          # Level 3: 可执行脚本
└── assets/           # Level 3: 模板、图片等资源

先明确边界:

元索引 = 检索层数据(轻量,用于 Agent 路由、意图匹配、召回候选 Skill) Skill 完整脚本 = 执行层数据(大文本、流程、Prompt、代码,按需加载)

“Skill 元索引”(即轻量级元数据)

并没有一个统一的标准存储位置,其具体位置取决于你所使用的 Agent 框架或工具。

不过,这些元索引的来源是固定的:它们都是从每个 Skill 目录下的 SKILL.md 文件头部 YAML 格式的元数据(Frontmatter)中提取、编译而成的。

在具体实践中,元索引主要有以下几种存储形式:

📄 形式一:独立的 Markdown 索引文件 (INDEX.md)

这是一种广泛采用的方式,通过一个独立的 Markdown 文件来集中管理所有技能的摘要信息。

  • 位置与原理:通常位于一个约定的目录下,例如 memory/skills/INDEX.md。Agent 在启动时会读取这个轻量级的索引文件,只加载技能的名称和摘要,而完整的技能指令则在需要时才加载。

  • 工作机制:索引文件可以手动创建,也可以通过工具(如 skill-create.js)自动扫描并生成。

  • 项目应用:例如在 agent-skills 项目中,就采用了 memory/skills/INDEX.md 这种模式。

📁 形式二:结构化数据文件 (JSON / YAML / DB)

另一种常见方式是将元数据存储在结构化的数据文件中,以便于程序进行检索和管理。

  • JSON 文件:可以存储所有技能的元数据列表,或作为缓存文件来加速索引。例如,skills_index.json 就是一个常见的技能索引文件。

  • YAML 文件:同样可用于存储结构化的元数据,例如 skills-index.yaml 文件。

  • SQLite 数据库:对于技能数量非常大的场景,会使用 SQLite 这类嵌入式数据库来存储和检索元数据。例如,skill-split 项目就将技能存储在 SQLite 数据库中。

🧠 形式三:运行时内存索引

在 Agent 运行时,元数据常被加载到内存中,以提升检索效率。

  • 工作原理:Agent 启动时扫描目录,解析所有 SKILL.md 文件,将提取的元数据构建成一个内存中的索引。

  • 优势:这种方式能提供极快的检索速度,并且可以按需刷新。

⚙️ 特定框架的实践

  • Claude Code(官方):没有独立的索引文件,而是在启动时直接扫描 ~/.claude/skills/ 和项目下的 .claude/skills/ 目录,即时加载所有 SKILL.md 中的元数据。

  • skillhub:其 CLI 工具会生成一个 AGENTS.md 文件,并在其中写入技能的元数据索引区块。

  • OpenSkills:其 SkillManager 组件会维护一个 _metadata_index 列表,用于存放所有已发现技能的元数据。

🚀 高级优化:分层路由树 (Routing Tree)

当 Skills 数量增多(比如几十上百个),仅靠 Level 1 的元数据匹配可能仍会低效。SkillTree 这类工具引入了 ROOT → ROUTER → SKILL 的树形路由结构。

  • 工作方式:Agent 首先读取一个轻量的 ROOT.md 路由表,根据用户意图向下导航到对应的 ROUTER.md,最终才精确定位并加载所需的叶子 SKILL.md

  • 核心优势:将“大海捞针”式的匹配,变成了按图索骥的导航,进一步避免了一次性扫描所有 Skill 带来的开销。

💎 总结:为什么这很重要?

Agent Skill 的加载分层模型之所以是突破性设计,是因为它:

  • 节约成本:避免将海量无关信息填入有限的上下文窗口,直接节省了 Token 消耗。

  • 提升效果:让 Agent 的“工作台”更整洁,能专注于当前任务,减少干扰,提升决策质量。

  • 实现无限扩展:理论上,你可以为 Agent 装备无限的 Skills,而无需担心上下文被撑爆。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐