AI 辅助开发工作流
在前面的章节中,我们学习了如何使用 AI IDE 进行代码编写、如何使用 Git 管理代码版本、如何设计和实现 API 接口。但是,当你面对一个真实的开发任务时,你可能会遇到这些问题:
- "这个项目有上千个文件,我该从哪里开始?"
- "老板让我加个新功能,但我不熟悉这部分代码"
- "这个 Bug 不知道在哪,代码太多了"
- "要重构这堆代码,但怕改出问题"
这些问题的本质是:如何在真实的开发场景中,高效地使用 AI 工具完成工作?
在本节课中,我们将学习如何建立一套系统化的 AI 辅助开发工作流,让你能够在不同的开发场景下,都能高效地使用 AI 工具。我们会通过具体的案例,演示如何在新功能开发、Bug 修复、代码重构等场景下使用 AI。
💡 前置知识
在学习本节之前,建议你先了解以下内容:
- AI IDE 基础 - 掌握 AI IDE 的基本使用
- Git 和 GitHub 工作流 - 了解代码版本管理
- 大模型辅助编写接口代码 - 了解 AI 辅助开发的基本概念
📚 你将学到
- 理解 AI 在开发流程中的定位和能力边界
- 掌握不同项目类型的 AI 辅助开发策略
- 学会在新功能开发、Bug 修复、代码重构等场景下使用 Claude Code
- 建立项目知识库,提高与 Claude Code 的协作效率
- 掌握提高 AI 协作效率的实用技巧
1. 理解 AI 的能力边界
在开始使用 AI 辅助开发之前,我们需要先理解 AI 能做什么、不能做什么。这样才能建立正确的协作方式。
1.1 AI 擅长什么
把 AI 想象成一个很聪明但需要明确指令的助手。它能根据你的描述快速生成代码框架,也能在几秒钟内读完几千行代码找到你要的部分。遇到明显的语法错误、常见的安全漏洞,它也能帮你发现。那些重复性的工作,比如批量重命名变量、格式化代码、生成文档注释,交给它最合适不过。
简单来说,AI 擅长的是那些有明确规则、可以自动化的工作。
1.2 AI 不擅长什么
但 AI 也有它的局限性。它不了解你的业务逻辑——除非你详细告诉它,否则它不知道你们公司的订单流程是怎么走的。技术选型、架构设计这种需要权衡利弊的决策,它也做不了,因为这需要你的经验和对项目的理解。你们团队的特殊规范,比如"所有 API 都要加日志"、"错误码必须用枚举",AI 也不会知道,需要你配置或者明确告诉它。
最重要的是,AI 生成的代码不能直接用,你必须审查和测试。它可能会写出看起来对但实际有问题的代码,也可能忽略一些边界情况。
1.3 怎么和 AI 协作
理解了 AI 的能力边界,协作方式就清楚了:你负责想清楚要做什么、做决策、把关质量;AI 负责执行具体的编码工作、查找信息、发现明显的问题。
就像你和一个初级开发者合作一样——你告诉他要做什么,他去实现,然后你审查代码。区别是 AI 的执行速度快得多,但判断力不如人。
2. 不同项目类型的开发策略
不同类型的项目,开发方式和 AI 使用策略也不一样。选择合适的策略可以大大提高开发效率。
2.1 全新项目(从零开始)
项目特点:
- 没有历史包袱,可以自由设计
- 需要建立项目结构和代码规范
- 适合快速迭代和试错
推荐工作流:
第一步:规划项目结构
在开始编码之前,先让 AI 帮你规划项目结构和技术选型:
我要做一个任务管理应用,功能包括:
- 用户注册和登录
- 创建、编辑、删除任务
- 任务分类和标签
- 任务提醒
请帮我:
1. 推荐合适的技术栈
2. 设计项目目录结构
3. 规划数据库表结构第二步:搭建基础框架
根据规划,让 AI 创建基础的项目结构:
按照刚才的规划,帮我:
1. 创建项目目录结构
2. 初始化配置文件(package.json、.env 等)
3. 创建基础的服务器代码第三步:逐个实现功能
按照优先级,逐个实现功能模块:
现在实现用户注册功能,要求:
- 邮箱和密码注册
- 密码加密存储
- 邮箱验证关键点:
- 一开始就建立好代码规范,让 AI 按照规范生成代码
- 每完成一个功能模块就测试验证
- 及时更新项目文档
2.2 成熟项目(已有大量代码)
项目特点:
- 代码量大,有历史规范
- 需要保持代码风格一致性
- 修改需要考虑影响范围
推荐工作流:
第一步:了解项目结构
在修改代码之前,先让 AI 帮你了解项目:
这是一个电商项目,我需要添加优惠券功能。
请帮我:
1. 分析项目的整体结构
2. 找到订单相关的代码
3. 看看其他类似功能是怎么实现的第二步:找到参考代码
让 AI 找到项目中类似的实现,作为参考:
找一下项目中其他促销活动(如满减、折扣)是怎么实现的第三步:模仿现有风格
让 AI 参考现有代码的风格来实现新功能:
参考满减活动的实现方式,帮我实现优惠券功能
保持相同的代码风格和目录结构关键点:
- 先理解再动手,避免破坏现有架构
- 保持代码风格一致性
- 修改后要测试相关功能
2.3 快速原型(验证想法)
项目特点:
- 追求速度,不太在意代码质量
- 用于验证产品想法或技术方案
- 可能会被丢弃或重写
推荐工作流:
直接描述需求,快速实现:
做一个简单的待办事项应用,要求:
- 能添加、删除、标记完成任务
- 数据存储在本地
- 界面简洁,能用就行快速迭代:
加个搜索功能
改成深色主题
添加任务分类关键点:
- 不用太在意代码质量和规范
- 快速验证想法,及时调整方向
- 如果原型成功,后续需要重构
2.4 维护项目(修 Bug 为主)
项目特点:
- 代码已经稳定,主要是修复问题
- 需要快速定位问题
- 修改要谨慎,避免引入新问题
推荐工作流:
第一步:定位问题
用户反馈:点击"提交订单"按钮后,页面卡住不动
控制台报错:TypeError: Cannot read property 'id' of undefined
请帮我:
1. 分析可能的原因
2. 找到相关的代码第二步:分析根因
看看这个错误是在什么情况下产生的
检查一下数据流向第三步:实施修复
修复这个问题,并:
1. 添加防御性代码,避免类似问题
2. 添加错误提示,提升用户体验关键点:
- 修复后要充分测试,确保不影响其他功能
- 添加防御性代码,提高系统健壮性
- 记录问题和解决方案,方便后续参考
3. 常见开发任务的工作流
在日常开发中,我们会遇到各种不同的任务。下面介绍几种最常见任务的 AI 辅助工作流。
3.1 开发新功能
场景: 产品经理给了你一个新需求,需要实现一个新功能。
完整工作流:
步骤 1:理解需求(你自己完成)
在开始编码之前,先搞清楚:
- 要实现什么功能?
- 输入和输出是什么?
- 有哪些边界条件和异常情况?
- 性能和安全要求是什么?
步骤 2:了解现有代码(让 AI 帮你)
我需要实现用户评论功能,请帮我:
1. 看看项目中有没有类似的功能
2. 找到用户数据和文章数据的存储方式
3. 了解项目的数据库操作规范步骤 3:制定实现计划(和 AI 一起)
基于刚才的分析,实现评论功能需要:
1. 创建评论数据模型
2. 实现评论的增删改查 API
3. 在前端添加评论展示和发表功能
请帮我确认这个计划是否合理,有没有遗漏的地方步骤 4:实现功能(AI 生成,你审查)
按照计划,先实现评论数据模型
要求:
- 包含评论内容、作者、文章 ID、创建时间
- 支持评论的嵌套回复
- 添加必要的索引现在实现评论的 API 接口
要求:
- 发表评论
- 删除评论(只能删除自己的)
- 获取文章的所有评论
- 支持分页最后实现前端的评论组件
要求:
- 显示评论列表
- 评论发表表单
- 支持回复评论步骤 5:测试验证(你自己完成)
- 手动测试主要流程
- 测试边界情况(空内容、超长内容等)
- 测试权限控制(不能删除别人的评论)
- 让 AI 帮你写自动化测试
实际对话示例:
你:我要加一个用户评论功能,用户可以对文章发表评论
AI:好的,我先了解一下项目结构。
[AI 分析项目代码]
我看到项目已经有用户系统(models/user.js)和文章系统(models/article.js)。
实现评论功能需要:
1. 创建评论数据模型(models/comment.js)
2. 添加评论相关的 API(routes/comment.js)
3. 在文章详情页添加评论展示和发表功能
需要我开始实现吗?
你:好的,开始吧。先创建数据模型
AI:[生成 models/comment.js 代码]
我已经创建了评论数据模型,包含以下字段:
- id: 评论 ID
- content: 评论内容
- userId: 作者 ID
- articleId: 文章 ID
- parentId: 父评论 ID(用于嵌套回复)
- createdAt: 创建时间
接下来实现 API 接口吗?
你:是的,实现 API 接口3.2 修复 Bug
场景: 用户报告了一个问题,需要快速定位和修复。
完整工作流:
步骤 1:收集信息(你自己完成)
记录以下信息:
- 错误信息是什么?
- 如何复现这个问题?
- 什么时候开始出现的?
- 影响范围有多大?
步骤 2:定位问题(让 AI 帮你)
用户反馈:点击"提交订单"按钮后,页面卡住不动
浏览器控制台报错:TypeError: Cannot read property 'id' of undefined
错误发生在 checkout.js 第 45 行
请帮我:
1. 分析可能的原因
2. 找到相关的代码
3. 检查数据流向步骤 3:分析根因(和 AI 一起)
看看这个 user 对象是从哪里来的
检查一下在什么情况下 user 会是 undefined步骤 4:实施修复(AI 生成,你审查)
修复这个问题,要求:
1. 添加防御性代码,检查 user 是否存在
2. 如果 user 不存在,跳转到登录页
3. 添加友好的错误提示步骤 5:验证修复(你自己完成)
- 按照原来的步骤复现,确认问题解决
- 测试相关功能,确保没有引入新问题
- 思考是否有其他地方存在类似问题
实际对话示例:
你:用户反馈登录后刷新页面就退出了
AI:这通常是 token 存储或验证的问题。让我检查一下:
1. token 是存在哪里的?localStorage 还是 cookie?
2. 刷新页面时有没有重新读取 token?
请告诉我 token 相关的代码在哪个文件
你:在 utils/auth.js
AI:[分析 utils/auth.js]
我找到问题了:token 存在 sessionStorage 里,
刷新页面后 sessionStorage 会清空。
解决方案:改用 localStorage 存储 token
需要我修改吗?
你:好的,改一下
AI:[修改代码]
已经修改完成,现在 token 会存储在 localStorage 中,
刷新页面后不会丢失。
建议你测试一下:
1. 登录后刷新页面,确认还是登录状态
2. 关闭浏览器重新打开,确认还是登录状态3.3 重构代码
场景: 代码变得难以维护,需要重构以提高代码质量。
完整工作流:
步骤 1:确定重构目标(你自己完成)
明确以下问题:
- 要解决什么问题?(代码重复?结构混乱?性能问题?)
- 重构的范围有多大?
- 能接受的风险程度?
步骤 2:制定重构计划(和 AI 一起)
这三个函数(getUserList、getArticleList、getCommentList)
有很多重复代码,都是做分页、排序、筛选。
请帮我:
1. 分析重复的部分
2. 提出重构方案
3. 评估重构的风险步骤 3:准备安全网(让 AI 帮你)
在重构之前,先帮我写测试用例
确保重构后功能不变步骤 4:逐步重构(AI 执行,你验证)
按照刚才的方案,先提取公共函数现在优化数据结构最后更新调用的地方步骤 5:验证结果(你自己完成)
- 运行所有测试,确保通过
- 手动测试关键功能
- 检查代码质量是否提升
实际对话示例:
你:这三个函数有很多重复代码,能帮我重构一下吗?
[贴上三个函数的代码]
AI:我分析了一下,这三个函数的主要区别是:
- getUserList:获取用户列表
- getArticleList:获取文章列表
- getCommentList:获取评论列表
它们的共同逻辑是:分页、排序、筛选
重构方案:
1. 提取通用的 getList 函数
2. 将不同的部分作为参数传入
这样可以减少 80% 的重复代码。
需要我实现吗?
你:好的,但是先帮我写测试用例
AI:[生成测试用例]
我已经为这三个函数写了测试用例,
覆盖了主要的使用场景。
现在可以开始重构了吗?
你:可以,开始重构
AI:[重构代码]
重构完成。我创建了一个通用的 getList 函数,
三个原来的函数现在都调用这个通用函数。
请运行测试确认功能正常:npm test3.4 代码审查
场景: 同事提交了代码,需要你审查。
完整工作流:
步骤 1:快速了解改动(让 AI 帮你)
总结一下这次 PR 做了什么改动
主要修改了哪些文件步骤 2:检查常见问题(让 AI 帮你)
检查这次改动:
1. 有没有安全问题(SQL 注入、XSS 等)
2. 有没有性能问题(N+1 查询、内存泄漏等)
3. 有没有明显的 Bug
4. 代码风格是否符合项目规范步骤 3:深入审查(你自己完成)
- 业务逻辑是否正确
- 是否考虑了边界情况
- 是否有更好的实现方式
- 是否需要添加测试
步骤 4:给出反馈(你自己完成)
- 指出需要修改的地方
- 解释为什么要这样改
- 提供改进建议
实际对话示例:
你:帮我审查一下这个 PR
[提供 PR 链接或代码]
AI:我审查了这次改动,发现以下问题:
1. 安全问题:
- 第 23 行:用户输入没有转义,可能有 XSS 风险
- 第 45 行:SQL 查询直接拼接字符串,有注入风险
2. 性能问题:
- 第 67 行:在循环里查询数据库,会产生 N+1 问题
3. 代码质量:
- handleSubmit 函数太长(200 行),建议拆分
- 缺少错误处理
需要我详细说明这些问题吗?
你:详细说一下 SQL 注入的问题
AI:在第 45 行:
```javascript
const query = `SELECT * FROM users WHERE name = '${userName}'`;
```
这种写法直接将用户输入拼接到 SQL 语句中,
如果用户输入 `' OR '1'='1`,就会变成:
```sql
SELECT * FROM users WHERE name = '' OR '1'='1'
```
这会返回所有用户数据。
正确的做法是使用参数化查询:
```javascript
const query = 'SELECT * FROM users WHERE name = ?';
db.query(query, [userName]);
```
需要我修改吗?4. 建立项目知识库
为了让 AI 更好地理解你的项目,建议在项目中建立知识库。这样 AI 就能按照你的规范和习惯工作。
4.1 创建项目说明文件
在项目根目录创建 CLAUDE.md 或 AGENTS.md 文件,记录项目的关键信息:
# 项目说明
## 项目概述
这是一个在线教育平台,提供课程管理、用户学习、作业提交等功能。
## 技术栈
- 前端:React 18 + TypeScript + Vite
- 后端:Node.js + Express + PostgreSQL
- 部署:Vercel(前端)+ Railway(后端)
## 项目结构src/ ├── components/ # React 组件 ├── pages/ # 页面组件 ├── api/ # API 调用 ├── utils/ # 工具函数 └── types/ # TypeScript 类型定义
## 代码规范
- 使用 ESLint 和 Prettier 格式化代码
- 组件文件使用 PascalCase(如 UserProfile.tsx)
- 工具函数使用 camelCase(如 formatDate.ts)
- 常量使用 UPPER_SNAKE_CASE(如 API_BASE_URL)
## 开发流程
1. 从 main 分支创建功能分支
2. 开发完成后提交 PR
3. 代码审查通过后合并
## 常见任务
- 启动开发服务器:`npm run dev`
- 运行测试:`npm test`
- 构建生产版本:`npm run build`
- 代码格式化:`npm run format`
## 注意事项
- 所有 API 调用都要添加错误处理
- 用户输入必须做验证和转义
- 数据库操作使用参数化查询,避免 SQL 注入
- 敏感信息(密码、token)不能记录到日志
## 数据库表结构
- users: 用户表(id, email, password_hash, created_at)
- courses: 课程表(id, title, description, teacher_id)
- enrollments: 选课表(id, user_id, course_id, enrolled_at)4.2 记录常见问题和解决方案
在项目中创建 docs/troubleshooting.md,记录常见问题:
# 常见问题
## 开发环境问题
### 问题:npm install 失败
**原因:** Node 版本不兼容
**解决方案:** 使用 Node.js 18 或更高版本
### 问题:数据库连接失败
**原因:** 环境变量未配置
**解决方案:** 复制 .env.example 为 .env,填写数据库连接信息
## 功能问题
### 问题:用户登录后刷新页面就退出
**原因:** Token 存储在 sessionStorage
**解决方案:** 改用 localStorage 存储 token
### 问题:图片上传失败
**原因:** 文件大小超过限制
**解决方案:** 在前端添加文件大小检查,限制为 5MB4.3 维护技术决策记录
创建 docs/decisions/ 目录,记录重要的技术决策:
# ADR-001: 选择 PostgreSQL 作为数据库
## 状态
已采纳
## 背景
项目需要选择一个关系型数据库,候选方案有 MySQL 和 PostgreSQL。
## 决策
选择 PostgreSQL
## 理由
1. 更好的 JSON 支持,适合存储课程内容
2. 更强大的全文搜索功能
3. 团队成员更熟悉 PostgreSQL
## 后果
- 需要学习 PostgreSQL 特有的功能
- 部署时需要 PostgreSQL 环境5. 提高 AI 协作效率的技巧
掌握一些实用技巧,可以让你和 AI 的协作更加高效。
5.1 描述要清晰具体
不好的描述:
这个功能有问题
帮我优化一下好的描述:
用户点击"提交"按钮后,表单没有提交
浏览器控制台报错:Uncaught TypeError: Cannot read property 'value' of null
错误发生在 form.js 第 23 行
这个列表加载很慢,有 1000 条数据
请帮我添加分页功能,每页显示 20 条关键点:
- 提供具体的错误信息
- 说明期望的结果
- 给出相关的上下文
5.2 一次只做一件事
不好的做法:
帮我实现登录、注册、找回密码、个人中心、
修改密码、邮箱验证这些功能好的做法:
先实现登录功能,要求:
- 邮箱和密码登录
- 记住登录状态
- 错误提示
(完成后)现在实现注册功能
(完成后)现在实现找回密码功能关键点:
- 将大任务拆分成小任务
- 每完成一个任务就测试验证
- 确认没问题再继续下一个
5.3 及时验证结果
不好的做法:
- 让 AI 连续修改了 10 个文件
- 最后发现第一个就错了
- 浪费了大量时间
好的做法:
- 修改一个文件,立即测试
- 确认没问题,再继续
- 发现问题及时纠正
关键点:
- 小步快跑,快速反馈
- 不要盲目信任 AI
- 保持对代码的掌控
5.4 善用上下文
技巧 1:引用之前的对话
按照刚才的方案实现
参考之前的 getUserList 函数技巧 2:提供相关代码
这是现有的用户模型代码:
[贴上代码]
请参考这个风格实现文章模型技巧 3:说明项目背景
这是一个电商项目,使用 React + Node.js
已经有用户系统和商品系统
现在要添加购物车功能5.5 保存有用的对话
场景: 解决了一个复杂问题
做法:
- 将解决方案记录到项目文档
- 下次遇到类似问题可以参考
- 分享给团队其他成员
示例:
在 docs/solutions/ 目录创建文档:
# 解决 N+1 查询问题
## 问题描述
获取文章列表时,每篇文章都要查询一次作者信息,
导致性能问题。
## 解决方案
使用 JOIN 查询,一次性获取所有数据:
```sql
SELECT articles.*, users.name as author_name
FROM articles
LEFT JOIN users ON articles.author_id = users.id效果: 查询时间从 2000ms 降低到 50ms
5.6 学会提问的艺术
技巧 1:先问"为什么"
为什么这段代码会导致内存泄漏?
为什么要使用 useCallback 而不是普通函数?技巧 2:请求多个方案
实现用户认证有哪几种方案?
各有什么优缺点?技巧 3:请求解释
这段代码是怎么工作的?
能详细解释一下这个算法吗?6. 常见问题解答
Q1:AI 生成的代码能直接用吗?
A: 不能直接用,需要审查和测试。
AI 生成的代码可能存在以下问题:
- 逻辑错误或边界情况处理不当
- 不符合项目的代码规范
- 存在安全隐患
- 性能不够优化
你需要:
- 仔细阅读生成的代码
- 理解代码的逻辑
- 测试各种情况
- 确认符合项目规范
Q2:AI 理解错了我的意思怎么办?
A: 及时纠正,重新描述需求。
不是这样的,我的意思是...
这个理解不对,应该是...
让我重新描述一下需求...如果多次纠正还是不对,可以:
- 提供更多上下文信息
- 给出具体的代码示例
- 拆分成更小的任务
Q3:遇到 AI 不会的问题怎么办?
A: AI 不是万能的,有些问题需要你自己解决。
AI 可能无法解决的问题:
- 非常新的技术(AI 的知识有截止日期)
- 你们团队特有的业务逻辑
- 需要访问外部系统的问题
- 复杂的性能优化问题
这时你需要:
- 查阅官方文档
- 搜索相关解决方案
- 咨询有经验的同事
- 在社区提问
Q4:怎么判断 AI 的建议是否合理?
A: 用你的经验和知识判断。
评估标准:
- 是否符合最佳实践
- 是否考虑了边界情况
- 是否有潜在的安全风险
- 是否符合项目的技术栈
- 性能是否可接受
如果不确定,可以:
- 让 AI 解释为什么这样做
- 请求提供其他方案
- 咨询团队成员
Q5:团队协作时怎么用 AI?
A: 建立共同的规范和知识库。
团队协作建议:
- 共享项目的 CLAUDE.md 配置
- 统一代码规范和风格
- 记录常见问题的解决方案
- 定期分享有用的提示词
- 在代码审查时检查 AI 生成的代码
Q6:如何避免过度依赖 AI?
A: 保持学习和思考,AI 是辅助工具而不是替代品。
建议:
- 理解 AI 生成的代码,不要盲目复制
- 遇到不懂的概念,主动学习
- 定期复习基础知识
- 尝试自己解决问题,再用 AI 验证
- 参与代码审查,学习他人的经验
7. 总结
通过本章节的学习,你已经掌握了:
- AI 的能力边界:理解 AI 擅长什么、不擅长什么,建立正确的协作方式
- 项目类型策略:针对全新项目、成熟项目、快速原型、维护项目的不同开发策略
- 常见任务工作流:掌握新功能开发、Bug 修复、代码重构、代码审查的完整流程
- 项目知识库:学会建立项目文档,让 AI 更好地理解你的项目
- 协作技巧:掌握提高 AI 协作效率的实用技巧
关键要点:
- 明确分工:你做决策和把关,AI 做执行和辅助
- 清晰沟通:描述要具体,一次做一件事
- 及时验证:不要盲目信任,要测试验证
- 持续学习:了解 AI 的能力边界,不断优化协作方式
记住:AI 是工具,不是替代品。它能让你更高效,但最终的代码质量还是要靠你把关。从简单任务开始,逐步建立信任,你会发现 AI 能帮你节省大量时间,让你专注于更有价值的工作。
💡 下一步
在下一章节中,我们将学习如何使用 AI 进行代码审查和质量保证,确保代码的可维护性和安全性。
