codecamp

Qoder Rules智能规则系统详解 - AI编程助手项目规范配置指南

根据 Qoder 官方文档,Rules 是一个项目特定的规则配置功能,存储在 .qoder/rules 目录中,专门应用于当前项目,优化模型适应您的编码偏好、项目框架和代码风格。

🎯 工作原理

问题背景

  • 🧠 LLM局限性 - 大语言模型依赖通用知识
  • 📋 缺乏上下文 - 缺少项目特定的上下文和规则
  • 🎯 标准不统一 - 难以符合项目的标准和要求

解决方案

  • 💡 战略性注入 - 将预定义上下文策略性地注入到提示中
  • 🎯 引导AI响应 - 帮助AI响应更一致地符合项目标准
  • 📊 优化适应 - 优化模型对项目需求的适应性

💾 存储与共享

存储机制

  • 📁 项目目录存储 - 规则文件直接存储在项目目录中
  • 🔄 版本控制共享 - 通过Git等版本控制系统与团队成员共享
  • 📋 随代码库分发 - 与代码库一起分发和管理

隐私控制

  • 🔒 本地规则 - 不需要共享的规则可设为本地专用
  • 🚫 忽略设置 - 将 .qoder/rules 目录添加到 .gitignore 文件

⚠️ 使用限制

字符限制

  • 📊 最大字符数 - 所有活动规则文件总计最多100,000个字符
  • ✂️ 超出截断 - 超出部分将被截断
  • 💡 优化建议 - 保持规则简洁高效

内容限制

  • 📝 仅支持自然语言 - 不支持图像或链接
  • 🎯 文本描述 - 使用清晰的文本描述规则

🏷️ 规则类型

类型 描述 使用场景
Apply Manually 手动应用 通过AI Chat面板或inline chat中的@rule手动应用 按需工作流、自定义提示
Model Decision 模型决策 AI在Agent模式下评估规则描述并决定何时应用 场景特定任务(如生成单元测试或代码注释)
Always Apply 始终应用 应用于所有AI Chat和Inline Chat请求 强制执行项目范围的标准(如编码风格或文档格式)
Specific Files 特定文件 应用于匹配通配符模式的所有文件(如.js或src/**/.ts) 编程语言或目录特定规则

🎯 最佳实践

规则编写原则

  • 🎯 简洁明确 - 保持规则专注且无歧义
  • 📋 结构清晰 - 使用项目符号、编号列表或Markdown格式提高可读性
  • 💡 包含示例 - 提供"好"的代码示例来指导模型
  • 🔄 迭代优化 - 根据模型输出和反馈完善规则

规则示例

编码风格规则 (Always Apply)

## 编码风格规范
- 使用单引号而不是双引号
- 缩进使用2个空格
- 函数命名使用camelCase
- 常量使用UPPER_SNAKE_CASE
- 每行代码不超过100个字符


## 示例代码
```javascript
const API_BASE_URL = 'https://api.example.com';
const getUserData = (userId) => {
  return fetch(`${API_BASE_URL}/users/${userId}`);
};


#### **单元测试规则** (Model Decision)
```markdown
## 单元测试生成规范
场景描述: "生成单元测试"


要求:
- 使用Jest框架
- 测试文件命名为 *.test.js
- 每个函数至少3个测试用例: 正常情况、边界情况、异常情况
- 使用describe和it块组织测试
- 添加有意义的测试描述


## 示例结构
```javascript
describe('getUserData', () => {
  it('should return user data for valid userId', async () => {
    // 正常情况测试
  });

  
  it('should handle empty userId', async () => {
    // 边界情况测试
  });

  
  it('should throw error for invalid userId', async () => {
    // 异常情况测试
  });
});


#### **React组件规则** (Specific Files: `src/**/*.jsx`)
```markdown
## React组件开发规范
- 使用函数式组件和Hooks
- 组件名使用PascalCase
- Props使用TypeScript类型定义
- 使用默认export导出主组件
- 添加PropTypes或TypeScript类型检查


## 组件结构示例
```jsx
import React, { useState, useEffect } from 'react';
import PropTypes from 'prop-types';


const UserProfile = ({ userId, onUpdate }) => {
  const [user, setUser] = useState(null);

  
  useEffect(() => {
    // 组件逻辑
  }, [userId]);

  
  return (
    <div className="user-profile">
      {/* 组件JSX */}
    </div>
  );
};


UserProfile.propTypes = {
  userId: PropTypes.string.isRequired,
  onUpdate: PropTypes.func
};


export default UserProfile;


## ⚙️ 配置规则


### **设置步骤**
1. 🖱️ 点击 Qoder IDE 右上角的用户图标
2. ⌨️ 或使用快捷键:
   - **macOS**: `⌘ ⇧ ,`
   - **Windows**: `Ctrl + Shift + ,`
3. 📋 选择 "Qoder Settings"
4. 📏 在左侧导航栏点击 "Rules"
5. ➕ 点击 "Add" 添加新规则


### **创建规则流程**
1. 📝 **输入规则名称** - 在顶部搜索栏输入唯一的规则名称并按Enter
2. 🏷️ **选择规则类型**:
   - **Apply Manually** - 手动应用
   - **Model Decision** - 模型决策(需输入场景描述)
   - **Specific Files** - 特定文件(提供逗号分隔的文件路径通配符)
   - **Always Apply** - 始终应用
3. 💾 **关闭窗口保存** - 关闭窗口自动保存更改


### **管理现有规则**
- ✏️ **编辑规则** - 点击规则页面上的编辑图标
- 🗑️ **删除规则** - 点击对应的删除图标
- 🔍 **查看规则** - 在Rules页面查看所有配置的规则


## 🚀 实际应用场景


### **团队协作**
```markdown
## 代码审查规范 (Always Apply)
- 每个PR必须包含测试用例
- 新增功能需要更新相关文档
- 遵循项目的Git提交信息格式
- 大型重构需要拆分为多个小PR

API开发

## API接口开发规范 (Specific Files: src/api/*.js)
- 使用RESTful设计原则
- 统一错误处理格式
- 添加请求参数验证
- 包含完整的JSDoc注释

数据库操作

## 数据库查询优化 (Model Decision)
场景描述: "编写数据库查询"


要求:
- 使用索引优化查询性能
- 避免N+1查询问题
- 使用参数化查询防止SQL注入
- 添加适当的错误处理

💡 高级技巧

规则优先级

  • 🏆 Rules优先 - Rules比Memory具有更高优先级
  • 🎯 特定优于通用 - Specific Files规则优于Always Apply
  • 📊 合理组合 - 不同类型规则可以组合使用

性能优化

  • 📝 精简内容 - 避免冗余和重复的规则描述
  • 🎯 明确场景 - Model Decision规则的场景描述要具体
  • 📊 监控效果 - 定期检查规则的应用效果并优化

Rules 功能的价值:

  • 🎯 标准化 - 确保团队编码标准的一致性
  • 自动化 - 自动应用项目特定的开发规范
  • 🔄 可维护 - 通过版本控制管理规则变更
  • 👥 团队协作 - 共享项目开发最佳实践

Rules 让 Qoder 真正理解并遵循您的项目规范,成为符合团队标准的AI编程助手!

Qoder Memory 智能记忆功能详解 - AI 个性化编程助手记忆系统指南
Qoder Tools工具系统详解 - AI编程助手全能工具集成指南
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Qoder 活动

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }