【从零学Vibe Coding】第七章:如何用 AI 从零开发一个完整项目
第七章:如何用 AI 从零开发一个完整项目
真实案例,不讲空话
这一章我们不讲空话,直接走一个完整案例。
项目:TodoFlow — 一个给个人和小团队使用的待办事项管理工具。
功能不复杂,但足够覆盖一个真实项目的主流程:
- 用户注册和登录
- 待办事项新增、编辑、删除
- 状态切换(待办 / 进行中 / 完成)
- 标签分类
- 截止日期
- 简单统计看板
技术栈:
- 前端:React + TypeScript + Ant Design
- 后端:FastAPI + SQLAlchemy
- 数据库:PostgreSQL
- 部署:Docker Compose
第一步:需求分析(不要跳过这一步)
为什么需求分析是第一步?
最差的做法是上来就说"帮我做个 Todo App"然后让 AI 直接写代码。
那个做法的问题是:你会得到一堆代码,但可能做了 60% 你不需要的功能,漏了 40% 你真正需要的。
更好的做法是先让 AI 帮你收敛需求,把模糊的想法变成清晰的任务列表。
需求分析 Prompt
我们要做一个 Todo 管理工具 MVP,请先帮我补全需求,不要写代码。
目标用户:
1. 个人用户(主要)
2. 小团队(次要)
初步想到的功能:
1. 新增待办
2. 编辑待办
3. 删除待办
4. 标记完成
5. 标签分类
6. 截止日期提醒
请帮我:
1. 区分 MVP 必须做的功能 vs 可以延后做的功能
2. 补充我可能遗漏的功能点
3. 列出信息架构(页面和核心实体)
4. 指出潜在的歧义点(需要我决策的地方)
AI 可能帮你发现的遗漏
通过这一步,AI 往往会帮你发现一些你没想到的问题:
- 待办是否支持优先级?(重要 vs 不重要)
- 删除是软删除(回收站)还是直接删?
- 截止日期是只展示,还是要推送提醒?
- 标签是全局的还是每个用户独立的?
- 完成的待办是否要归档,还是一直显示?
- 小团队协作时,待办能否分配给特定成员?
这些问题不是 AI 在刁难你,而是真正落地时必须回答的。 越早澄清,越少返工。
第二步:技术选型
当需求基本清楚后,再让 AI 帮你做技术决策。
技术选型 Prompt
请为一个 Todo SaaS MVP 做技术选型建议。
约束条件:
1. 2 周内要出可演示版本
2. 只有 1-2 个开发者
3. 后续可能扩展为小团队协作功能
请从以下角度比较:
1. React vs Vue(前端框架)
2. FastAPI vs NestJS(后端框架)
3. PostgreSQL vs SQLite(数据库)
评估维度:
- 开发速度(初始搭建 + 功能实现速度)
- 部署复杂度
- 后续扩展性
最后给出你的推荐方案和核心理由
典型的 AI 回复和你应该怎么用它
AI 会给你一个比较表和推荐,但最终决定权在你。关键是看它的理由,而不是直接接受推荐。
比如它推荐 SQLite,理由是"开发简单、不需要单独启动数据库"。但如果你预期三个月后要支持多用户并发写入,这个决定可能需要修正。
第三步:数据库设计
这一步很适合让 AI 先出草稿,但你必须 review。
数据库设计 Prompt
请为 TodoFlow MVP 设计数据库表结构。
实体(至少):
1. 用户(User)
2. 待办事项(Todo)
3. 标签(Tag)
业务规则:
1. 一个用户可以有多个待办
2. 一个待办可以绑定多个标签(多对多)
3. 待办有状态:todo / in_progress / done
4. 待办有优先级:low / medium / high
5. 待办支持截止日期(可为空)
6. 软删除(deleted_at 字段,不真实删除)
请输出:
1. 每张表的字段、类型、约束、默认值
2. 主外键关系
3. 推荐加索引的字段(及原因)
4. 需要特别注意的设计细节
Review 数据库设计时的检查清单
拿到 AI 的输出后,重点检查:
- 是否过度设计(比如 MVP 阶段不需要的字段)
- 时间字段命名是否统一(
created_atvscreateTime) - 是否有必要的唯一约束(email 唯一、手机号唯一)
- 多对多关系的中间表是否合理
- 软删除字段是否一致
- 外键是否有索引(查询性能)
- 是否缺少必要的 NOT NULL 约束
第四步:后端 API 开发
原则:一次只做一个模块
这一步最容易提速,也最容易乱。
坚守一个原则:一次只做一个模块。
不要说"帮我实现所有后端接口",而是说"先只做用户认证模块",做完验证了,再做下一个模块。
用户认证模块 Prompt
请实现用户认证模块(注册 + 登录)。
技术栈:
- FastAPI
- SQLAlchemy(async)
- PostgreSQL
- JWT(python-jose)
- 密码哈希(passlib + bcrypt)
已有的数据库模型(见上一步):
[贴 User 表结构]
接口要求:
1. POST /auth/register
- 输入:email、password、username
- email 唯一校验
- 密码哈希存储
- 返回:user_id, email, username(不返回密码)
2. POST /auth/login
- 输入:email、password
- 校验密码
- 返回:access_token(JWT,有效期 7 天)
3. GET /auth/me
- 需要 Bearer Token
- 返回当前用户信息
约束:
- 按 router / service / model / schema 分层
- 使用 Pydantic v2 做请求和响应验证
- 不要实现刷新 Token 逻辑(MVP 阶段不需要)
输出:
1. 目录结构
2. 分文件输出代码(app/auth/router.py, service.py, schema.py)
3. 最后给出 curl 测试示例(注册 + 登录)
Todo CRUD 模块 Prompt
请实现 Todo 的 CRUD 接口。
前置条件:
- 用户认证已完成(有 get_current_user 依赖)
- 已有 User 和 Todo 的 SQLAlchemy model
接口要求:
1. POST /todos - 创建待办
2. GET /todos - 查询待办列表(支持按状态、标签筛选,支持分页)
3. GET /todos/{id} - 查询单个待办
4. PUT /todos/{id} - 更新待办
5. DELETE /todos/{id} - 软删除待办
6. PATCH /todos/{id}/status - 单独修改状态
业务规则:
- 用户只能操作自己的待办(无法看到其他人的)
- 软删除(deleted_at 字段)
- 查询列表默认不返回已删除的
约束:
- 延用认证模块的分层结构
- 不要修改已有的 user 相关代码
- 分页默认 page=1, size=20
输出:
1. 分文件输出代码
2. 标注每个接口的权限要求
第五步:前端开发
前端非常适合 Vibe Coding,因为它反馈快——页面对不对,你一眼就能看出来。
但前端也最容易被 AI 改乱,所以最好按这个顺序来:
- 先搭页面骨架(HTML 结构)
- 再补交互逻辑
- 再接真实接口
- 最后优化样式细节
页面骨架 Prompt
请先实现 Todo 列表页的组件骨架,不要实现完整逻辑。
页面要求:
1. 顶部:搜索框 + "新建 Todo" 按钮
2. 左侧:标签筛选列表
3. 主区域:Todo 卡片列表
4. 每张 Todo 卡片显示:标题、状态、优先级、截止日期、标签、操作按钮
技术约束:
1. React + TypeScript
2. Ant Design 组件库
3. 先用 mock 数据(硬编码在组件里)
4. 不要接任何真实接口
输出要求:
1. 先给组件拆分图(哪些组件,各自的职责)
2. 再输出代码
3. 保持文件结构清晰
接入真实接口 Prompt
在上一步的基础上,把 mock 数据替换成真实接口调用。
已有的 API 规范:
[贴出上面后端接口的 OpenAPI 格式或简要说明]
约束:
1. 使用 axios(项目已有封装在 src/api/client.ts)
2. 统一用 react-query 做接口状态管理
3. loading / error 状态都要处理
4. 不要改页面组件的结构,只改数据来源
先只接入 Todo 列表接口,新建/编辑下一步再做
第六步:测试
很多人一到 AI 编程就跳过测试,这是个大坑。AI 生成的代码错误率不低,没有测试就没有安全网。
手工测试清单(最实用)
请为 Todo 模块生成一份手工测试清单。
覆盖范围:
1. 新增 Todo
2. 编辑 Todo
3. 删除 Todo
4. 切换完成状态
5. 标签绑定
6. 筛选功能
请按以下格式输出每个测试用例:
**测试用例 X**
- 操作步骤:
- 预期结果:
- 需要关注的边界:
自动化测试(接口测试)
请为 Todo CRUD API 生成 pytest 测试用例。
要覆盖的场景:
1. 正常创建 Todo
2. 创建 Todo 时缺少必填字段(应返回 422)
3. 查询不属于自己的 Todo(应返回 404)
4. 软删除后在列表里不可见
5. 更新已完成的 Todo 状态
约束:
1. 使用 pytest + httpx
2. 使用 pytest fixture 管理测试数据
3. 每次测试后清理数据(隔离性)
4. 不要直接写 SQL,使用已有的 service 层
第七步:部署
这是另一个非常适合 AI 的场景,因为部署本身就充满模板化工作。
Docker 部署 Prompt
请为这个 React + FastAPI + PostgreSQL 项目生成最小部署方案。
项目结构:
- /frontend(React 项目,用 Vite 构建)
- /backend(FastAPI 项目)
要求:
1. 使用 Docker Compose
2. 三个容器:frontend, backend, database
3. frontend 用 nginx 托管,反向代理 API 请求到 backend
4. 给出 .env.example 文件(列出所有环境变量)
5. 给出本地启动步骤
6. 不考虑生产级高可用,先能跑起来
输出:
1. docker-compose.yml
2. frontend/Dockerfile
3. backend/Dockerfile
4. nginx/nginx.conf
5. .env.example
6. 启动说明(一页以内)
AI 真正参与完整项目时,最好的分工
| 任务 | 谁来做 |
|---|---|
| 定目标 | 你 |
| 需求澄清 | AI 辅助,你决策 |
| 技术选型 | AI 提供建议,你拍板 |
| 数据库表设计 | AI 出初稿,你 review |
| 接口实现 | AI 生成,你验证 |
| 前端骨架 | AI 生成,你调整 |
| 业务规则 | 你提供,AI 实现 |
| 测试用例 | AI 辅助,你补充 |
| 部署脚本 | AI 生成,你测试 |
| 架构决策 | AI 提供选项,你判断 |
结论:AI 最擅长把"从 0 到 0.7"这段路走得飞快,但从"能跑"到"能长期维护",仍然需要你掌舵。
完整项目里 AI 最容易出问题的地方
问题一:业务规则理解错误
AI 不知道你的特殊规则。你说"取消订单",它不知道"已发货不能取消"。必须在 Prompt 里显式说明。
问题二:模块间接口不一致
AI 分别生成每个模块时,可能用了不同的错误码格式、不同的分页参数名。要在开发前统一规范,并在每个 Prompt 里带上约定。
问题三:越写越乱的数据流
前端越写越复杂时,AI 可能随手在组件里加 state,而不是用统一的状态管理。要明确约束状态管理方式。
问题四:测试总是被跳过
AI 很擅长写代码,但不会主动"提醒你要测试这个"。你需要在每个模块完成后主动说"现在帮我生成这个模块的测试用例"。
一句话总结
AI 最擅长把"从 0 到 0.7"这段路走得飞快,但从"能跑"到"能长期维护",仍然需要你掌舵。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)