1. 为什么我们需要为AI编程重构文档体系?
在传统软件开发中,我们习惯用自然语言编写需求文档,这些文档往往包含大量叙述性文字和业务流程描述。但当我们将AI作为开发伙伴时,这种文档形式会暴露出三个致命缺陷:
首先是上下文理解偏差。我曾在一个FastAPI项目中,用2000字的需求文档描述用户权限系统,结果AI生成的代码完全忽略了RBAC的核心约束。后来发现是因为关键权限规则被淹没在大量背景描述中。
其次是多轮对话中的记忆丢失。有次在实现JWT认证时,AI在第5轮对话后突然建议改用Session认证,完全忘记了我们之前约定的技术方案。
最头疼的是代码风格混乱。同一个项目里,AI生成的代码时而用PEP8命名,时而用camelCase,甚至出现过同一个模块里混用同步和异步写法的情况。
关键教训:给AI的文档必须像代码一样精确,每个约束都要显式声明
2. AI-Native文档的四大设计原则
2.1 结构化优先于叙述性
Markdown的标题层级成为AI理解文档结构的核心线索。我习惯用以下层级划分:
- 一级标题:模块边界(如"认证服务")
- 二级标题:组件类型(如"数据模型"、"API端点")
- 三级标题:具体实现(如"密码哈希算法")
2.2 模块化上下文管理
通过分离全局配置和具体任务,可以避免上下文污染。我的标准做法是:
.cursorrules存放永久的项目级约束AI_SPEC.md按功能模块拆分,可单独投喂ROADMAP.md维护对话状态
2.3 显式技术约束
在最近的多租户SaaS项目中,我在文档中明确定义了以下约束,使生成代码的准确率提升60%:
python复制# 数据库约束示例
- 所有Model必须继承BaseModel
- 查询必须包含tenant_id过滤
- 禁止使用raw SQL
2.4 任务原子化拆解
将"实现用户系统"这样的宏观任务拆解为:
- 创建User模型
- 实现密码哈希
- 编写注册API
- 添加JWT认证
...
每个子任务都能在3轮对话内完成。
3. 项目目录结构的最佳实践
3.1 必须包含的核心文件
code复制project_root/
├── .cursorrules # 技术栈约束
├── AI_SPEC.md # 业务规格
├── ROADMAP.md # 任务追踪
├── src/ # 生成代码
│ ├── app/
│ │ ├── core/ # 配置类
│ │ ├── models/ # 数据库模型
│ │ └── services/ # 业务逻辑
└── tests/ # 测试代码
3.2 特殊文件的作用机制
.cursorrules 文件会被Cursor自动加载到每次对话的上下文。实测表明,相比每次手动输入技术栈要求,这种方式能让AI少犯85%的基础错误。
AI_SPEC.md 应该按功能模块分节存储,我通常这样组织:
markdown复制# 1. 认证模块
## 1.1 数据模型
## 1.2 API端点
## 1.3 业务规则
# 2. 支付模块
...
4. 文档模板详解与示例
4.1 全局规则文件(.cursorrules)
这是我为一个电商项目编写的实际片段:
markdown复制# Role
你是一位资深Python全栈工程师,擅长FastAPI和React集成
# Tech Stack
- Python 3.11 + type hints
- FastAPI (带Swagger文档)
- SQLAlchemy 2.0异步模式
- Pydantic v2数据验证
# 禁止事项
1. 绝对不要使用全局变量
2. 禁止出现同步数据库操作
3. 所有路由必须有OpenAPI文档
4.2 详细规格文件(AI_SPEC.md)
商品模块的典型定义:
markdown复制## 商品模型
- 表名: products
- 字段:
- id: UUID
- name: str (索引)
- price: Decimal(10,2)
- stock: int (>=0)
## 商品搜索API
GET /api/products?q=...
响应格式:
{
"data": ProductSchema[],
"pagination": {...}
}
4.3 进度管理文件(ROADMAP.md)
建议包含以下信息:
markdown复制## 2023-11-15进度
- [x] 用户认证模块
- [ ] 商品管理模块
- [x] 数据模型
- [ ] CRUD接口
5. 高效交互工作流
5.1 对话初始化技巧
我常用的初始化prompt模板:
code复制请严格遵循.cursorrules中的技术约束。
已上传AI_SPEC.md的[模块名称]部分,
请确认理解以下要点:
1. 核心数据模型是...[具体字段]
2. 主要API端点包括...
3. 特殊业务规则是...
5.2 原子任务执行示例
实现用户注册功能的典型对话流程:
- 首先生成Pydantic Schema
- 然后创建数据库模型
- 接着编写service层逻辑
- 最后实现API路由
每个步骤单独prompt,例如:
code复制根据AI_SPEC.md中用户注册的要求,
请创建UserCreateSchema,需要包含:
- email格式验证
- 密码强度检查
- 自动生成注册时间
5.3 代码审查策略
我总会要求AI进行三级自检:
- 类型提示完整性
- 异常处理覆盖度
- 性能隐患排查
典型prompt:
code复制请检查刚生成的代码:
1. 是否所有IO操作都是异步的?
2. 密码哈希是否使用bcrypt?
3. 是否处理了重复email冲突?
6. 提升生成质量的实战技巧
6.1 伪代码约束法
在定义复杂逻辑时,我会先写伪代码框架:
python复制async def process_order(
db: AsyncSession,
order: OrderCreateSchema
) -> OrderResult:
"""订单处理流程必须包含:
1. 库存检查
2. 支付验证
3. 日志记录
"""
pass
6.2 少样本学习示例
提供代码风格示例极其有效:
python复制# 好的依赖注入示例
def get_db() -> AsyncSession:
async with async_session() as session:
yield session
# 坏的实践(全局session)
session = make_session() # 不要这样做!
6.3 强制模式切换
当AI陷入错误思路时,用强硬指令重置:
code复制停止当前实现方案!
请回到AI_SPEC.md中的"错误处理"章节,
严格按照定义的重试机制重新实现。
7. 常见问题与解决方案
7.1 上下文丢失处理
症状:AI突然忘记之前的约定
解决方法:
- 立即中断当前话题
- 重新发送.cursorrules关键段落
- 要求AI确认理解
7.2 风格不一致修复
当发现代码风格漂移时:
- 在.cursorrules中添加更具体的风格约束
- 提供反面示例:
python复制# 禁止的写法
def getUser(): ...
# 要求的写法
def get_user() -> User: ...
7.3 复杂逻辑分解技巧
对于分布式锁这样的复杂逻辑:
- 先在AI_SPEC.md中定义算法步骤
- 要求AI分步实现
- 每步进行验证测试
8. 工具链集成建议
8.1 版本控制策略
我的.gitignore通常会包含:
code复制# Cursor相关
.cursor/cache/
.cursor/conversations/
8.2 测试驱动开发
在ROADMAP.md中定义测试要求:
markdown复制[ ] 用户模块测试
- 注册成功用例
- 重复email测试
- 密码强度测试
8.3 持续集成准备
提前在.cursorrules中声明CI要求:
markdown复制# CI/CD约束
1. 所有测试必须通过pytest
2. 类型检查必须通过mypy
3. 代码风格符合black
经过十几个项目的实践验证,这套方法能使AI生成代码的可用率从最初的30%提升到85%以上。关键在于把AI当作一个需要明确需求的开发伙伴,而不是魔法代码生成器。每次对话前多花5分钟完善文档,能节省后期5小时的调试时间。
