文章

Cursor Rules 四大原则:让AI代码生成更稳定高效

见字如面,与大家分享实践中的经验与思考。

之前我已经原创了好几篇关于 Cursor Rules 实战总结的文章,感兴趣的朋友可以点击查看:

经过以上一系列的优化和改进,在实际项目应用中,我发现仍然会遇到如下问题:

  • 规则不生效:Rules 文件虽然配置正确,但代码生成时不按照要求执行

  • 浪费 Token:每次请求时,Rules 文件会被加入到上下文中传递给大模型,文件过大会造成 Token 的浪费

  • 规则文件维护困难:现在推行将 Rules 文件拆分细化,容易出现冗余或冲突,以及文件拆分不合理等问题

  • 输出不稳定:相同的规则和类似的提示词,前后生成的代码却有较大差异

  • 破坏现有项目风格:AI 生成大量代码时,代码风格迥异,导致经常需要 Reject All,然后重新编写提示词反复生成

接下来我将分享个人总结的 MSEC 理论,用于指导后续所有 Cursor Rules 的编写。

Cursor Rules 四大原则

使用一张图进行总结:

images-20250722-16.38.31@2x

01 最小化原则(Minimization Principle)

短小而精悍,保持规则的简洁、专注、易理解。

这样做的主要原因有两点:

  • 大而泛的规则,AI 不容易准确遵守,不要指望给它模糊的指令就能执行得很完美

  • 每次请求都会被带入到输入当中,不仅不生效,还浪费 Token

具体操作建议:

  • 规则文件尽量保持在 500 行以内

  • 将大的规则拆分成多个可组合的小规则

  • 保留必要的、可执行的规则,移除所有模棱两可、大而泛、抽象的、重复的规则

举个例子来进行对比:

images-20250722-14.49.28@2x

images-20250722-14.49.57@2x

general.mdc 简化成 core.mdc,移除重复的内容(如:技术栈)、大而泛不够具体的规则,只保留项目通用的、可具体执行的规则。

02 结构化原则(Structured Principle)

一份好的项目规则要结构清晰,具有层级和作用域,我们可以使用分层架构来结构化地管理规则上下文,明确职责边界

images-20250722-14.45.28@2x

通过上图的分层架构,可以将项目中涉及的核心规则进行很好的分类,有效避免规则的冗余、冲突、拆分不合理等问题,维护起来更加得心应手。这部分内容我已经发过好几篇文章进行详细讲解,这里简单描述一下。

通用规则

  • core.mdc:项目核心行为与风格通用规则

  • tech-stack.mdc:项目技术栈定义和官方文档链接

  • project-structure.mdc:项目结构和文件组织规范

  • ...

语言规则

  • java.mdc:Java 编码规范和最佳实践

  • python.mdc:Python 编码规范和最佳实践

  • golang.mdc:Golang 编码规范和最佳实践

  • typescript.mdc:Typescript 编码规范和最佳实践

  • ......

框架规则

  • springboot.mdc:SpringBoot 3 编码规范和最佳实践

  • django.mdc:Django 编码规范和最佳实践

  • android.mdc:Android 框架开发规范和最佳实践

  • ....

其他规则(可选)

  • git.mdc

  • document.mdc

  • api-integration.mdc

  • security.mdc

  • ddd.mdc

  • ...

以上涉及的 mdc 源码可以在 GitHub 中找到(不保证当前版本是最新的,一般会在验证有效后再更新)。

images-20250721-18.46.23@2x

源码地址:https://github.com/flyeric0212/cursor-rules

03 精准引用原则(Explicitness Principle)

明确告诉模型"看哪里"、"回答什么"、"基于哪个 source",这里既包含规则的引用、代码文件的引用,也包含具体的示例引用等。

先来了解一下 Cursor 控制规则引用的方式:

每个规则文件使用 MDC(.mdc)格式编写,该格式支持元数据和内容。通过类型下拉菜单控制规则的适用方式,该菜单会改变属性 descriptionglobsalwaysApply

Rule Type 规则类型

Description 描述

Always Apply

始终包含在模型上下文中

Apply to Specific Files

当引用匹配 glob 模式的文件时,自动包含

Agent Intelligently

可供 AI 使用,由 AI 决定是否包含,必须提供描述

Apply Manual

仅在使用 @ruleName 明确提及时包含

结合 Cursor Rules 的分层架构,如何让 AI 更好地定位到我们编写的规则文件呢?

1)将通用规则都设置成 Always Apply,这些规则始终生效,为所有代码提供基础规范。

2)将语言规则设置成根据文件扩展名自动应用的语言特定规范(Apply to Specific Files),只包含语言本身的特性

3)将框架规则设置成 AI Agent 自动判断或者根据文件扩展名自动应用(Apply to Specific Files 或者 Agent Intelligently)。

4)其他可选规则,按需设置即可。如:git.mdc 可以设置成 Apply Manual,使用时需要 @git.mdc 来调用。

此外,我们可以在规则中引入规则,以及模板代码。我列举两个例子:

1)当规则触发时,像 @service-template.ts 这样的模板代码文件会作为附加上下文被包含。

---
description: RPC Service boilerplate
globs:
alwaysApply: false
---
​
- Use our internal RPC pattern when defining services
- Always use snake_case for service names.
​
@service-template.ts

2)在 project-structure.mdc 中引入 ddd.mdc,可以在 ddd.mdc 中编写符合企业或个人的 DDD 详细理论知识和最佳实践。

images-20250722-15.31.29@2x

在 AI Chat 中使用时,当你引入代码文件时,会自动显示使用了哪些 Rules。

images-20250722-15.35.01@2x

⚠️注意:框架和语言往往容易被混淆在一起,如:SpringBoot 和 Java、Android 和 Kotlin、MiniProgram 和 Wxml、Wxss 等,建议分开管理。

04 一致性原则(Consistency Principle)

无论是代码风格、模块结构、命名方式、流程设计、交互行为,项目中都应该保持统一的一致性,并在所有地方遵循既定标准或最佳实践。

要让 AI 从上到下执行统一的代码风格并不容易,但设计一套好的规则,能够减少这种不一致性。建议从以下几个方面入手:

  • 第一,在通用层中的 core.mdc 强制要求遵守现有的代码风格。如果你能够提前搭好项目架子,让 AI 直接遵守远比从零搭建要好得多

  • 第二,在通用层中的 project-structure.mdc 设计不同端的项目组织架构,告诉 AI 你编写的代码应该放在哪个目录、哪个文件下面

  • 第三,在语言和框架层中,定义代码风格、命名方式和最佳实践

最后,所有 rules 文件也应该尽量保持风格统一、结构统一,既利于维护,又利于 AI 的学习和引用。

最后

如果你想要在一个中大型项目中使用 AI 来辅助编写代码,什么最重要?

那就是可维护性和可读性。

AI 可以快速生成大量的代码,代码质量可以后续持续优化或人工修改,但是代码生成位置、结构、风格不对,就需要反复 Reject,重新生成。这样既浪费时间和 Token,又达不到预期的生成效果。

Cursor 系列精选阅读

如果你对 Cursor AI 编程感兴趣,可以浏览我的更多专题文章,同时我也会不定期更新到视频号,欢迎观看和订阅。

🚀 快速上手

💻 开发环境配置

🔌 MCP 工具生态

📝 规范与项目管理

🎨 UI/UX 设计流程

🔬 实战案例


欢迎关注公众号"Eric技术圈",原创技术文章第一时间推送。

License:  CC BY 4.0