AgentHarness 课程

Rules 规则体系

用户规则、项目规则、三种加载类型、约束AI行为

引言:让 AI 遵循你的规范

你是否有过这样的经历:AI 生成的代码风格与团队不一致?用了不推荐的库?命名不符合规范?每次都要在对话中重复说明编码规范?

CodeBuddy 的 Rules 规则体系就是为了解决这个问题——通过预定义规则,让 AI 在每次交互时都遵循你的编码规范、技术选型和团队约定。

核心思想:Rules = 你对 AI 的编程规范培训。一次配置,永久生效。


1. 两种规则类型

1.1 用户规则(User Rules)

适用范围:所有项目的个人偏好

存储位置~/.codebuddy/rules/

典型内容

# 个人编码偏好

## 代码风格
- 使用 2 空格缩进
- 字符串使用单引号
- 语句末尾不加分号
- 优先使用 const,其次 let,禁止 var

## 命名规范
- 组件使用 PascalCase:UserProfile
- 函数使用 camelCase:getUserById
- 常量使用 UPPER_SNAKE_CASE:MAX_RETRY_COUNT
- 文件名使用 kebab-case:user-profile.ts

## 偏好
- 优先使用 TypeScript 而非 JavaScript
- 优先使用 async/await 而非 Promise.then
- 错误处理使用 try-catch,不使用 .catch()

1.2 项目规则(Project Rules)

适用范围:仅当前项目

存储位置.codebuddy/rules/

典型内容

# 项目技术规范

## 技术栈
- 框架:Next.js 14 (App Router)
- 数据库:PostgreSQL + Prisma ORM
- 认证:NextAuth.js v5
- 样式:Tailwind CSS + shadcn/ui
- 测试:Vitest + Testing Library

## 架构规范
- 使用 Repository 模式隔离数据访问
- API 路由使用 Zod 进行参数验证
- 错误处理使用自定义 AppError 类
- 日志使用 Pino,不使用 console.log

## 禁止事项
- 不使用 any 类型
- 不使用 useEffect 直接修改 state
- 不在组件中写业务逻辑
- 不使用 alert(),使用 toast 通知

2. 三种加载类型

类型标识加载时机适用场景
Alwaysalways始终加载到上下文核心规范、编码风格
Agentagent仅智能体模式加载项目架构、部署流程
Manualmanual手动触发加载特定任务的详细指南

2.1 Always 类型示例

---
type: always
---

# 编码风格规范
- 2 空格缩进
- 单引号
- 无分号

2.2 Agent 类型示例

---
type: agent
---

# 部署流程
1. 运行 npm run test
2. 运行 npm run build
3. 执行 docker build
4. 推送到 ECR
5. 更新 ECS 服务

2.3 Manual 类型示例

---
type: manual
---

# 数据库迁移指南
1. 创建迁移文件:npx prisma migrate dev --name xxx
2. 检查生成的 SQL
3. 在 staging 环境验证
4. 在 production 环境执行

3. Rules 文件格式

3.1 文件格式说明

规则文件使用 .mdc 格式(Markdown with frontmatter),每条规则对应一个包含 RULE.mdc 文件的文件夹。

目录结构

  • .codebuddy/rules/
    • coding-style/
      • RULE.mdc
    • api-design/
      • RULE.mdc

YAML Frontmatter 字段

  • description: 规则描述,决定 AI 何时使用
  • alwaysApply: 是否总是加载
  • enabled: 是否启用

3.2 三种规则类型

类型描述加载方式
always总是加载每次会话自动加载
agent_requestedAI判断需要时加载只加载描述,需要时读取全文
manual手动触发通过 @rule-name 触发

3. Rules 文件格式

3.1 文件格式说明

规则文件使用 格式(Markdown with frontmatter),每条规则对应一个包含 文件的文件夹。

目录结构

文件格式示例

3.2 YAML Frontmatter 字段

字段说明必需
description规则描述,决定 AI 何时使用
alwaysApply是否总是加载
enabled是否启用
updatedAt更新时间

3.3 三种规则类型

类型描述加载方式
always总是加载每次会话自动加载
agent_requestedAI判断需要时加载只加载描述,需要时读取全文
manual手动触发通过 @rule-name 触发

4. Rules 编写最佳实践

3.1 简洁明确

不推荐

请在写代码的时候注意一下代码风格,尽量写得好看一点,
变量名要有意义,不要用太短的名字...

推荐

- 变量名使用描述性名称,最少 3 个字符
- 函数名以动词开头:getData, setUser, handleSubmit
- 布尔变量以 is/has/can 开头:isLoading, hasError, canEdit

3.2 优先级排序

# 优先级:安全 > 性能 > 可读性 > 简洁

## 安全规则(必须遵守)
- 所有用户输入必须验证和清洗
- SQL 查询必须使用参数化
- 敏感数据必须加密存储

## 性能规则(尽量遵守)
- 列表渲染使用虚拟滚动
- 大型数据使用分页
- 图片使用懒加载

## 代码风格(建议遵守)
- 函数不超过 50 行
- 文件不超过 300 行

3.3 示例驱动

# API 响应格式

## 正确示例
```json
{
  "code": 0,
  "message": "success",
  "data": { "id": 1, "name": "John" }
}

错误示例

{
  "status": "ok",
  "result": { "id": 1 }
}

---

## 4. 完整的项目规则示例

以下是一个完整的企业级项目规则配置:

```markdown
---
type: always
---

# 项目编码规范

## 目录结构
- src/app/ - Next.js App Router 页面
- src/components/ - 可复用组件
- src/lib/ - 工具函数和配置
- src/types/ - TypeScript 类型定义
- src/hooks/ - 自定义 React Hooks
- src/services/ - API 服务层
- prisma/ - 数据库 Schema 和迁移

## 组件规范
- 每个组件一个文件
- 组件文件使用 PascalCase
- Props 使用 interface 定义
- 导出使用 named export(不用 default export)

## API 规范
- 使用 Route Handlers (app/api/)
- 请求体使用 Zod 验证
- 响应使用统一格式
- 错误使用 HTTP 状态码

## 测试规范
- 单元测试:*.test.ts
- 集成测试:*.integration.test.ts
- 测试覆盖率 > 80%

5. 常见陷阱

陷阱 1:Rules 不是万能的

现象:定义了 Rules,AI 仍然偶尔违反

原因:Rules 是指导而非硬约束,复杂场景 AI 可能遗漏

解决:关键规则通过 Hooks 强制执行(如 PreCommit 检查)

陷阱 2:过多的 Rules 会消耗 Token

现象:定义了 50+ 条规则,每次对话 Token 消耗很大

解决:只定义真正重要的规则,使用 manual 类型加载不常用的规则

陷阱 3:Rules 需要定期更新

现象:项目演进后,Rules 与实际代码不一致

解决:每次重大技术变更后,同步更新 Rules 文件


总结

概念说明
用户规则个人偏好,跨项目生效
项目规则团队规范,当前项目生效
Always 加载始终生效的核心规范
Agent 加载仅智能体模式生效
Manual 加载手动触发的详细指南

下一章预告:我们将学习 Skills 技能系统,了解如何为 AI 配备专业领域的知识和能力。