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 协作效率的实用技巧

0. Codex 对应教程

本页原先的 Codex 工作流对照说明,已经独立整理到:

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 进行代码审查和质量保证,确保代码的可维护性和安全性。