第九章:Agent 技能插件(Skills)
欢迎来到第九章!在前面的章节中,我们已经构建了一个功能完善的 AI Agent,具备了工具调用、上下文管理、记忆系统、RAG 能力和安全防护机制。
本章介绍 Agent 技能插件(Skills)——本质上是一段描述性文字,指导模型在不同场景下如何使用工具。
核心设计理念:
- 技能即提示:技能不是代码,而是精心设计的提示词,告诉模型在特定场景下该怎么做
- 渐进式加载:只在 system prompt 中注入技能元数据(名称+描述),完整内容按需加载,避免占用过多 token
例如:"代码审查"技能不会改变 Agent 的能力,而是告诉模型:审查代码时应该检查哪些方面、按照什么步骤、输出什么格式。模型仍然使用相同的工具(read、write 等),只是更有章法。
🎯 你将学到什么
- 技能抽象:将常见任务模式抽象为可复用的技能描述
- 技能路由:LLM 自动识别任务类型并选择合适的技能
- Markdown 技能文件:使用 YAML front matter + Markdown 正文定义技能
- 按需加载:技能元数据注入 system prompt,完整内容按需加载
🛠 核心功能
1. 技能插件设计
核心概念:
💡 技能不是新功能,而是使用说明书
Agent 的能力来自工具(bash、read、write 等),技能只是告诉模型:
- 面对这类任务时,该用什么步骤?
- 该检查哪些方面?
- 该输出什么格式?
就像厨师的刀不变,但切菜、切片、切丁有不同的手法。
渐进式加载设计 - 解决 token 消耗问题:
初始化时(每次对话):
System Prompt: {skills}
↓
- **Code Review**: Review code for bugs...
- **Debug**: Diagnose and fix issues...
- **Refactor**: Improve code structure...
↓
Token 成本:~50 tokens(只有名称+描述)
运行时(仅当需要时):
LLM 决定需要 Code Review 技能
↓
调用 load_skill(name="code-review")
↓
返回完整技能内容(~500 tokens)
↓
LLM 按照指导执行任务对比:如果不分渐进式加载
- 10 个技能 × 500 tokens = 5000 tokens 每次请求
- 渐进式:50 tokens + 按需 500 tokens
- 节省:90%+ 的 token 成本
实现机制:
问题:Agent 面对不同类型的任务时,往往需要遵循特定的模式和最佳实践。
解决方案:将常见任务模式抽象为技能(Skills),通过两层机制让 Agent 使用:
技能发现与元数据注入:
- Agent 初始化时扫描
.babyagent/skills/目录 - 解析每个技能的 front matter(name, description)
- 将技能列表注入到 system prompt 的
{skills}占位符
按需加载完整内容:
- LLM 分析任务后调用
load_skill工具 - 工具读取完整的技能 Markdown 内容
- 自动发现并包含
scripts/和references/目录中的相关文件 - 技能指导注入到对话中,引导 LLM 执行
2. 技能文件格式
技能使用标准的 Markdown + YAML front matter 格式: