一、为什么需要「AI 落地规范」
在真实的业务项目里引入 AI 辅助编写代码,听起来很酷,但实际操作中坑可不少。拿 Cursor、Claude Code、Trae 这类工具来说,最常见的几个头疼问题包括:

- 生成的代码风格与现有工程完全不搭:目录结构、命名方式、组件写法各自为政,难以融合。
- 需求理解总跑偏:缺乏结构化的需求和接口说明,AI 只能靠“猜”业务逻辑,幻觉问题愈发严重,影响代码质量。
- 可维护性堪忧:没有统一规则,后续开发者甚至 AI 自己想在现有约定下续写时,都会困难重重。
要解决这些问题,需要从两个方向同步推进,缺一不可:
- 输入规范:将需求、接口、配置等内容编写成 AI 能读懂、能执行的结构化文档。
- 输出规范:用项目规则来约束 AI 生成的目录结构、命名方式、组件写法以及接口调用格式,简单说就是给 AI 立规矩。
下面以某个 Vue 项目中的模块「xxxx缴费记录查询」和对应的规则文件为例,看看我们团队是如何搞定这件事的。
二、输入规范:把需求写成 AI 读得懂的语言
AI 能否在工程中稳定输出,前提是需求和接口必须清晰、结构化地写出来。依靠口头交代或零散的聊天记录,基本就是在给自己挖坑,代码只会越写越乱。
2.1 功能文档结构
一份规范的功能文档目录大致如下:
xxxx缴费记录查询/
├── xxxx缴费记录查询-需求.md # 功能概述、流程、页面与规则
├── xxxx缴费记录查询接口-需求.md # 接口入参、出参、取值与规则
├── 系统参数配置.md # 提示信息、开关等可配置项
└── 原型文件/ # HTML/CSS/JS 原型
- 需求文档(前端用):包含功能概述、流程图(推荐用 Mermaid)、页面分区(导航栏、查询区、列表区等)、控件表(名称、类型、是否必录、规则、数据元)、页面规则(如页面初始化、数据查询规则)。
- 接口需求文档(后端用):接口概述、入参/出参表(附带数据元标识、字段名、类型、是否可空)、接口规则(入参校验、表来源、取值规则)。
- 系统参数配置(共用):按模块或页面列出可配置项,例如主页面提示信息,前端直接从配置里读取,而不是硬编码写死。
这样结构化之后,AI 的能力就能充分发挥:按照「页面 + 控件 + 规则」生成页面和交互逻辑;按照「入参/出参 + 规则」生成 API 调用和数据传输对象;按照「配置项」生成从 store 或 config 里读取提示或开关的代码。
2.2 AI 时代的需求文档怎么写
这里有一个关键点:统一使用对 AI 更友好的 Markdown 文档来写需求。这对写需求的同学来说是一个新挑战,但绝对值得投入。
一、功能概述
用一两句话说清楚功能面向谁、做什么、范围是什么。对 AI 的作用是:确定模块边界、页面标题、路由命名。
二、详细流程
先用 Mermaid 把流程图画出来,再配上简短的流程说明。例如:
sequenceDiagram
actor 用户
participant 本功能 as 本功能
participant 外部系统 as 外部系统
rect rgba(135, 206, 250, 0.4)
Note over 用户,外部系统: 1. 【页面初始化】
用户->>本功能: 1) 访问xxxx缴费记录查询页面
本功能->>外部系统: 引用4.1规则初始化
外部系统-->>本功能: 返回初始化配置及数据
本功能-->>用户: 展示xxxx缴费记录
end
写法要点:流程中的步骤要与后文「四、页面规则说明」里的规则编号对应上,比如“引用 4.1”,这样实现时才能按规则写出正确的初始化逻辑。对 AI 来说,这能帮助它生成正确的调用顺序,清楚先取配置再取列表。
三、页面需求分析
按页面 → 区域 → 控件的层次进行分层,用表格把每个区域的控件写清楚。
导航栏:操作按钮和标题。用表格列出控件名称、是否可操作、控件类型、交互事件及规则;标题单独一行说明。
页面提示区域:文案不写死,而是引用配置。这样 AI 会生成“从配置读取,如果没配置则不展示”的逻辑,而不是硬编码一段文字。
查询条件选择区域:用一张表统一描述控件,建议列名包括:
列名 说明与示例 控件名称 xxx 控件类型 年度选择框、下拉框 可操作/必录/是否可见 Y/N,便于做校验与展示 初始状态/数据 默认当前系统年度、暗文「请选择」 操作规则及取数口径 格式 YYYY、最大不超过当前年度、下拉选项:xxxx;引用“xx数据查询规则” 数据元字段名 与接口对齐 示例(节选):
控件名称 控件类型 可操作 必录 是否可见 初始状态/数据 操作规则及取数口径 年度 年度选择框 Y Y Y 默认显示当前系统年度 格式 YYYY;最大不能超过当前系统年度。引用“xx数据查询规则、xx组件” xx 下拉框 Y N Y 暗文:请选择 下拉选项:xxx。引用“xx数据查询规则” 列表区域:同样用表格列出“展示项 + 取数口径 + 数据元”。比如缴费金额要写清楚单位、格式(¥、保留两位小数)。这样 AI 能直接生成列表列的定义和格式化逻辑。
四、页面规则说明
用编号规则把“页面初始化”“查询规则”等说清楚,并且与前文的引用保持一致。
- 4.1 页面初始化:逐条写清楚“根据哪份配置做哪件事”“根据哪条规则初始化数据”。比如:根据《系统参数配置.md》对“页面提示区域”进行初始展示;根据“xx数据查询规则”初始化展示页面数据。
- 4.2 缴费数据查询规则:先写查询条件的转换规则,再写调用哪个接口。AI 可以根据这些规则生成查询参数的组装和接口调用逻辑。
2.3 我们为什么规定这样写需求文档?
| 维度 | 写法 | 好处 |
|---|---|---|
| 结构化 | 功能概述 → 流程 → 页面分析 → 规则说明;接口概述 → 入参/出参 → 接口规则 | 层次清晰,AI 和人都能按章节定位;先“做什么”再“怎么做”,减少遗漏。 |
| 表格化 | 控件表、入参表、出参表、代码映射表 | 机器可读性强,AI 可直接用于生成表单字段、请求参数、列表列、常量映射;前后端对齐同一张表,字段名和类型保持一致。 |
| 引用与编号 | “引用 4.1 规则”“引用xxx组件”“引用xx数据查询规则”“根据系统参数配置.md” | 需求内可追溯,实现时按编号找到对应规则及组件;提示区、查询逻辑等不写死,便于多地区配置。 |
| 数据元与取数口径 | 数据元标识符、字段名、取数口径、格式备注 | 与标准数据元一致,利于对接;取数口径让前端知道哪些字段是后端计算、如何展示。 |
| 流程 + 规则 | Mermaid 流程图 + 规则编号 | 先有时序再有条文,AI 能生成正确的调用顺序和初始化逻辑;规则可单独实现、单独测试。 |
| 配置与代码分离 | 提示内容取自系统参数配置、若未配置则不显示 | 文案和开关可配置,AI 生成“读配置再展示”的代码,避免硬编码,便于多环境。 |
整体来看,需求文档按照“概述 → 流程 → 页面/接口表格 → 规则说明”来写,并用表格和编号把控件、字段、映射、规则、组件编号固定下来,既能让人一眼看懂,也能让 AI 按表生成代码、按规则生成逻辑,减少歧义和返工,也为后续从 1 到 N 的迭代打下良好基础。
2.4 需求文档中建议包含的要素
| 要素 | 说明 | 对 AI 的用途 |
|---|---|---|
| 功能概述 | 一两句话说清功能做什么、谁用 | 确定模块边界、路由/菜单命名 |
| 流程图 | 用 Mermaid 等画清主流程 | 生成顺序逻辑、调用关系 |
| 页面分区 | 导航栏、提示区、查询区、列表区等 | 对应 template 区块与组件 |
| 控件表 | 控件名称、类型、必录、可见性、初始值、操作规则、数据元 | 生成表单项、校验、字段绑定 |
| 数据元 | 中文名、标识符、字段名、类型、长度 | 与接口字段、DTO 对齐 |
| 页面规则 | 如「4.1 页面初始化」「4.2 xx数据查询规则」 | 生成 mounted/created 逻辑与查询条件转换 |
接口需求文档里则建议包含:
- 接口概述、入参/出参表(含数据元与检索策略);
- 入参校验、涉及的表、关键取值规则。
这样 AI 生成的 API 封装、请求参数和数据模型才能和后端的约定对上。
2.5 系统参数配置的用法(可选)
「系统参数配置.md」中按模块列出“主页面提示信息参数配置”等,并说明使用场景、配置项、默认值。前端应当从配置里读取提示语等内容,而不是在页面里写死。这样 AI 生成的代码会去读取配置状态,便于多地区或多环境的差异化定制。
三、输出规范:用项目规则约束 AI 的代码
有了清晰的输入还不够,还需要统一输出:目录结构、命名方式、组件结构、API 和状态管理方式都要和现有项目保持一致。在我们的项目里,xxx-xxx-h5-rules 就承担了这个角色。
3.1 规则体系概览(xxx-xxx-h5-rules)
| 规则文件 | 作用 | 对 AI 的约束 |
|---|---|---|
| project-structure.mdc | 项目结构、入口、路由位置 | 新模块放在哪、如何拆分目录 |
| vue-coding-standards.mdc | Vue 组件顺序、JS 规范、路由/Vuex/API 约定 | 组件结构、命名、mapState/mapMutations 用法 |
| component-development.mdc | 通用/业务组件、标准父/子页面结构 | 页面用 xxTransition + keep-alive、子页面 name 与 class 命名 |
| api-integration.mdc | HTTP 封装、接口组织、错误与加密 | api 模块写法、http 使用方式 |
| business-modules.mdc | 业务模块列表、新增模块步骤 | 路由/store/api 注册顺序与命名 |
| build-deployment.mdc | 构建、环境、部署 | 不随意修改构建与公共路径 |
这些规则需要被 Cursor 这类工具识别,通常放在 .cursor/rules 目录下,或者在说明里引用,这样 AI 在生成代码时默认就会遵循它们。
3.2 部分 mdc 文档说明
规则文件不只是代码,而是“说明 + 列表 + 目录树 + 代码块”的组合。下面按文件摘录部分原文作为参考。
README.mdc(总览)
---
alwaysApply: true
description: xxx-xxx-h5 项目规则总览
---
# xxx-xxx-h5 项目规则总览
## 规则文件说明
本目录包含 xxx-xxx-h5 项目的所有 Cursor 规则文件,用于指导 AI 助手更好地理解和开发该项目。
### 规则文件列表
1. **project-structure.mdc** - 项目结构指南
- 项目概述和核心目录结构
- 模块化架构特点说明
- 主要入口文件和配置文件位置
2. **vue-coding-standards.mdc** - Vue 2.x 编码规范
- Vue 组件开发规范
- JavaScript 编码标准
- 路由和状态管理规范
- 用 frontmatter 声明
alwaysApply: true、description,方便 Cursor 按需加载或常驻。 - 用编号列表加子项说清楚每个规则文件负责什么,AI 能快速判断该查哪个文件。
project-structure.mdc(结构说明)
# xxx-xxx-h5 项目结构指南
## 项目概述
xxx-xxx-h5 是一个基于 Vue 2.x 的 H5 应用,采用模块化架构设计。
## 核心目录结构
### 主要入口文件
- main.js - 应用主入口,配置 Vue 实例和全局插件
- App.vue - 根组件
- vue.config.js - Vue CLI 配置文件
### 路由系统
- router/index.js - 主路由配置,包含所有模块路由
- router/ - 各功能模块的路由配置
## 模块化架构特点
项目采用功能模块化设计,每个业务功能都有对应的:
- 路由配置 (router/)
- 状态管理 (store/)
- API 接口 (api/)
- 页面组件 (views/)
这种设计便于维护和扩展新功能。
- 先概述再拆目录,AI 能建立起“模块 = router + store + api + views”的心智模型。
- 即使没有具体代码,也能约束“新模块该建哪些目录、放在哪”。
vue-coding-standards.mdc
---
globs: *.vue,*.js
description: Vue 2.x 编码规范和最佳实践
---
### 组件命名
- 组件名使用 PascalCase
- 文件名与组件名保持一致
### 路由命名
- 路由名称使用 camelCase
- 路径使用 kebab-case
- 模块路由统一导入到主路由
- 使用常量导出路由名称,便于维护
- globs 限定只在
*.vue,*.js下生效,避免在无关文件中误用。 - 条文式的约定(命名、路径、常量),不需要代码也能约束生成结果。
同一个文件里还可以配上“获取系统配置”的说明、注意事项和代码示例。先写“在组件中获取系统配置必须使用以下方式”,再贴代码;接着用注意事项列出几条关键点(比如用户信息走 getters、系统配置走 state、箭头函数、避免在 methods 里访问 store)。示例代码:
// vue-coding-standards.mdc 中规定的方式
export default {
computed: {
sbfConfigs: (vm) => {
return vm.$store.state.configs.xxx
}
}
}
- 先写“必须使用以下方式”再贴代码,AI 会优先采用这个写法。
- 注意事项能减少“能跑但不符合项目习惯”的生成内容,比如把配置写在 methods 里。
component-development.mdc
### 组件设计原则
- 单一职责:每个组件只负责一个功能
- 可复用性:组件应该可以在不同场景下复用
- 可配置性:通过 props 提供灵活的配置选项
- 可扩展性:支持插槽和事件扩展
### 标准页面组件结构
- 页面组件放在 `views/` 目录
- 按功能模块组织子目录
- 组件名使用 `moduleName.pageName` 格式
- 父级组件使用 `xxTransition` 和 `keep-alive`
- 设计原则是纯文字说明,但能引导 AI 不写“大而全”的单文件页面。
- 标准页面组件结构这四条直接对应“放哪、怎么命名、用什么包裹”,和后文的代码块保持一致。
api-integration.mdc
### 模块化 API 结构
api/
├── index.js # API 主入口
├── account.js # 账户相关接口
├── apply.js # 申请相关接口
├── basecode.js # 基础代码接口
├── pay.js # 支付相关接口
└── ... # 其他业务模块接口
### 核心 HTTP 配置
- core/http.js - 基础 HTTP 配置
- core/httpEncrypt.js - 加密 HTTP 配置
- core/BusinessError.js - 业务错误处理
- 目录树让 AI 知道新模块的 api 文件应该放在哪、如何与 index 挂载。
- 核心 HTTP 配置列出文件和职责,生成请求代码时会关联到
@/core/http、BusinessError。
3.3 这样写 mdc 规则的好处
| 写法 | 好处 |
|---|---|
| frontmatter(alwaysApply / globs / description) | 工具可按路径或全局决定何时注入规则,减少无关上下文;description 便于人和 AI 快速理解文件用途。 |
| 分文件(结构 / Vue / 组件 / API / 业务 / 构建) | 单个文件短小、职责清晰,AI 检索时容易命中“路由”“组件”“API”等关键词;后续增删规则不影响其他领域。 |
| 说明 + 列表 + 代码一起写 | 既有“必须”“应”等约束性文字,又有可复制的模板代码,AI 既知道“为什么这样”又知道“长什么样”,生成时更少偏离。 |
| 注意事项 / 命名规范等条文 | 不依赖代码也能约束命名、数据来源(如 config 只从 computed 取)、错误处理方式,避免“风格正确但细节不符合项目习惯”。 |
| 目录树与入口说明 | 明确新模块该建哪些目录、在 index 里如何挂载,AI 生成的目录和 import 关系更一致。 |
| 标准模式 + 复杂模式并存 | 简单业务用标准模式(reset/set、queryList),复杂业务用 actions/getters,AI 能按需求选模板,而不是自己发明一套。 |
总的来说,把规则写成“可执行的说明 + 可粘贴的代码”,并配合 frontmatter 和分文件组织,能让 AI 在正确时机、正确范围内套用约定,减少反复修改和风格漂移,也方便新人或后续 AI 继承同一套规范。
四、总结
新功能先写清需求与接口
至少具备:功能需求(含流程与页面分析)、接口需求(入参/出参/规则)、与前端相关的系统参数配置。把项目规则显式化
像 xxx-xxx-h5-rules 一样,把结构、Vue、组件、API、业务模块、构建拆成独立规则文件,并让 AI 在上下文中能读到这些规则。模块命名与注册统一
业务模块用拼音首字母;新增模块严格按 router → store → api → views 的顺序注册,并在主入口中挂载。配置与数据元不写死
提示语、开关等走系统参数配置;字段名、数据元与接口文档一致,便于前后端联调与 AI 二次修改。用现有模块当模板
让 AI 参考历史模块的 router/store/api/views 实现方式,再结合需求与接口文档生成新模块,可减少风格偏差。
五、结语
AI 要在现有工程里稳定落地,不能只靠“说人话”提需求,而需要:
- 输入侧:把需求、接口、配置写成结构化、可检索的文档,后期甚至可以引入向量库来编排;
- 输出侧:用项目规则(如 xxx-xxx-h5-rules)来约束目录、命名、组件、API 和状态管理。
AI 落地规范是一个系统化的工程,这篇文章只介绍了需求侧和代码生成侧的一部分内容,还有很多地方没有展开,权当提供一些参考思路。
