第 8 章
Skills 技能系统
按需加载的知识库
🎯
像图书馆里借书
你不可能把图书馆的所有书都背下来。但你知道需要什么主题时,可以去借对应的书。Agent 的技能系统也是这样 —— 它不会把所有知识都塞进提示词里,而是在需要时「借」一本对应主题的技能手册。
为什么需要技能系统?
LLM 的知识是有限的 —— 它可能不了解你项目的特定规范、工作流程或最佳实践。
同时,提示词(System Prompt)的长度也是有限的。如果把所有知识都放进去,会导致:
• 消耗大量 Token(费用增加)
• 关键信息被淹没
• 响应速度变慢
技能系统的解决方案是:平时只加载核心提示词,当 Agent 遇到特定任务时,动态加载对应的技能知识。
技能长什么样?
每个技能就是一个 Markdown 文件,包含元信息和具体知识:
技能文件示例
skills/commit.md
1---2name: commit3description: 帮助用户创建规范的 Git 提交4---56# Git 提交规范78## 使用时机9当用户要求提交代码时使用此技能。1011## 工作流程121. 运行 git status 查看变更132. 运行 git diff 查看具体改动143. 分析变更内容,生成提交信息154. 提交信息格式:类型(范围): 描述1617## 注意事项18- 不要使用 git add -A,要逐个添加文件19- 提交信息要简洁,说明"为什么"而不是"改了什么"20- 不要提交包含密钥的文件
技能的发现和加载
OpenHarness 会从以下位置发现技能:
1. 内置技能 —— OpenHarness 自带的(如 commit、review-pr)
2. 用户目录 —— ~/.openharness/skills/ 中的自定义技能
3. 插件提供 —— 通过插件系统注册的技能
当 Agent 执行到相关任务时,它会通过 Skill 工具来加载对应的技能。加载后,技能的内容会被注入到当前对话的上下文中。
技能的设计哲学
好的技能应该:
✅ 专注单一领域 —— 一个技能解决一类问题
✅ 包含具体的工作流程 —— 不只是知识,还有步骤
✅ 说明「何时使用」—— 让 Agent 知道什么时候该加载
✅ 提供注意事项 —— 防止常见错误
差的技能:
❌ 内容太宽泛,什么都想覆盖
❌ 只有抽象概念,没有具体步骤
❌ 缺少使用条件的描述
📌 关键要点
按需加载 = 高效 + 精准
技能系统的核心理念是「按需加载」。它解决了「知识太多放不下」的问题,让 Agent 在需要的时候才获取特定领域的知识。每个技能就是一个 Markdown 文件,简单却强大。
🧠 检验理解
为什么不把所有知识都放在系统提示词里?