迭代开发与复杂依赖处理 本节摘要:项目骨架搭好后,真正的挑战才开始——持续迭代。本节讲解功能迭代的多轮对话策略(每轮聚焦一个功能、保持上下文连贯)、处理第三方库版本冲突(AI 经常给出过时 API)、以及跨模块修改的上下文管理(改一个接口,前后端测试都要联动)。核心心法:把大功能拆成小步骤,每步一个对话回合,永远让 AI 在「小范围」内工作。 一、多轮对话的迭代策略 每轮只做一个功能点 错误示范: AI 会试图一次性输出所有代码,结果:上下文爆炸、代码互相冲突、你无法审查。 正确做法——每轮对话聚焦一个功能: 💡 技巧:每轮对话开始前,先告诉 AI「当前项目状态」和「本轮目标」。不要假设 AI 记得上一轮的所有细节——它的上下文窗口有限,早期信息可能已被截断。
本节摘要:项目骨架搭好后,真正的挑战才开始——持续迭代。本节讲解功能迭代的多轮对话策略(每轮聚焦一个功能、保持上下文连贯)、处理第三方库版本冲突(AI 经常给出过时 API)、以及跨模块修改的上下文管理(改一个接口,前后端测试都要联动)。核心心法:把大功能拆成小步骤,每步一个对话回合,永远让 AI 在「小范围」内工作。
错误示范:
帮我实现拖拽功能、评论系统、通知功能、文件上传。
AI 会试图一次性输出所有代码,结果:上下文爆炸、代码互相冲突、你无法审查。
正确做法——每轮对话聚焦一个功能:
第一轮:实现看板拖拽(用 @dnd-kit/core) 第二轮:实现任务评论(纯文本,不支持 Markdown) 第三轮:实现 @提及 功能(在评论基础上扩展) 第四轮:实现通知(评论/分配时触发)
💡 技巧:每轮对话开始前,先告诉 AI「当前项目状态」和「本轮目标」。不要假设 AI 记得上一轮的所有细节——它的上下文窗口有限,早期信息可能已被截断。
多轮迭代中,上下文管理是关键:
方法一:摘要接力
每完成一个功能,让 AI 总结当前状态:
请总结当前项目状态: - 已完成的功能 - 关键文件路径 - 下一步计划 我会在下一轮对话中把这个摘要作为起点。
下一轮对话开头:
项目状态(上轮总结): - 后端:认证 + Task CRUD 已完成,API 在 src/api/ - 前端:登录 + 看板页面已完成,用 useFetch 请求数据 - 本轮目标:实现拖拽排序 请开始。
方法二:文件引用
在 Cursor 中,用 @file 引用关键文件让 AI 看到最新代码:
@src/api/tasks.py @src/components/TaskCard.tsx 现在要给 Task 加「标签」功能: - 后端:Task 模型加 tags 字段(JSON 数组),API 支持按标签筛选 - 前端:TaskCard 显示标签,看板页加标签筛选器
方法三:规则文件兜底
第 4 章配置的 .cursorrules 在这里发挥价值——无论对话怎么切换,AI 始终知道项目规范(技术栈、目录结构、代码约定)。
AI 的训练数据有截止日期。它可能:
getServerSideProps 在 Next.js 14 App Router 中不适用)策略一:在 Prompt 中锁定版本
注意:我使用的是 Next.js 14 (App Router),不是 Pages Router。 - 用 "use client" 标记客户端组件 - 不用 getServerSideProps / getStaticProps - 路由用 src/app/ 目录,不用 pages/
策略二:让 AI 先查文档再写代码
我要用 @dnd-kit/core 实现拖拽排序。 请先确认: 1. 当前最新稳定版是多少? 2. 核心 API 是什么(DndContext, useDraggable, useDroppable)? 3. 跟 React 18 有没有已知兼容问题? 确认后再写实现代码。
策略三:遇到报错时给 AI 完整信息
安装 @dnd-kit/core@6.1.0 后运行报错: TypeError: Cannot read properties of undefined (reading 'current') at useSensor (node_modules/@dnd-kit/core/dist/index.js:1234) 我的 React 版本: 18.2.0 我的 Next.js 版本: 14.2.3 请分析原因并给出修复方案。
⚠️ 注意:如果 AI 连续两次给出的修复都不生效,大概率是它的知识跟当前库版本不匹配。这时应该:去官方文档查最新用法 → 把文档关键段落贴给 AI → 让它基于「正确信息」重写。
假设你要给 Task 加一个 priority 字段(高/中/低):
涉及修改:
Task 加 priority 字段 + 数据库迁移types/task.ts 加 priority 字段TaskCard 显示优先级标记,创建表单加优先级选择第一轮(后端): @src/models/task.py @src/schemas/task.py @src/api/tasks.py 给 Task 加 priority 字段(enum: high/medium/low, 默认 medium): 1. 模型加字段 + 生成 Alembic 迁移 2. Schema 加 priority(创建时可选,更新时可选) 3. API: 创建/更新支持 priority,列表支持 ?priority=high 筛选 4. 运行 alembic upgrade head 确认迁移成功
验证后端无误后:
第二轮(前端): @src/types/task.ts @src/components/TaskCard.tsx @src/app/projects/[id]/page.tsx 后端已加 priority 字段(high/medium/low)。前端联动: 1. types/task.ts 加 priority 字段 2. TaskCard 左上角显示优先级色块(红/黄/灰) 3. 创建任务弹窗加优先级下拉选择 4. 看板页顶部加优先级筛选按钮
💡 技巧:跨模块修改时,按「数据流方向」推进:数据库 → 后端模型 → 后端 API → 前端类型 → 前端组件。这样每一步的输入都是上一步已验证的输出。
| 陷阱 | 表现 | 应对 |
|---|---|---|
| 上下文溢出 | AI 开始「忘记」之前的约定,重复生成已有代码 | 开新对话 + 贴摘要 |
| 过度重构 | 你让它加个字段,它把整个文件重写了 | 明确说「只改 X,不要动其他代码」 |
| 幻觉 API | AI 调用了一个不存在的方法 | 跑代码验证,报错后贴错误让它修 |
| 依赖膨胀 | AI 为一个小功能引入一个新库 | 审查 package.json,问「能用现有依赖实现吗?」 |
| 测试遗漏 | 改了功能但没更新测试 | 每轮结束追问「需要更新哪些测试?」 |
功能在迭代中生长,Bug 也在迭代中冒出来。下一节讲 AI 辅助 Debug 的完整闭环:从报错到修复到验证。