LEARN CLAUDE CODE

S05: Skills — 按需加载的知识库

这一课解决什么问题

你想让 Agent 掌握很多专业技能——Git 操作规范、代码审查清单、部署流程、特定框架的最佳实践。把这些全塞进 system prompt?一个技能 500 token,20 个技能就是 10,000 token——还没开始干活,上下文窗口就吃掉了 10%。更糟糕的是,大多数任务只用到其中 1-2 个技能。

S05 的思路:只在 system prompt 放名字,内容按需加载

核心机制

┌────────────── 两层注入机制 ──────────────────┐ │ │ │ 第一层:System Prompt(始终存在) │ │ ┌───────────────────────────────────────┐ │ │ │ "你有以下可用技能: │ │ │ │ - git-commit: Git 提交规范 │ │ │ │ - code-review: 代码审查清单 │ │ │ │ - deploy: 部署流程 │ │ │ │ - react-best: React 最佳实践 │ │ │ │ ...共 20 个技能名称" │ │ │ │ │ │ │ │ 成本: ~200 tokens(只有名字) │ │ │ └───────────────────────────────────────┘ │ │ │ │ 用户说: "帮我提交代码" │ │ │ │ │ ▼ 模型识别需要 git-commit 技能 │ │ │ │ 第二层:按需加载(使用时才注入) │ │ ┌───────────────────────────────────────┐ │ │ │ 模型调用: use_skill("git-commit") │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ 从文件系统加载完整技能内容: │ │ │ │ skills/git-commit.md │ │ │ │ → 500 tokens 的详细规范 │ │ │ │ │ │ │ │ │ ▼ │ │ │ │ 注入到 messages[] 中(作为 system │ │ │ │ reminder 或 tool_result) │ │ │ └───────────────────────────────────────┘ │ │ │ │ 对比: │ │ 全量注入: 20 × 500 = 10,000 tokens(始终) │ │ 按需注入: 200 + 500 = 700 tokens(本次) │ └───────────────────────────────────────────────┘

关键概念解释

对应到 Claude Code 官方的什么

SkillTool + skill loading 机制

Claude Code 的技能加载和 S05 几乎一致:

  • 技能名称列表在 system prompt 中以 system-reminder 形式注入
  • 用户输入 /commit 或模型检测到需要某技能时,SkillTool 加载 .prompt 文件
  • 技能来源可以是本地 .claude/skills/、bundled 内置技能、MCP 服务器提供的 prompts
  • 加载后的技能内容作为消息注入到对话上下文中

官方还支持技能的依赖声明和触发条件匹配。

变更对比表

维度S04(无技能系统)S05(Skills)
专业知识来源只靠模型训练时学到的可外挂任意领域知识
System prompt 成本固定(或全量膨胀)只有名称索引,极低
知识可维护性无法更新模型知识修改 .md 文件即可更新
知识覆盖范围通用但不深可针对团队/项目深度定制
新增组件skill 目录注入 + use_skill 工具 + 文件加载器
洞察:这个两层加载模式和 Claude Code 的 ToolSearch 是同一个设计思想——启动时只暴露名字,使用时才加载完整 schema。整个 Claude Code 架构中反复出现这种「延迟加载」模式,因为上下文窗口是最稀缺的资源。