8

Skills 技能系统

按需加载的知识库

为什么需要技能系统?

LLM 的知识是有限的 —— 它可能不了解你项目的特定规范、工作流程或最佳实践。 同时,提示词(System Prompt)的长度也是有限的。如果把所有知识都放进去,会导致: • 消耗大量 Token(费用增加) • 关键信息被淹没 • 响应速度变慢 技能系统的解决方案是:平时只加载核心提示词,当 Agent 遇到特定任务时,动态加载对应的技能知识。

技能长什么样?

每个技能就是一个 Markdown 文件,包含元信息和具体知识:

技能文件示例

skills/commit.md
1---
2name: commit
3description: 帮助用户创建规范的 Git 提交
4---
5
6# Git 提交规范
7
8## 使用时机
9当用户要求提交代码时使用此技能。
10
11## 工作流程
121. 运行 git status 查看变更
132. 运行 git diff 查看具体改动
143. 分析变更内容,生成提交信息
154. 提交信息格式:类型(范围): 描述
16
17## 注意事项
18- 不要使用 git add -A,要逐个添加文件
19- 提交信息要简洁,说明"为什么"而不是"改了什么"
20- 不要提交包含密钥的文件

技能的发现和加载

OpenHarness 会从以下位置发现技能: 1. 内置技能 —— OpenHarness 自带的(如 commit、review-pr) 2. 用户目录 —— ~/.openharness/skills/ 中的自定义技能 3. 插件提供 —— 通过插件系统注册的技能 当 Agent 执行到相关任务时,它会通过 Skill 工具来加载对应的技能。加载后,技能的内容会被注入到当前对话的上下文中。

技能的设计哲学

好的技能应该: ✅ 专注单一领域 —— 一个技能解决一类问题 ✅ 包含具体的工作流程 —— 不只是知识,还有步骤 ✅ 说明「何时使用」—— 让 Agent 知道什么时候该加载 ✅ 提供注意事项 —— 防止常见错误 差的技能: ❌ 内容太宽泛,什么都想覆盖 ❌ 只有抽象概念,没有具体步骤 ❌ 缺少使用条件的描述
📌 关键要点
按需加载 = 高效 + 精准
技能系统的核心理念是「按需加载」。它解决了「知识太多放不下」的问题,让 Agent 在需要的时候才获取特定领域的知识。每个技能就是一个 Markdown 文件,简单却强大。
🧠 检验理解
为什么不把所有知识都放在系统提示词里?