rule 和 skill

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 级

  1. 第一级:加载元数据 - 轻量级目录
  • 加载时机:Agent 启动时
  • 加载内容:仅加载每个 Skill 的 name 和 description
  • 加载目的:让 Agent 知道有哪些 skill
  1. 第二级:核心指令 - 按需加载正文
  • 加载时机:Agent 需要使用该 skill
  • 加载内容:skill.md 所有的内容
  • 加载目的:提供使用 skill 的详细步骤、工作流程和具体指令
  1. 第三级:动态资源 - 按需调用的附件
  • 加载时机: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

相关推荐
ADIT1 小时前
一、反射的定义与原理
后端
Csvn1 小时前
Python 开发技巧:标准库深度挖掘
后端·python
山东点狮信息科技有限公司2 小时前
SpringBoot+VUE3,一套系统完成OA+HRM+CRM+MES+合同+项目管理 —— 深度解析点狮全业务管理平台
java·spring boot·后端
爱勇宝2 小时前
《道德经》第4章,老子写得很像在描述一个“底层系统”。
前端·后端·程序员
神奇小汤圆2 小时前
Redis 哨兵搭建+ACL权限控制
后端
大型UFO3 小时前
在 Hermes Agent 里搭建全中文 Honcho 记忆系统踩过的坑
后端
前端工作日常3 小时前
我学习到的Java概念
java·后端
要阿尔卑斯吗4 小时前
深入解析 Docling Java SDK 集成:Source 与 Target 的实战应用
后端