AI Coding 实测:我用6种不同Prompt结构写同一个功能,差距有多大
AI代码生成工具现在遍地都是,但大多数人的用法其实只发挥了20%的潜力。过去两周我做了一个对照实验:用Cursor和Claude,对同一个”用户订阅管理API”功能,用6种不同的Prompt结构去写,看结果差距到底有多大。
结论先说:好的Prompt和随便写两句,代码质量能差3倍以上。不是你用的AI不行,是你的提问方式有问题。
实验设置
功能需求:用Node.js写一个REST API,实现用户订阅的创建、查询、取消,集成Stripe支付回调,数据存MongoDB。不算复杂,但涉及支付、数据库、错误处理三个关键环节。
6种Prompt结构:
- 一句话型:”写一个用户订阅管理API”
- 功能列表型:列出功能点要求
- 角色设定型:”你是一个资深后端工程师”开头
- 上下文+约束型:提供完整上下文和技术约束
- 示例驱动型:给一个已有代码示例,让AI照此风格写
- 迭代精炼型:先写框架再逐块填充
所有测试在相同模型(Claude Sonnet)下运行,控制变量。
结果总览
一句话型:生成时间最快(8秒),但代码质量最差。没有错误处理,没有输入验证,Stripe回调直接吞异常,连日志都没有。跑一遍就得改半小时。
功能列表型:比一句话好一点,至少功能点都覆盖了。但代码组织混乱,路由和业务逻辑混在一起,MongoDB连接写死在代码里。能用,但不敢上线。
角色设定型:意外地效果不错。加了角色设定后,AI自动补了很多最佳实践——用了依赖注入模式、加了中间件处理错误、日志结构化输出。说明角色设定激活了模型训练时见过的”高级模式”。
上下文+约束型:这一组效果最好。我在Prompt里写了技术栈版本(Node 20、MongoDB 7、Stripe SDK 2024)、项目结构要求、安全约束、性能指标。生成的代码几乎可以直接用,只有两个小问题:Stripe webhook签名验证默认用的宽松模式,改成了strict;MongoDB连接池大小没按我要求的配,需要手动调一下。
示例驱动型:如果已有的代码风格好,这个方法也很强。我给了项目里另一个API模块的代码做参考,AI输出的风格完全一致,变量命名、错误处理模式、注释风格全都对上了。对维护老项目特别有用。
迭代精炼型:逐块写的方式质量也不错,但效率太低。同样的功能分了5轮对话,总耗时是上下文约束型的3倍。好处是每块都能深入调整,适合复杂场景。
具体差距数据
从几个维度量化对比:
- 代码行数:一句话型产出230行,上下文约束型产出420行。但上下文约束型的代码里注释和空行更多,有效逻辑量其实差不多。关键差异在结构完整性。
- 错误处理覆盖率:一句话型覆盖了3个异常点(try-catch了3处),上下文约束型覆盖了17个。差距5倍。这是最要命的——没写错误处理的代码,上线就是事故。
- 安全漏洞:一句话型有4个明显问题(没做输入验证、Stripe key硬编码、没有rate limiting、MongoDB注入风险)。上下文约束型0个,因为我在Prompt里写了安全要求。
- 可维护性评分:让另一个开发者(不看Prompt方式)盲评代码质量,满分10分。一句话型3分,上下文约束型8.5分。
我现在的Prompt模板
经过这轮测试,我现在写代码的Prompt长这样:
## 技术背景
- 语言/框架:[Node.js 20 + Express 4]
- 数据库:[MongoDB 7, mongoose 8]
- 外部服务:[Stripe API 2024-11]
- 部署环境:[Docker + AWS ECS]
## 功能要求
[逐条列出功能点]
## 约束条件
- 安全:输入验证、SQL注入防护、API key不硬编码
- 性能:响应时间<200ms P95
- 可维护:分层结构(controller/service/repository)
- 错误处理:所有外部调用必须有错误处理和日志
## 输出要求
- 输出完整代码文件,不省略
- 添加必要的中文注释
- 不生成测试代码
这套模板不是万能的,但对付80%的日常开发场景足够了。用之前评估一下复杂度——简单工具函数不用这么复杂,核心业务逻辑值得花时间写好Prompt。
据GitHub 2025 Octoverse报告,使用AI辅助开发的开发者中,只有23%的人会花时间优化Prompt。剩下的77%就是一句话型用户。这个差距,就是代码质量的差距。
花5分钟写Prompt,省50分钟改Bug。这笔账,自己算。
