Skip to content

AI 辅助开发工作流

在前面的章节中,我们学习了如何使用 AI IDE 进行代码编写、如何使用 Git 管理代码版本、如何设计和实现 API 接口。但是,当你面对一个真实的开发任务时,你可能会遇到这些问题:

  • "这个项目有上千个文件,我该从哪里开始?"
  • "老板让我加个新功能,但我不熟悉这部分代码"
  • "这个 Bug 不知道在哪,代码太多了"
  • "要重构这堆代码,但怕改出问题"

这些问题的本质是:如何在真实的开发场景中,高效地使用 AI 工具完成工作?

在本节课中,我们将学习如何建立一套系统化的 AI 辅助开发工作流,让你能够在不同的开发场景下,都能高效地使用 AI 工具。我们会通过具体的案例,演示如何在新功能开发、Bug 修复、代码重构等场景下使用 AI。

💡 前置知识

在学习本节之前,建议你先了解以下内容:

📚 你将学到

  1. 理解 AI 在开发流程中的定位和能力边界
  2. 掌握不同项目类型的 AI 辅助开发策略
  3. 学会在新功能开发、Bug 修复、代码重构等场景下使用 Claude Code
  4. 建立项目知识库,提高与 Claude Code 的协作效率
  5. 掌握提高 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 test

3.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.mdAGENTS.md 文件,记录项目的关键信息:

markdown
# 项目说明

## 项目概述
这是一个在线教育平台,提供课程管理、用户学习、作业提交等功能。

## 技术栈
- 前端: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,记录常见问题:

markdown
# 常见问题

## 开发环境问题

### 问题:npm install 失败
**原因:** Node 版本不兼容
**解决方案:** 使用 Node.js 18 或更高版本

### 问题:数据库连接失败
**原因:** 环境变量未配置
**解决方案:** 复制 .env.example 为 .env,填写数据库连接信息

## 功能问题

### 问题:用户登录后刷新页面就退出
**原因:** Token 存储在 sessionStorage
**解决方案:** 改用 localStorage 存储 token

### 问题:图片上传失败
**原因:** 文件大小超过限制
**解决方案:** 在前端添加文件大小检查,限制为 5MB

4.3 维护技术决策记录

创建 docs/decisions/ 目录,记录重要的技术决策:

markdown
# 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 保存有用的对话

场景: 解决了一个复杂问题

做法:

  1. 将解决方案记录到项目文档
  2. 下次遇到类似问题可以参考
  3. 分享给团队其他成员

示例:

docs/solutions/ 目录创建文档:

markdown
# 解决 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. 总结

通过本章节的学习,你已经掌握了:

  1. AI 的能力边界:理解 AI 擅长什么、不擅长什么,建立正确的协作方式
  2. 项目类型策略:针对全新项目、成熟项目、快速原型、维护项目的不同开发策略
  3. 常见任务工作流:掌握新功能开发、Bug 修复、代码重构、代码审查的完整流程
  4. 项目知识库:学会建立项目文档,让 AI 更好地理解你的项目
  5. 协作技巧:掌握提高 AI 协作效率的实用技巧

关键要点:

  • 明确分工:你做决策和把关,AI 做执行和辅助
  • 清晰沟通:描述要具体,一次做一件事
  • 及时验证:不要盲目信任,要测试验证
  • 持续学习:了解 AI 的能力边界,不断优化协作方式

记住:AI 是工具,不是替代品。它能让你更高效,但最终的代码质量还是要靠你把关。从简单任务开始,逐步建立信任,你会发现 AI 能帮你节省大量时间,让你专注于更有价值的工作。

💡 下一步

在下一章节中,我们将学习如何使用 AI 进行代码审查和质量保证,确保代码的可维护性和安全性。