规则
规则(Rules)功能支持用户使用自然语言指令来规范 Zulu 的行为,帮助Zulu更精准地理解并适应您的编码偏好,例如理解项目框架和代码风格等。规则仅对当前项目生效,存储在 .comate/rules
目录下。
规则的用处
Zulu在使用大型语言模型进行对话、代码生成等过程中不会保留记忆。规则功能可将用户设定好的遵循信息作为上下文,让大语言模型持续记住这些信息以及使用需要遵循的规范。
规则结构
每个规则文件均以 .mdr
的格式储存,支持将生效信息和规则内容放在一个文件中。规则支持以下三种生效方式:
生效方式 | 描述 |
---|---|
始终生效 | 此规则将在始终包含在模型上下文中,无需您的持续关注 |
指定文件 | 此规则将在对话中包含特定文件时生效,特定文件的判断包含之前的对话或当前会话中已添加文件,支持通配符(例如 *.py 或 client/*/*.tsx ) |
手动生效 | 此规则仅在明确提及使用时才生效(在对话中#rulename ) |
规则设定
新建规则
- 进入规则设定页面:通过文心快码插件右上角进入更多选项,点击 规则 进入规则设定页面。

您还可以从设置中查看所有规则及其状态的列表。

- 新建规则:进入规则设定页面后,点击右上角 + 新建 按钮,添加新的规则

- 直接新建文件:您也可以在.comate/rules路径下直接创建格式为
*.mdr
的文件。 - 编写规则内容: 在
*.mdr
的规则文件中,使用清晰、明确的自然语言(通常是 Markdown 格式)编写您希望 AI 在处理此项目时必须遵守的指令、约束或偏好设置。编写后记得要将文件进行保存。
多Rules
您可以在规则设定页面,根据需求设定不同的规则和生效方式。Comate Zulu Agent 在后续与该项目相关的交互中,会自动加载并遵循您设定的规则。
兼容Cursor Rules
Zulu可自动获取您在Cursor中设定的规则,无需在文心快码中重复添加(Zulu无法通过图形化界面编辑Cursor规则的生效范围,可通过文件编辑器修改)

仅在本地生效
如果您希望规则仅在您自己的本地开发环境生效,不想通过版本控制分享给团队其他成员(例如,一些个人编码习惯或临时性的指令),您可以将 .comate/rules/
文件路径添加到您项目的目录文件中。这样,Git 等版本控制系统就会忽略这些文件的变动。
注意事项
生效范围的修改建议从规则列表中点击 编辑 进行变更

不建议直接通过修改文件---
之间的内容进行变更,否则可能会导致系统无法正确识别。
1---
2description:
3globs:
4alwaysApply:
5---
规则使用
- 对于始终生效、指定文件两种生效范围的规则,您无需过多关注。始终生效 会在您的所有会话中自动生效,指定文件 会在对话中包含特定文件上下文或当前会话中已添加文件进行生效。指定文件支持 通配符+文件路径/文件格式 (例如
*.py
或client/*/*.tsx
) 。 - 对于手动生效的的规则,您在需要用到此规则时,在对话框中
#
此规则进行使用。


