【prompt系列-01】我用 AI 写仿美团外卖系统,才搞懂什么是 Prompt
文章目录
- 我用 AI 写仿美团外卖系统,才搞懂什么是 Prompt
-
- 一、故事的开头:一句话,AI 就开始干活了
- 二、当时的我,根本不知道这是 Prompt
- 三、Prompt 到底是什么?(说人话版)
- 四、为什么很多人觉得 AI 不好用?
- 五、我其实不是直接和 Cursor 对话,而是先用 ChatGPT 写 Prompt
- 六、回到仿美团外卖:一个真实案例
- 七、我踩过的几个错误 Prompt
- 八、Prompt 如何一步步变清晰——以商家菜品管理为例
- 九、不同 Prompt,输出差异到底有多大?
- 十、Prompt 在整个开发过程中的作用
- 十一、那个让我真正重视 Prompt 的瞬间
- 十二、从仿京东到图书商城——Prompt 认知的迁移
- 十三、总结:Prompt 就是你给 AI 的说明书
- 十四、下一篇预告
我用 AI 写仿美团外卖系统,才搞懂什么是 Prompt
一次真实开发经历,重新认识 Prompt|Prompt 系列第一篇(叙事篇)
一、故事的开头:一句话,AI 就开始干活了
前段时间,我在直播里做了一件事——用 AI 写一个仿美团外卖系统。不是 demo,也不是小功能,而是一整个系统:用户端、商家端、骑手端、以及后台管理,全要有。说实话,当时也没想太多。打开 Cursor,在对话框里敲了一句,然后回车:
“帮我设计一个仿美团外卖系统,包含用户端、商家端、骑手端。”
接下来发生的事情让我愣了一下——AI 开始疯狂输出:
- 系统要分哪些模块
- 数据库表结构长什么样
- 用户下单到骑手接单的完整流程
- 每个端需要哪些页面
- 甚至连接口该怎么设计都给你列出来了
直播间的弹幕飘过一句:"就这一句话,它就知道要干啥?"我当时也在想这个问题。
更离谱的是,它不光列了功能,还帮你理清了业务逻辑——比如用户下单之后订单状态怎么流转、什么时候通知商家、骑手怎么抢单、超时怎么处理。这些东西我自己都没想到,它先帮你想好了。弹幕又飘过来一句:"这 AI 比产品经理还靠谱。"我笑了一下,但心里知道——这不是 AI 靠谱,是我那句话恰好说对了方向。
后来我才知道,我敲下去的那句话,就叫 Prompt。
【插图1】Cursor 对话截图——一句话生成仿美团外卖系统
建议截图内容:Cursor 中输入 Prompt 后,AI 输出系统设计方案的界面截图
二、当时的我,根本不知道这是 Prompt
说来惭愧,那会儿我根本不知道"Prompt"这个词。我只知道一件事:跟 AI 说话,它就给你干活。说得越清楚,它干得越好。 在开发仿美团外卖系统的过程中,我反复在做一件事——改我说的话。
最开始我说:
“帮我写个外卖系统。”
AI 给了一坨东西,模块很散,逻辑也不通。给的代码有前端有后端,但对不上。表结构也乱七八糟,一个 order 表里塞了二十多个字段,连商家信息都揉在一起。然后我改了一下:
“仿美团外卖,要有用户端、商家端、骑手端,技术栈用 Spring Boot + Vue。”
这回好多了,模块清晰了,技术选型也对了。表结构开始分离了,商家是商家表,骑手是骑手表,不再糊在一起了。但还不够,我又加了一些东西:
“用户端需要有首页、分类、搜索、购物车、下单、支付、订单追踪。商家端需要有菜品管理、订单管理、营业统计。骑手端需要有接单、导航、送达确认。”
这次,AI 的输出几乎可以直接拿来当需求文档用。它甚至给我画了一个简易的页面导航结构,告诉我每个端有哪些页面、页面之间怎么跳转。我当时的感觉是:AI 变聪明了。但后来我才意识到,不是 AI 变聪明了,是我说的话变清楚了。而我反复修改的那些话,就是在优化 Prompt。只不过那时候的我,不叫它 Prompt,我管它叫"提示词"。
三、Prompt 到底是什么?(说人话版)
如果你去搜"Prompt",大概率会看到一堆解释:
- “Prompt 是给大语言模型的指令”
- “Prompt 是人机交互的输入”
- “Prompt Engineering 是一种新兴的工程范式”
看完之后,你大概率一头雾水。所以我用大白话说一下——
Prompt,就是你给 AI 的说明书。 就这么简单。你可以把它想成几个场景:
场景一:给程序员提需求
你是产品经理,对面坐着一个程序员。你跟他说:"帮我做个系统。"他能做出来吗?能。但大概率不是你想要的。你得告诉他:做什么系统、给谁用、有哪些功能、交互怎么走、用什么技术栈。说得越清楚,他做得越对。
Prompt 就是你给 AI 提的需求。
场景二:写需求文档
你写过需求文档吗?PRD 那种。一个好的 PRD,模块清晰、流程完整、边界明确,开发拿到就能干。一个烂的 PRD,三言两语、模棱两可,开发拿到只能猜。
Prompt 就是你给 AI 写的 PRD。
场景三:点外卖写备注
你点外卖的时候,备注栏写过"不要辣"吧?写过"米饭多一点"吧?如果你什么都不写,商家就按默认的来。运气好口味对了,运气不好你不吃香菜结果满盘子都是。如果你写了"不要辣、不要香菜、米饭单独打包、筷子多给一双",商家就知道你要什么。
Prompt 就是你点外卖时写的备注。
场景四:导航输目的地
你开车出门,打开导航。你输入"吃饭的地方",导航大概率不知道你要去哪。你输入"朝阳区三里屯太古里",它立马就给你规划路线了。Prompt 就是你输入的目的地。 越精确,路线越靠谱。
说到底——
Prompt = 你对 AI 说的话 = 你给 AI 的说明书。
你说得越清楚,AI 干得越好。你说得越模糊,AI 就越瞎猜。
四、为什么很多人觉得 AI 不好用?
我见过很多开发者试了一下 ChatGPT 或者 Cursor,然后得出结论:
“AI 写代码不行,写出来的东西不能用。”
我之前也这么想过。我记得有一次让 AI 帮我写一个登录功能,就说了一句"帮我写个登录"。它给了我一段代码,没有参数校验,没有密码加密,没有 token,甚至连数据库查询都是 mock 的。我看了一眼,关掉了对话框,心想:就这?
但后来我发现,不是 AI 不行,是你说的话不行。 来看一个真实的对比。
第一种说法:
“帮我写一个系统。”
AI 收到之后一脸懵——什么系统?给谁用?什么功能?什么技术栈?前端还是后端?要不要数据库?它只能瞎猜,输出的东西自然一团糟。这就好比你走进一家餐馆,跟服务员说:"给我来一份吃的。"服务员能上菜吗?能。但上的大概率不是你想吃的。
第二种说法:
"我要开发一个仿美团外卖系统,使用 Spring Boot + MyBatis-Plus + Vue3 + Element Plus。
系统分为三个端:
- 用户端:首页推荐、商家列表、菜品搜索、购物车、下单支付、订单追踪、评价
- 商家端:店铺管理、菜品管理(增删改查)、订单处理、营业数据统计
- 骑手端:实时接单、订单导航、送达确认、收入统计
请先给出数据库表结构设计,再给出后端模块划分。"
AI 收到之后,输出清清楚楚、条条框框,拿过来稍微改改就能用。同一个 AI,同一个模型,差距在哪? 差距就在你说的那句话——就在你的 Prompt。你以为是 AI 的问题,其实是你的问题;你以为要换个更好的 AI,其实只需要换一种说法。
【插图2】简单 Prompt vs 结构化 Prompt 对比图
建议内容:左边"帮我写个系统"→ 混乱输出;右边结构化 Prompt → 清晰输出。标题:Prompt 决定输出质量
五、我其实不是直接和 Cursor 对话,而是先用 ChatGPT 写 Prompt
很多人看我直播,以为我就是打开 Cursor、敲一句话、然后代码就出来了。其实不是。我的真实流程是这样的:
第一步:先打开 ChatGPT,想清楚要做什么
在动手写代码之前,我会先在 ChatGPT 里跟它聊。不是聊天,而是让它帮我设计 Prompt。你没看错——我用 AI 来写给 AI 的指令。
比如我要做仿美团外卖的订单模块,我不会直接在 Cursor 里说"帮我写订单模块"。我会先在 ChatGPT 里说:
“我要做一个仿美团外卖系统的订单模块。你帮我想一下这个模块需要考虑哪些功能点,我后续要把这些功能点整理成 Prompt,丢给 Cursor 来生成代码。”
ChatGPT 会给我列出来:
- 下单流程(选菜→加购物车→确认订单→选地址→选支付方式→提交)
- 订单状态流转(待支付→已支付→商家接单→骑手接单→配送中→已送达→已完成→已取消)
- 订单超时处理(未支付超时自动取消、配送超时提醒)
- 订单金额计算(菜品金额 + 包装费 + 配送费 - 优惠券 - 满减活动)
- 订单关联关系(和用户、商家、骑手、地址、菜品的关联)
- 退款逻辑(已支付未接单可退、已接单协商退)
这些东西,我自己想的话要半个小时。ChatGPT 两分钟就给我列完了,而且比我想的还全。
第二步:让 ChatGPT 帮我优化 Prompt
有了功能点之后,我会让 ChatGPT 帮我把这些零散的点整理成一段结构化的 Prompt。我会说:
“帮我把刚才梳理的订单模块功能点,整理成一段 Prompt。要求:功能描述清楚、技术栈是 Spring Boot + MyBatis-Plus、要有数据库表设计和接口设计。”
ChatGPT 会输出一段非常工整的 Prompt,层次清晰、逻辑完整。有时候我还会跟它来回几轮,比如:
“配送费的计算规则要加上,按距离阶梯计价。”
“退款流程要细化,区分全额退和部分退。”
“加一个约束:所有金额用 BigDecimal 处理,不能用 double。”
每加一条要求,Prompt 就更完善一点。这个过程,其实就是在打磨需求。
第三步:把打磨好的 Prompt 丢给 Cursor
等 Prompt 打磨得差不多了,我会把它复制到 Cursor 里,回车。Cursor 拿到这段结构化的 Prompt,输出的代码质量就完全不一样了——表结构是分好的,接口是分层的,Service 和 Controller 是解耦的,甚至连异常处理和参数校验都给你加上了。如果我直接在 Cursor 里写"帮我写订单模块",大概率给我一个 Order 类加三个接口就完事了。
同一个 Cursor,同一个模型,差距就在 Prompt。
第四步:Cursor 生成代码
Cursor 不只是生成一个文件。你给它一个好的 Prompt,它会帮你生成一整套代码:
- Entity 实体类
- Mapper 接口和 XML
- Service 层业务逻辑
- Controller 层接口
- DTO 和 VO 对象
- 甚至 SQL 建表语句
我做仿美团外卖系统的时候,一个模块的代码大部分都是 Cursor 生成的。我要做的事情是检查逻辑、调整细节、处理模块之间的衔接。这个效率,传统开发根本比不了。
第五步:拿回 ChatGPT 做 Review
代码生成之后,我不会直接就用。我会把关键代码贴回 ChatGPT,让它帮我检查:
“帮我 review 一下这段订单服务代码,看看有没有逻辑漏洞、安全问题、性能隐患。”
ChatGPT 确实能发现一些问题。比如有一次它告诉我,我的订单金额计算没有加分布式锁,高并发下可能出现超卖;还有一次它发现我的退款逻辑没有校验订单状态,已完成的订单居然也能退。这些问题我自己 review 可能要花很长时间,ChatGPT 几秒钟就指出来了。
总结一下这个流程
ChatGPT 负责思考,Cursor 负责执行。 ChatGPT 擅长的是理解需求、梳理逻辑、设计方案,它是军师;Cursor 擅长的是根据 Prompt 快速生成代码,它是执行者。而连接这两个 AI 的桥梁,就是 Prompt。
你在 ChatGPT 里打磨 Prompt,然后丢给 Cursor 执行,执行完了再拿回 ChatGPT 检查。一个循环下来,代码的质量比你自己写的还稳。我后来做仿京东商城和图书商城,也是这个流程。用得越多,越觉得这个工作方式丝滑。
【插图3】AI 开发工作流
ChatGPT → 设计/优化 Prompt ↓ Cursor → 根据 Prompt 生成代码 ↓ ChatGPT → Review 代码、发现问题 ↓ Cursor → 根据反馈修改代码 ↓ 完成标题:AI 开发工作流——ChatGPT 思考,Cursor 执行
六、回到仿美团外卖:一个真实案例
让我拿仿美团外卖系统的开发过程,给你看看 Prompt 的差距到底有多大。
第一次:随便说一句
我最早在 Cursor 里输入的是:
“帮我写一个外卖系统。”
AI 给了我什么呢?一个简单的 CRUD 示例。一个 Order 表,一个 User 表,一个 Food 表,加起来就几个接口,连购物车都没有,更别说骑手端了。这东西能叫外卖系统?充其量就是一个"食堂点餐小 demo"。
表结构长这样:
CREATE TABLE user (id, username, password, phone);
CREATE TABLE food (id, name, price, description);
CREATE TABLE order (id, user_id, food_id, quantity, total_price, status);
三张表,完事了。没有商家的概念,没有地址的概念,没有骑手的概念。一个 order 直接关联一个 food——那如果我一单点了三个菜呢?没考虑。代码也是一样,Controller 里直接写 SQL,连 Service 层都没有。
第二次:说清楚一点
我意识到不对,重新组织了一下语言:
"我要做一个仿美团外卖的系统,有三个端:
- 用户端:可以浏览商家、搜索菜品、加入购物车、下单支付、查看订单状态
- 商家端:可以管理店铺信息、管理菜品、处理订单
- 骑手端:可以接单、查看配送路线、确认送达
技术栈:Spring Boot + Vue3
数据库:MySQL先帮我设计数据库表结构。"
这次,AI 的输出完全不一样了:
- 给了十几张表:用户表、商家表、菜品表、分类表、购物车表、订单表、订单明细表、骑手表、配送记录表、评价表、地址表……
- 每张表字段清清楚楚,主外键关系也标注好了
- 甚至还给了索引建议
- 订单和订单明细分开了,一对多关系
- 地址表独立出来了,支持多地址
同一个 AI,差距就在那几行字。
后来的开发过程中,我用类似的方式让 AI 帮我做了很多事:设计接口文档、写 Service 层代码、生成前端页面、写测试用例。每次的关键,都是——我怎么跟它说。我说得越清楚、越具体、越有结构,AI 给我的东西就越能直接用。
这就是 Prompt 的力量。不是什么高深的技术,就是把话说清楚。
七、我踩过的几个错误 Prompt
在做仿美团外卖系统的这段时间里,我踩过很多 Prompt 的坑。回头看,每一个坑都是同一个问题——说得不够清楚。我把印象最深的几个错误分享出来,你看看有没有似曾相识的感觉。
错误一:“帮我写外卖系统”
这是我最早犯的错误,一句话扔过去,啥也没说清楚。AI 给出来的东西:
- 前后端混在一起,一个 main 方法里又写路由又写 SQL
- 没有分端的概念,用户和商家用同一个页面
- 数据库就三张表,连基本的业务逻辑都承载不了
- 代码风格像是一个大学课设
为什么会这样?因为"外卖系统"这四个字,对 AI 来说信息量太少了。它不知道你要什么级别的系统——是一个课设 demo,还是一个接近生产的项目?是单端的还是多端的?用什么技术栈?你不说清楚,AI 就按最简单的来。
错误二:“写订单模块”
后来我开始一个模块一个模块地写,对着 Cursor 说"写订单模块"。AI 给了我一个 OrderController + OrderService + OrderMapper,能跑,但极度简陋:
- 没有订单状态流转
- 没有订单金额计算逻辑
- 没有和购物车的关联
- 没有和支付的关联
- 甚至没有订单明细——一个订单只能买一个菜
为什么?因为"订单模块"这四个字,对人类来说很明确,但对 AI 来说太模糊了。你没告诉它订单的生命周期是什么、状态有哪些、金额怎么算、和哪些模块有交互。你以为说了个模块名就够了,但 AI 需要的是模块的全貌。
错误三:“设计数据库”
还有一次,我说"帮我设计外卖系统的数据库"。AI 给了一版设计,但问题很多:
- 所有字段都是 VARCHAR,没有合理的数据类型
- 没有创建时间、更新时间
- 没有逻辑删除字段
- 外键关系标注不清
- 表名不规范,有的用下划线有的用驼峰
- 没有考虑索引
这些问题不是 AI 不会,而是我没要求。我就说了一句"设计数据库",它怎么知道你要不要逻辑删除?怎么知道你要不要时间字段?怎么知道你的命名规范是什么?Prompt 里没提到的东西,AI 就靠猜。而它猜的,大概率不是你想要的。
错误四:“帮我写个页面”
做前端的时候我犯了一样的错。我说"帮我写一个商家列表页面",AI 给了一个页面,但:
- 没有搜索功能
- 没有分类筛选
- 没有分页
- 没有商家评分显示
- 没有配送费和起送价
- 样式像是上世纪的网页
因为我只说了"商家列表",它就只给了一个列表。至于列表里展示什么信息、有什么交互、长什么样子,我一个字没提。你觉得理所当然的东西,AI 不觉得。你得明明白白说出来。
这些错误的共同点
回头看这些错误,本质都是一样的:
- 缺少上下文——没告诉 AI 这个系统的背景和定位
- 缺少细节——只给了大方向,没给具体要求
- 缺少约束——没有限定技术栈、命名规范、设计原则
- 缺少输出要求——没告诉 AI 你希望它输出什么格式、什么粒度
这四个问题,后来我都学会了怎么解决,但那是下一篇要讲的事情。这一篇,我只想让你知道一件事:如果你觉得 AI 给的东西不好,先别急着骂 AI,先回头看看你自己说了什么。
八、Prompt 如何一步步变清晰——以商家菜品管理为例
前面说了一堆错误,你可能会想:那到底怎么改?我拿仿美团外卖系统里的"商家菜品管理"功能举个例子,让你看看一个 Prompt 是怎么从模糊变清晰的。
第一版 Prompt:随口一说
“帮我写商家菜品管理功能。”
AI 的输出:一个 Dish 实体类,字段只有 id、name、price、description;一个 DishController,四个接口:增删改查。没有分类,没有图片,没有上下架,没有排序。这东西能叫菜品管理?顶多叫"菜品的增删改查"。
第二版 Prompt:加了一些细节
"帮我写仿美团外卖系统的商家端菜品管理功能。
菜品属性包括:名称、价格、图片、分类、描述、上下架状态。
需要支持:新增菜品、编辑菜品、删除菜品、上下架切换、按分类查询。
技术栈:Spring Boot + MyBatis-Plus。"
AI 的输出好多了:
- Dish 实体类字段齐全了
- 多了一个 Category 分类表
- 支持上下架状态切换
- 按分类筛选也有了
- 代码分层了,Controller → Service → Mapper
但还有一些问题:图片上传没有处理、菜品规格没有考虑(大份/小份/加料)、没有价格校验(价格不能为负)、批量操作没有(批量上架/下架/删除)。
第三版 Prompt:接近真实需求
"我在做一个仿美团外卖系统,现在需要开发商家端的菜品管理模块。
技术栈:Spring Boot + MyBatis-Plus + Vue3 + Element Plus
功能要求:
- 菜品信息:名称、主图(支持上传)、价格(BigDecimal,不能为负)、分类、描述、上下架状态
- 菜品规格:每个菜品可以有多个规格(如大份/小份),每个规格有独立的价格
- 菜品分类:支持一级分类,商家可以自定义分类
- 菜品操作:新增、编辑、删除(逻辑删除)、上架、下架、批量上下架
- 菜品查询:支持按名称搜索、按分类筛选、按上下架状态筛选、分页查询
- 菜品排序:支持手动拖拽排序
请先设计数据库表结构(包括菜品表、分类表、规格表),再给出后端接口设计,最后给出 Service 层核心代码。
要求:
- 使用 MyBatis-Plus 的逻辑删除和自动填充功能
- 所有金额使用 BigDecimal
- 接口遵循 RESTful 规范
- 返回统一响应格式 R"
AI 这次的输出,几乎可以直接用:三张表设计合理、字段完整、索引到位;接口设计覆盖了所有 CRUD 和状态切换操作;Service 代码有参数校验、有异常处理;逻辑删除和自动填充都用上了;统一响应格式也按要求来了。
三个版本的 Prompt,同一个 AI 模型,输出质量天差地别。
这个进化过程告诉我们什么?Prompt 不是写一次就完事的,它是需要迭代的。 就像写代码一样,第一版能跑就行,第二版优化结构,第三版才是生产级的。Prompt 也一样——第一版让 AI 知道你要什么,第二版告诉它细节,第三版给它约束和标准。每迭代一次,输出质量就上一个台阶。
九、不同 Prompt,输出差异到底有多大?
为了让你直观感受 Prompt 的差距,我再举几个仿美团外卖系统开发中的真实例子。
案例一:用户注册接口
简单 Prompt:
“帮我写个注册接口。”
AI 输出:
@PostMapping("/register")
public String register(String username, String password) {
User user = new User();
user.setUsername(username);
user.setPassword(password);
userMapper.insert(user);
return "success";
}
问题一大堆:密码没加密、没有参数校验、没有重复用户名检测、没有手机号、返回格式不统一、没有异常处理。
结构化 Prompt:
"帮我写仿美团外卖系统的用户注册接口。
要求:
- 注册信息:手机号、密码、验证码
- 手机号格式校验(正则匹配11位手机号)
- 密码使用 BCrypt 加密存储
- 手机号不能重复注册
- 验证码从 Redis 中获取并校验
- 注册成功返回 JWT token
- 使用统一响应格式 R
- 使用 @Validated 做参数校验
技术栈:Spring Boot + MyBatis-Plus + Redis + JWT"
AI 输出: 一套完整的注册逻辑——DTO 参数校验、手机号唯一性校验、Redis 验证码校验、BCrypt 密码加密、JWT 生成、统一异常处理、完整的 Service 层代码。
差距在哪?全在 Prompt 里。
案例二:购物车功能
简单 Prompt:
“帮我写购物车。”
AI 输出: 一个 Cart 表,就两个字段:user_id 和 food_id。一个 add 接口,一个 list 接口,完事。没有数量的概念,没有商家隔离(不同商家的菜品在一个购物车里),没有合计金额,没有清空操作。
结构化 Prompt:
"帮我开发仿美团外卖用户端的购物车模块。
业务规则:
- 每个商家的购物车独立(切换商家时清空当前购物车,或提示用户)
- 同一菜品同一规格可叠加数量
- 不同规格视为不同条目
- 购物车要实时计算合计金额(菜品小计 + 包装费)
- 支持修改数量、删除单个菜品、清空购物车
- 购物车数据存 Redis(用户未下单前保留)
需要的接口:
- 添加菜品到购物车
- 修改购物车中菜品数量
- 删除购物车中单个菜品
- 清空购物车
- 查看当前购物车(含合计金额)
技术栈:Spring Boot + Redis
数据结构建议使用 Redis Hash"
AI 输出: 完整的购物车方案——Redis Hash 存储设计、商家隔离逻辑、数量叠加、规格区分、金额实时计算、五个接口的完整实现。
同一个 AI,差距肉眼可见。
案例三:订单列表页面
简单 Prompt:
“帮我写订单列表页面。”
AI 输出: 一个 el-table,几列数据。没有筛选、没有分页、没有订单状态标签、没有操作按钮,像一个学生作业。
结构化 Prompt:
"帮我写仿美团外卖用户端的订单列表页面。
页面要求:
- 使用 Vue3 + Element Plus
- 顶部有 Tab 切换:全部、待支付、待接单、配送中、已完成、已取消
- 每个订单卡片显示:商家名称、商家logo、菜品摘要(最多显示2个+剩余数量)、订单金额、下单时间、订单状态
- 订单状态用不同颜色的标签区分
- 每个订单有操作按钮:待支付→去支付、配送中→查看配送、已完成→再来一单、已完成→去评价
- 列表支持下拉加载更多(移动端风格)
- 空状态显示"暂无订单"插图
请给出完整的 Vue 组件代码。"
AI 输出: 一个完整的、接近美团风格的订单列表组件——Tab 切换、卡片布局、状态标签、操作按钮、下拉加载、空状态处理,全都有。
你看,AI 的能力一直在那里。你给它什么质量的 Prompt,它就给你什么质量的输出。
十、Prompt 在整个开发过程中的作用
做完仿美团外卖系统之后,我回头看了一下整个开发过程,发现了一件有意思的事:整个开发流程的每一步,都是从一段 Prompt 开始的。 让我带你走一遍。
第一步:竞品分析——Prompt 帮我拆解美团
在动手写代码之前,我需要搞清楚美团外卖到底有哪些功能。传统做法是什么?下载 App,一个页面一个页面地截图,自己整理功能列表。我的做法是,在 ChatGPT 里写了一段 Prompt:
“请帮我分析美团外卖 App 的核心功能模块,分为用户端、商家端、骑手端三个维度,列出每个端的一级功能和二级功能。”
两分钟,ChatGPT 给了我一份清晰的功能清单。从首页推荐到搜索筛选,从购物车到支付,从商家接单到骑手配送,全都列好了。我对着这份清单做了一些裁剪(毕竟是仿写,不需要做到 100%),就拿到了项目的功能范围。传统竞品分析要一两天,Prompt 帮我两分钟搞定。
第二步:产品设计——Prompt 帮我拆模块
功能范围确定后,我需要把它拆成具体的模块。我又写了一段 Prompt:
"基于上面的功能分析,帮我把用户端的功能拆成以下模块,并列出每个模块的核心功能点和页面列表:
- 用户模块(注册、登录、个人信息)
- 首页模块(推荐、分类、搜索)
- 商家模块(商家列表、商家详情、菜品列表)
- 购物车模块(添加、修改、删除、结算)
- 订单模块(下单、支付、订单列表、订单详情、订单追踪)
- 评价模块(评价列表、发表评价)
- 地址模块(地址列表、新增地址、编辑地址)"
ChatGPT 帮我把每个模块细化到了页面级别,包括每个页面需要哪些交互元素、调用哪些接口。这份东西拿出来,跟一个初级产品经理写的 PRD 差不多了。
第三步:技术设计——Prompt 帮我设计架构
模块拆好了,下一步是技术方案:
"我要基于以上模块设计,做一个仿美团外卖系统。
技术栈:Spring Boot 2.7 + MyBatis-Plus + MySQL + Redis + Vue3 + Element Plus
请帮我设计:
- 后端项目结构(包名规范)
- 数据库表结构(所有表,包含字段、类型、注释)
- 通用组件设计(统一响应、统一异常处理、JWT鉴权、Redis 配置)"
AI 给了完整的技术方案。项目结构分 controller、service、mapper、entity、dto、vo、config、common、utils;数据库十几张表设计合理;通用组件该有的都有。
第四步:开发编码——Prompt 驱动 Cursor 生成代码
这一步我已经讲过了。把在 ChatGPT 里打磨好的 Prompt 丢给 Cursor,一个模块一个模块地生成代码。每次生成代码,我都会在 Prompt 里明确:
- 这个模块的业务逻辑
- 关联的其他模块
- 技术要求和约束
- 需要生成哪些文件
第五步:测试验证——Prompt 帮我写测试
代码写完了,测试也不能少:
"帮我为订单服务写单元测试。
测试框架:JUnit5 + Mockito
需要覆盖的场景:
- 正常下单流程
- 库存不足时下单失败
- 订单状态非法流转(如已完成→待支付)
- 订单金额计算准确性
- 超时未支付自动取消"
AI 直接给了一套测试代码。测试用例覆盖了核心场景,MockBean 注入、Assertions 断言,写得比我自己写的还规范。
你发现规律了吗?
竞品分析——Prompt。产品设计——Prompt。技术设计——Prompt。开发——Prompt。测试——Prompt。 每一步的起点,都是一段 Prompt。
传统开发流程里,不同的阶段需要不同的人来推动:产品经理推需求、架构师推设计、开发推代码、测试推验证。AI 开发流程里,推动每一步的,是开发者自己写的 Prompt。
Prompt 不是一个环节,它是贯穿整个研发流程的主线。以前,开发者只需要会写代码。现在,开发者还需要会写 Prompt——因为 Prompt 决定了 AI 帮你做什么、做到什么程度、做成什么样子。
【插图4】传统研发流程 vs AI 研发流程对比图
建议内容:
传统流程(上方):
产品经理(PRD)→ 架构师(技术方案)→ 开发(写代码)→ 测试(写用例)→ 运维(部署)AI 流程(下方):
开发者(Prompt)→ AI(竞品分析)→ AI(产品设计)→ AI(技术设计)→ Cursor(代码)→ AI(测试)标题:Prompt 串联研发流程
十一、那个让我真正重视 Prompt 的瞬间
说一个让我印象很深的瞬间。
在做仿美团外卖系统的时候,有一次我需要让 AI 帮我写订单状态流转的逻辑——用户下单之后,订单要经历"待支付→已支付→商家接单→骑手接单→配送中→已送达→已完成"这样一系列状态变化。
第一次,我跟 AI 说:
“帮我写订单状态管理。”
AI 给了一个简单的枚举类和一个 update 方法。能用,但很粗糙,没有状态校验,没有异常处理,也没有考虑并发。代码大概长这样:
public void updateStatus(Long orderId, Integer status) {
Order order = orderMapper.selectById(orderId);
order.setStatus(status);
orderMapper.updateById(order);
}
就这?任何状态都能改成任何状态?已完成的订单还能改回待支付?这不是 bug 制造机吗?
第二次,我重新组织了语言:
"订单状态包括:待支付、已支付、商家已接单、骑手已接单、配送中、已送达、已完成、已取消。
要求:
- 状态只能按顺序流转,不能跳跃
- 已取消是终态,任何状态都可以取消(但配送中和之后的状态取消需要走退款)
- 已完成是终态,不能再变更
- 状态变更需要记录日志(包含操作人、操作时间、原状态、新状态)
- 需要考虑并发安全(使用乐观锁)
- 不合法的状态流转要抛出业务异常
请用状态机模式实现。"
这次,AI 给了一套完整的方案:
- 状态枚举类,定义了所有状态和允许的转移关系
- 状态机实现,用一个 Map 存储合法的状态转移
- 乐观锁实现,用 version 字段防止并发冲突
- 操作日志记录,每次状态变更自动写入日志表
- 业务异常定义,非法状态流转时抛出自定义异常
我当时的第一反应是:哇,AI 变聪明了。 但冷静下来想了想,不对——AI 的模型没变,版本没升级。变的是我的 Prompt。 我从"帮我写订单状态管理",变成了一段有上下文、有约束、有要求、有边界条件的结构化描述。AI 没有变聪明,是我学会了怎么跟它说话。
那一刻,我第一次真正意识到:Prompt 比 AI 本身更重要。
因为 AI 的能力是固定的,但 Prompt 决定了你能调动多少能力。就像一辆车,发动机是固定的,但你踩油门的方式决定了它跑多快。Prompt,就是油门。你踩一半油门,它就跑一半速度;你把油门踩到底,它就给你飞起来。而大多数人用 AI,油门只踩了 10%。
十二、从仿京东到图书商城——Prompt 认知的迁移
做完仿美团外卖系统之后,我又接着做了两个项目:仿京东商城和图书商城。有意思的是,虽然三个项目的业务完全不同,但我的开发方式是一模一样的:
- 先在 ChatGPT 里梳理需求、设计 Prompt
- 把 Prompt 丢给 Cursor 生成代码
- 拿代码回 ChatGPT review
- 根据反馈修改
而且,因为做仿美团外卖的时候积累了经验,做后面两个项目的效率明显更高了。不是因为我写代码更快了,是因为我写 Prompt 更好了。
做仿京东商城的时候,我一开始就知道要把 Prompt 写清楚。商品模块,我直接告诉 AI:
“仿京东商城的商品模块。商品有 SPU 和 SKU 的概念。SPU 是商品,SKU 是具体规格。一个商品可以有多个规格组合(如颜色+尺码)。需要支持规格选择器、库存管理、价格策略。”
AI 一次性就给了一套合理的方案。如果我只说"帮我写商品模块",它大概率会给一个没有 SKU 概念的简化版。
做图书商城的时候更快了。图书商城比外卖和京东都简单,但我依然用结构化 Prompt 来驱动开发。连图书的分类体系、搜索过滤、购物流程,都是 Prompt 一步到位的。
三个项目做下来,我最大的感受是:Prompt 的认知是可以迁移的。 你在一个项目上学会了怎么写好 Prompt,到了另一个项目,同样的思路照搬就行。因为底层逻辑是一样的——把需求说清楚、把约束讲明白、把输出格式定好。不管你做外卖系统、电商系统、还是其他任何系统,Prompt 的核心就一件事:让 AI 明确知道你要什么。
十三、总结:Prompt 就是你给 AI 的说明书
回顾这段时间用 AI 开发仿美团外卖系统、仿京东商城、图书商城的经历,我最大的感受就一句话:
AI 好不好用,80% 取决于你怎么跟它说话。
很多人觉得 AI 不行,其实是 Prompt 不行。很多人觉得 AI 变聪明了,其实是 Prompt 写清楚了。很多人觉得 Cursor 不如 ChatGPT,或者 ChatGPT 不如 Claude,其实工具都差不多,差距在于你给它的 Prompt。
Prompt 不是什么高深的技术。它就是:
- 你给 AI 的说明书
- 你对 AI 提的需求
- 你跟 AI 说的话
但就是这么简单的东西,很多人忽略了它。我以前也忽略,以为关键是选对模型、选对工具、学对框架。后来才发现,工具都一样,差距在于你怎么用。而怎么用,就体现在 Prompt 上。
这段时间的开发经历让我明白了几件事:
第一,Prompt 不是一次性的,它需要迭代。 第一版 Prompt 往往是粗糙的,你需要根据 AI 的输出不断优化、补充、细化。这个过程就像写代码一样,需要反复打磨。
第二,ChatGPT 和 Cursor 各有所长。 ChatGPT 擅长思考和规划,适合设计 Prompt、review 代码;Cursor 擅长执行,适合根据 Prompt 生成代码。把它们组合起来,效率远超单独使用。
第三,Prompt 串联了整个研发流程。 从竞品分析到产品设计,从技术方案到代码实现,从测试到 review,每一步的起点都是 Prompt。它不是一个工具,是贯穿整个开发过程的主线。
第四,Prompt 的认知可以迁移。 你在一个项目上学会了写好 Prompt 的方法,到了另一个项目照样管用。这是一项通用技能。
如果你也在用 AI 辅助开发,不管是 ChatGPT、Cursor、Copilot 还是其他什么工具,我建议你认真对待你输入的每一句话。因为那句话,就是 Prompt。
它决定了 AI 给你的一切。
【插图5】Prompt 概念总结图
建议内容:
中心:Prompt = 你给 AI 的说明书
四个方向:
- 上:需求描述(告诉 AI 做什么)
- 右:上下文(告诉 AI 背景是什么)
- 下:约束条件(告诉 AI 限制是什么)
- 左:输出要求(告诉 AI 给什么格式)
底部一行字:说得越清楚,AI 越好用
十四、下一篇预告
这篇文章,我讲了什么是 Prompt,以及它为什么重要。我用仿美团外卖系统的真实开发经历,让你看到了 Prompt 的力量:
- 同一个 AI,不同的 Prompt,输出天差地别
- Prompt 不是一次性的,需要迭代优化
- ChatGPT 设计 Prompt,Cursor 执行代码,两者配合是最佳实践
- Prompt 串联了从竞品分析到测试的整个研发流程
但我没有讲怎么写好一个 Prompt。因为这是一个大话题,值得单独用一篇文章来聊。
下一篇,我会分享:
- 一个好的 Prompt 到底长什么样?
- 有没有固定的结构和套路?
- 怎么从"随便说一句"进化到"结构化 Prompt"?
- 我在实际开发中总结的 Prompt 写法
如果你对 AI 辅助开发感兴趣,或者也在用 Cursor 写代码,下一篇应该会对你很有帮助。
我们下篇见。
Prompt 系列第一篇完。
下一篇:《一个好的 Prompt 怎么写?》
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)