规则
规则(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## 项目概述
2
3这是一个用于处理异步迭代的工具库,提供了一系列用于处理异步数据流的工具和操作符。该项目主要解决了在JavaScript/TypeScript中处理异步数据流的复杂性问题,提供了简单易用的API。
4
5## 项目架构
6
7项目采用模块化设计,主要分为以下几个核心部分:
8
91. **核心控制器** (`controller.ts`)
10 - 实现了 `AsyncIteratorController` 类
11 - 负责管理异步数据流的状态和控制
12 - 提供了数据的输入输出接口
13
142. **工厂模块** (`factory/`)
15 - `array.ts`: 处理数组的异步迭代
16 - `event.ts`: 处理事件源的异步迭代
17 - `reader.ts`: 处理流读取器的异步迭代
18 - `stream.ts`: 处理Node.js流的异步迭代
19
203. **辅助工具** (`helper/`)
21 - 提供了一系列操作符来处理异步迭代器
22 - 实现了链式调用API
23 - 包含多个独立的操作符实现
24
254. **操作符** (`helper/operators/`)
26 - `chunk.ts`: 数据分块
27 - `debounce.ts`: 防抖处理
28 - `filter.ts`: 数据过滤
29 - `map.ts`: 数据转换
30 - `take.ts`: 取前N个元素
31 - `until.ts`: 条件终止
32
33## 代码结构说明
34
35### 1. 核心接口
36
37typescript
38interface OverAsyncIterator<T> extends AsyncIterable<T> {
39 filter(predicate: Predicate<T>): OverAsyncIterator<T>;
40 map<R>(transform: (value: T) => R): OverAsyncIterator<R>;
41 chunk(size: number): OverAsyncIterator<T[]>;
42 debounce(ms: number): OverAsyncIterator<T[]>;
43 take(count: number): OverAsyncIterator<T>;
44 until(predicate: Predicate<T>): OverAsyncIterator<T>;
45}
46
47
48### 2. 工厂函数
49
50项目提供了多个工厂函数来创建异步迭代器:
51
52- `fromIntervalEach`: 从数组创建带间隔的异步迭代器
53- `fromEvent`: 从事件源创建异步迭代器
54- `fromStreamReader`: 从流读取器创建异步迭代器
55- `fromStream`: 从Node.js流创建异步迭代器
56
57## 开发指南
58
59### 1. 基本开发流程
60
611. 如需增加运算符,放置在`src/helper/operators`目录下。
622. 所有运算符都要从`src/helper/index.ts`导出,并能够链式调用。
633. 如果增加对流的消费、创建流的方式,放置在`src/factory`目录下。
64
65### 2. 扩展开发指南
66
671. **添加新的工厂函数**
68 - 在 `factory/` 目录下创建新文件
69 - 实现相应的工厂函数
70 - 在 `index.ts` 中导出
71
722. **添加新的操作符**
73 - 在 `helper/operators/` 目录下创建新文件
74 - 实现操作符函数
75 - 在 `helper/index.ts` 中添加到 `OverAsyncIterator` 接口
76 - 在 `over` 函数中实现新方法
77
78### 3. 测试规范
79
80- 所有功能都需要编写对应的单元测试
81- 测试文件放置在相应模块的 `__tests__` 目录下
82- 测试文件命名规则:`[功能名].test.ts`
83- 增加任何功能,都要运行单元测试,确保测试的行覆盖率在100%,分支覆盖率大于90%。
84
85## 代码风格指南
86
871. **类型定义**
88 - 优先使用接口(interface)定义类型
89 - 为所有公开API提供完整的类型定义
90 - 使用泛型增加代码复用性
91
922. **错误处理**
93 - 统一使用 Error 对象处理错误
94 - 在异步操作中正确处理错误传播
95
963. **命名规范**
97 - 使用驼峰命名法
98 - 类名使用大驼峰
99 - 接口名清晰表达其用途
100
101## 注意事项
102
1031. 所有的异步操作都应该正确处理错误情况
1042. 注意内存泄漏,特别是在处理事件监听器时
1053. 在实现新功能时,确保与现有的接口保持一致
1064. 保持代码的可测试性,避免副作用
1075. 文档注释要清晰完整,包含参数说明和使用示例
这个项目是一个处理异步数据流的工具库,默认提供了一些数据操作符,包括:
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
中注册,违反了项目规范