- 通过手动
#
的方式,您可以选择设定的所有规则。其是否在会话中生效,取决于规则具体的设定内容。例如规则指定文件*.py
,但当前对话上下文中未包含*.py
的文件,则此规则依旧不会生效。
应用场景
在规则中定义项目框架和开发指南一种典型应用场景。你可以让 Zulu 严格遵循开发指南来新增功能。比如在规范的目录生成新代码文件,在统一的接口方法中注册新方法,添加新功能同时生成测试代码。如果没有这样的规范,就无法约束 AI 在生成代码时的随机性,可能生成错误的代码。
以下是一个规则的例子。它定义了示例项目 async-iterator 的开发规范。
1---
2description:
3globs:
4alwaysApply:
5---
6## 项目概述
7
8这是一个用于处理异步迭代的工具库,提供了一系列用于处理异步数据流的工具和操作符。该项目主要解决了在JavaScript/TypeScript中处理异步数据流的复杂性问题,提供了简单易用的API。
9
10## 项目架构
11
12项目采用模块化设计,主要分为以下几个核心部分:
13
141. **核心控制器** (`controller.ts`)
15 - 实现了 `AsyncIteratorController` 类
16 - 负责管理异步数据流的状态和控制
17 - 提供了数据的输入输出接口
18
192. **工厂模块** (`factory/`)
20 - `array.ts`: 处理数组的异步迭代
21 - `event.ts`: 处理事件源的异步迭代
22 - `reader.ts`: 处理流读取器的异步迭代
23 - `stream.ts`: 处理Node.js流的异步迭代
24
253. **辅助工具** (`helper/`)
26 - 提供了一系列操作符来处理异步迭代器
27 - 实现了链式调用API
28 - 包含多个独立的操作符实现
29
304. **操作符** (`helper/operators/`)
31 - `chunk.ts`: 数据分块
32 - `debounce.ts`: 防抖处理
33 - `filter.ts`: 数据过滤
34 - `map.ts`: 数据转换
35 - `take.ts`: 取前N个元素
36 - `until.ts`: 条件终止
37
38## 代码结构说明
39
40### 1. 核心接口
41
42typescript
43interface OverAsyncIterator<T> extends AsyncIterable<T> {
44 filter(predicate: Predicate<T>): OverAsyncIterator<T>;
45 map<R>(transform: (value: T) => R): OverAsyncIterator<R>;
46 chunk(size: number): OverAsyncIterator<T[]>;
47 debounce(ms: number): OverAsyncIterator<T[]>;
48 take(count: number): OverAsyncIterator<T>;
49 until(predicate: Predicate<T>): OverAsyncIterator<T>;
50}
51
52
53### 2. 工厂函数
54
55项目提供了多个工厂函数来创建异步迭代器:
56
57- `fromIntervalEach`: 从数组创建带间隔的异步迭代器
58- `fromEvent`: 从事件源创建异步迭代器
59- `fromStreamReader`: 从流读取器创建异步迭代器
60- `fromStream`: 从Node.js流创建异步迭代器
61
62## 开发指南
63
64### 1. 基本开发流程
65
661. 如需增加运算符,放置在`src/helper/operators`目录下。
672. 所有运算符都要从`src/helper/index.ts`导出,并能够链式调用。
683. 如果增加对流的消费、创建流的方式,放置在`src/factory`目录下。
69
70### 2. 扩展开发指南
71
721. **添加新的工厂函数**
73 - 在 `factory/` 目录下创建新文件
74 - 实现相应的工厂函数
75 - 在 `index.ts` 中导出
76
772. **添加新的操作符**
78 - 在 `helper/operators/` 目录下创建新文件
79 - 实现操作符函数
80 - 在 `helper/index.ts` 中添加到 `OverAsyncIterator` 接口
81 - 在 `over` 函数中实现新方法
82
83### 3. 测试规范
84
85- 所有功能都需要编写对应的单元测试
86- 测试文件放置在相应模块的 `__tests__` 目录下
87- 测试文件命名规则:`[功能名].test.ts`
88- 增加任何功能,都要运行单元测试,确保测试的行覆盖率在100%,分支覆盖率大于90%。
89
90## 代码风格指南
91
921. **类型定义**
93 - 优先使用接口(interface)定义类型
94 - 为所有公开API提供完整的类型定义
95 - 使用泛型增加代码复用性
96
972. **错误处理**
98 - 统一使用 Error 对象处理错误
99 - 在异步操作中正确处理错误传播
100
1013. **命名规范**
102 - 使用驼峰命名法
103 - 类名使用大驼峰
104 - 接口名清晰表达其用途
105
106## 注意事项
107
1081. 所有的异步操作都应该正确处理错误情况
1092. 注意内存泄漏,特别是在处理事件监听器时
1103. 在实现新功能时,确保与现有的接口保持一致
1114. 保持代码的可测试性,避免副作用
1125. 文档注释要清晰完整,包含参数说明和使用示例
这个项目是一个处理异步数据流的工具库,默认提供了一些数据操作符,包括:
chunk.ts
: 数据分块debounce.ts
: 防抖处理filter.ts
: 数据过滤map.ts
: 数据转换take.ts
: 取前N个元素until.ts
: 条件终止
接下来我们为项目新增一个 skip
操作符,看看 Zulu 如何在规则的约束下生成更高质量的代码。
- 我们要求 Zulu 新增一个 skip 操作符
- 项目配置的规则中,有关于添加新操作符的规范,要求新的操作符必须在
OverAsyncIterator
接口中注册 - Zulu 在生成过程中,发现并遵循了这个规范
- 最后 Zulu 按照要求将
skip
操作符注册到了OverAsyncIterator
接口,满足要求

如果不定义这个规则,AI 不会严格按照项目规范来生成代码,用户需要花更多时间修正 AI 生成的代码。
- 我们要求 Zulu 新增一个 skip 操作符,项目中没有配置规则
- Zulu 在生成代码时,没有发现新的操作符必须在
OverAsyncIterator
接口中注册这个要求 - 最后 AI 按照自己的理解生成一个新的
index.js
文件,而没有在现有的index.js
中注册,违反了项目规范
