AI辅助编程防退化操作手册
作者:微信文章1. 概述
本手册提供了一套完整的可落地方案,解决AI编程中"迭代失真"和"隐性回归"问题。通过架构先行、微型迭代、版本控制和测试驱动四大支柱,确保AI生成的代码质量可控。
2. 第一阶段:架构规划
2.1 架构规划提示词模板
请你作为资深系统架构师,为[项目类型]项目设计一个模块化、可扩展的架构。
要求:
1. 按技术职责分层(如展示层、业务逻辑层、数据访问层)
2. 按业务领域分模块(如用户、订单、商品等)
3. 输出清晰的目录结构,说明每个目录的职责
4. 说明各层/模块之间的依赖关系规则
5. 考虑可测试性和可维护性
项目简要需求:[在此描述项目主要功能]2.2 架构规划案例
提示词:
请你作为资深系统架构师,为一个电商平台后端API设计模块化、可扩展的架构。
要求:
1. 按技术职责分层(如展示层、业务逻辑层、数据访问层)
2. 按业务领域分模块(如用户、订单、商品、支付等)
3. 输出清晰的Node.js项目目录结构,说明每个目录的职责
4. 说明各层/模块之间的依赖关系规则
5. 考虑可测试性和可维护性
项目简要需求:需要实现用户管理、商品浏览、订单创建和支付处理功能。
AI返回的架构示例:
src/
│
├── api/ # 展示层:REST API 控制器和路由
│ ├── user/
│ │ ├── user.controller.js
│ │ └── user.routes.js
│ ├── product/
│ ├── order/
│ └── payment/
│
├── domain/ # 业务逻辑层:核心业务规则和服务
│ ├── user/
│ │ ├── UserService.js
│ │ └── User.js
│ ├── product/
│ ├── order/
│ └── payment/
│
├── infrastructure/ # 基础设施层:外部依赖和实现细节
│ ├── database/
│ │ ├── UserRepository.js
│ │ └── models/ # 数据库模型
│ ├── external/
│ │ └── PaymentGateway.js
│ └── cache/
│
├── shared/ # 共享代码
│ ├── utils/
│ ├── logger/
│ ├── config/
│ └── middleware/
│
└── tests/ # 测试目录
├── unit/
│ ├── domain/
│ └── infrastructure/
├── integration/
└── fixtures/
架构规则:
1. api层只能调用domain层的服务
2. domain层定义接口,infrastructure层实现具体细节
3. 依赖方向:api → domain ← infrastructure
4. 使用依赖注入确保各层解耦3. 第二阶段:微型迭代开发
3.1 微型迭代提示词原则
单一职责:每次只解决一个问题
精确定位:指定具体文件和作用域
明确约束:规定什么不能修改
输出限制:要求只输出变更部分
3.2 微型迭代案例:创建用户服务
第一次迭代:创建用户领域模型
根据我们约定的架构,请在 `src/domain/user/User.js` 中创建用户领域模型。
要求:
1. 只创建这个文件,不要修改其他文件
2. 包含以下字段:id, email, name, passwordHash, createdAt, updatedAt
3. 添加基本的验证逻辑(如邮箱格式验证)
4. 不要包含任何数据库相关代码
5. 只输出这个文件的内容
当前文件内容(空文件):
第二次迭代:创建用户服务接口
现在在 `src/domain/user/UserService.js` 中创建用户服务接口。
要求:
1. 只创建这个文件
2. 定义以下方法:createUser, findUserById, findUserByEmail, updateUser, deleteUser
3. 只定义接口签名,不要实现具体逻辑
4. 使用JSDoc注释说明每个方法的作用和参数
5. 不要涉及具体的数据存储细节
6. 只输出这个文件的内容
当前文件内容(空文件):
第三次迭代:实现创建用户方法
现在请实现 `src/domain/user/UserService.js` 中的 createUser 方法。
要求:
1. 只修改这个文件中的 createUser 方法
2. 方法应接收用户数据参数,返回Promise<User>
3. 包含业务逻辑验证(如邮箱是否已存在)
4. 通过依赖注入接收userRepository,不要直接导入
5. 密码需要加密处理
6. 只输出完整的createUser方法实现,用// BEGIN AI CODE和// END AI CODE标记
当前文件内容:
[粘贴当前UserService.js内容]4. 第三阶段:版本控制流程
4.1 Git工作流规范
# 开始新功能前
git checkout -b feature/user-management
# 每次与AI交互前提交
git add .
git commit -m "feat: 开始实现createUser方法 - 前置提交"
# 获得AI代码后查看差异
git diff
# 审查无误后提交AI生成的代码
git add .
git commit -m "feat: 添加createUser方法实现 - AI生成"
# 如果AI代码有问题,回退
git checkout -- src/domain/user/UserService.js4.2 代码审查清单
[ ] 使用 git diff检查所有变更
[ ] 确认没有修改无关文件
[ ] 检查代码风格一致性
[ ] 验证业务逻辑正确性
[ ] 确保没有引入安全漏洞
5. 第四阶段:测试驱动开发
5.1 测试优先的提示词
请为 `src/domain/user/UserService.js` 中的 createUser 方法编写单元测试。
要求:
1. 在 `tests/unit/domain/user/UserService.test.js` 中编写测试
2. 覆盖以下场景:
- 成功创建用户
- 邮箱格式无效
- 邮箱已存在
- 密码强度不足
3. 使用Jest框架和适当的mock
4. 只输出测试文件内容
当前UserService的实现:
[粘贴UserService.js内容]5.2 测试验证流程
# 在集成AI代码前运行测试
npm test -- tests/unit/domain/user/UserService.test.js
# 如果测试失败,拒绝AI代码并重新提示
# 只有测试通过才接受代码6. 完整工作流案例:用户注册功能
6.1 步骤一:编写测试
提示词:
请先为用户注册功能编写验收测试,描述期望的行为。
要求:
1. 在 `tests/acceptance/user-registration.test.js` 中编写
2. 描述用户从提交注册信息到成功创建的完整流程
3. 包括成功和失败场景
4. 使用Gherkin语法(Given-When-Then)6.2 步骤二:实现领域模型
提示词:
根据测试要求,实现 `src/domain/user/User.js` 中的用户模型。
要求:
1. 包含邮箱验证逻辑
2. 包含密码加密逻辑
3. 实现必要的业务规则验证方法
4. 只输出这个文件的内容6.3 步骤三:实现仓储接口
提示词:
在 `src/infrastructure/database/UserRepository.js` 中实现用户仓储接口。
要求:
1. 实现findByEmail, save, findById等方法
2. 使用依赖注入接收数据库连接
3. 只输出这个文件的内容6.4 步骤四:实现API控制器
提示词:
在 `src/api/user/user.controller.js` 中实现注册端点。
要求:
1. 只处理HTTP请求和响应
2. 调用UserService完成业务逻辑
3. 包含适当的错误处理
4. 只输出这个文件的内容7. 常见问题处理
7.1 AI不遵守约束时
修正提示词:
你修改了其他无关的文件,这违反了我们的架构约束。
请重新按照要求实现,并且:
1. 只修改指定的文件
2. 不要添加未要求的导入
3. 遵守依赖方向规则
4. 输出前自我检查变更范围7.2 代码质量不一致时
质量要求提示词:
请重新实现代码,确保:
1. 使用一致的代码风格
2. 添加适当的错误处理
3. 包含必要的日志记录
4. 遵循安全最佳实践
5. 添加有意义的注释8. 总结 Checklist
在开始前与AI共同设计架构每次迭代只解决一个具体问题使用精确的、带有约束的提示词每次修改前进行Git提交使用git diff审查所有变更编写测试优先于实现只有测试通过才接受代码维护架构约束和代码质量标准
通过遵循本手册的流程,您可以有效控制AI编程的质量风险,充分发挥AI的效率优势,同时保持代码库的健壮性和可维护性。
页:
[1]