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

相关推荐
Revolution6118 小时前
第一次运行 Node.js:终端里的 JavaScript 怎样执行
后端·面试·node.js
Python私教18 小时前
Django 6.1 RC1 实测:FETCH_PEERS 两条 SQL 解决 N+1,select_related 还需要吗?
后端·python·django
大侠在此在在此18 小时前
教你用最简单的数学自底向上地高效学习SQL注入
后端
Python私教18 小时前
Django 6.0 自带 Tasks 到底能不能替代 Celery?跑完 3 组后台任务后我有答案了
后端·python·django
看昭奚恤哭19 小时前
ontainer App】Container App无法从Container Registries 拉取镜像 - 报错 Forbidden
后端·python·flask
程序员cxuan20 小时前
DeepSeek-V4-Flash 正式版来了!这次提升有点夸张。
人工智能·后端·程序员
小杍随笔1 天前
2025年Rust GUI框架实战万字避坑指南
开发语言·后端·rust
geovindu1 天前
CSharp: LogHelper
开发语言·后端·c#·.net
fliter1 天前
Go设计取舍之一: goroutine 为什么保持匿名、无状态
后端
fliter1 天前
Go设计取舍之二: maps.Keys和Values为什么返回迭代器
后端