1、rule
1.1、rule 是什么
rule 是为 AI Agent 设定的系统级的行为约束,贯穿整个会话,用于告诉 AI 什么能做,什么不能做?
1.2、为什么需要 rule
无规矩不成方圆!!! 没有规矩的约束,AI 发散太厉害。你只需要把 AI 当初人,理解起来就很简单
1.3、引入 rule 会导致什么问题
rule 本身是好的,但是使用不当还是会有以下问题
- 上下文膨胀:rule 越多,上下文占用就约多。
- rule 之间的冲突:不同的 rule 之间,可能会存在冲突,例如项目级和用户级
- 维护负担:规矩是一直在变的,rule 同样也是。当 rule 过多后,维护就会有一定的成本
1.4、让 Agent 渐进式加载 rule
目前主流的 AI Agent 都支持渐进式加载 rule。因此为了避免 AI Agent 将我们的 rule 全部加载至上下文中,导致上下文膨胀。因此我们需要通过 markdown 的元数据告诉 AI 什么时候加载。
| 关键字 | 说明 | 举例 |
|---|---|---|
description |
描述 rule | Java 通用编码规范 - 包结构、日志、判空、魔术值、设计模式、时区、时间格式化等全局适用的规则。 |
globs |
当操作的文件匹配globs模式时加载 | **/*.java |
alwaysApply |
是否在所有的规则中应用 | false |
下面给出一份完整的元数据示例
yaml
---
description: Java 通用编码规范 - 包结构、日志、判空、魔术值、设计模式、时区、时间格式化等全局适用的规则。
globs: **/*.java
alwaysApply: false
---
上面元数据的意思是:不需要在每次会话中加载,当且仅当在编写 .java 文件时,加载该 rule。
1.5、如何编写一份有效的 rule
我们一般不会手动写 rule,会让 AI 自己写 rule。为了让 AI 写出更好的 rule,我们也需要约束 AI。 一般而言,只需要告诉 AI,让他遵循 结论先行 + 清单制 + 极简示例 的编写风格即可
下面的这份 rule,就是由 AI 编写
yaml
---
description: java 编程规范
globs: "**/*.java"
alwaysApply: false
---
# 空指针防护规约
1. **外部调用**:RPC/JSON解析后,必须立即 `if (obj == null)` 或 `Optional.ofNullable`。
2. **集合取值**:`List.get(0)` 前必须检查 `!CollectionUtils.isEmpty(list)`。
3. **禁止** `obj.toString()`,统一用 `Objects.toString(obj, "default")`。
❌ `user.getProfile().getName()`
✅ `Optional.ofNullable(user).map(User::getProfile).map(Profile::getName).orElse("Unknown")`
2、skill
2.1、skill 是什么
skill 是 Agent 的操作手册。将一组
2.2、为什么需要 skill
如果你要教会 AI 做饭。那么你是不是要在 prompt 里面告诉 AI。 第一步加水洗米 第二步倒水 第三步插电 第四步等待30分钟即可
那么每次都需要输入这么多的 prompt,是不是很麻烦。skill 就是用来封装这些可被标准化、复用的组件。 将上面 4 个步骤写入到 skill 中。 下次你让 AI 做饭,AI 就会按照你的步骤来做饭。
2.3、引入 skill 会有什么问题?
引入 skill 没有任何问题,就算你定义再多的 skill 也没问题。因为 Agent 使用渐进式披露加载 skill,只会将元数据加载至上下文中,不会将 skill 中所有的内容放到对话中,而是等到需要的时候,才去加载完整的内容。
2.4、skill 的渐进式披露
skill 的渐进式披露与 rule 有点不大一样。skill 的加载分为 3 级
- 第一级:加载元数据 - 轻量级目录
- 加载时机:Agent 启动时
- 加载内容:仅加载每个 Skill 的 name 和 description
- 加载目的:让 Agent 知道有哪些 skill
- 第二级:核心指令 - 按需加载正文
- 加载时机:Agent 需要使用该 skill
- 加载内容:skill.md 所有的内容
- 加载目的:提供使用 skill 的详细步骤、工作流程和具体指令
- 第三级:动态资源 - 按需调用的附件
- 加载时机:skill 执行期间,Agent 自主加载
- 加载内容:references/、scripts/、assets/ 等目录下的文件
- 加载目的:为执行 skill 提供辅助信息。一般是代码实例、一些脚本之类的
2.5、如何编写一份有效的 skill
skill 由以下几个文件和目录组成
scss
my-advanced-skill/
├── SKILL.md # [必需] 核心指令,保持精简 (<500行)
├── scripts/ # [可选] 可执行脚本 (Python/Shell等)
│ └── rotate_pdf.py
├── references/ # [可选] 深度参考文档 (API文档、规范等)
│ └── api_spec.md
├── assets/ # [可选] 静态资源 (模板、图片等)
│ └── report_template.docx
└── workflows/ # [可选] 复杂技能的不同流程
├── workflow_a.md
└── workflow_b.md
skill 的编写一般也是由 AI 编写。目前主流的 Agent 都支持快速生成 skill,这里不过多描述。这里推荐一个开源的项目 Matt Pocock Skill