不知道你有没有过这种经历——同样是打开 Cursor 或者 Claude,别人一个小时搞定一个带数据库的完整功能,你折腾一下午还在跟 AI 来回拉扯:"不是这个意思""我说的是那个需求""你怎么又改了别的地方"。
我早期用 AI 编程的时候,也是这种状态。后来跟几个重度使用 AI 编程的朋友聊了一圈,又翻了大量开源项目和 prompt 库,才慢慢摸清一个规律:用不好 AI 编程工具,九成问题出在提示词,而不是出在工具本身。工具只是个执行者,提示词才是你给这个执行者画的地图。地图画得模糊,执行者跑得再快也会跑偏。
这篇文章我把这两年沉淀下来、实测最高频的 10 个 AI 编程提示词一次性整理出来。每个提示词都会拆解"为什么这么写""背后的原理是什么""实际用起来效果怎么样",最后再聊聊那些提示词再怎么写也绕不开的环境坑——毕竟 Claude Code 装不上、Cursor 一打开全是英文这些事,真能让再好的提示词直接报废。
1. 先搞清楚一件事:提示词为什么能决定 AI 编程的成败
1.1 大多数人用 AI 编程的典型姿势,和它为什么低效
先还原一个最常见的场景。
你在 Cursor 的对话框里敲下一句:"帮我写一个用户登录功能。"
然后 AI 噼里啪啦给你生成了一堆代码。看起来挺像回事,但你往项目里一贴,发现它用的是 Flask,你的项目是 Django;它给你写了个邮箱登录,你的业务要求是手机号验证码;它把密码明文存了,你们安全评审根本过不了。
于是你开始第二轮对话:"不是这个框架,重写。""密码要加密。""不是邮箱,是手机号。"五轮对话之后,你比自己去写还累。
这个场景里问题出在哪?不是 AI 笨,是你给的约束太少了。一句话需求丢给 AI,AI 能做的只有猜。它猜了一个可能性最大的组合——Flask、邮箱、简单逻辑,然后赌你刚好就是这个需求。大部分时候赌不中,于是来回拉扯。
我后来想明白一个类比:跟 AI 提需求,就像跟一个特别能干但完全不了解你项目的实习生交代工作。你说"把用户登录做了",他当然能做,但他不知道你的技术栈、不知道你的表结构、不知道你的安全规范,做出来的东西当然大概率不是你要的。但如果你把项目背景、技术栈、验收标准全交代清楚,这个"实习生"能发挥出来的战斗力是惊人的。
1.2 高质量提示词的四个支柱:角色、上下文、约束、验收
我在实际使用中总结了一个框架,我管它叫"提示词四支柱"。任何一条有效的编程提示词,都应该尽量覆盖这四个维度:
| 支柱 | 作用 | 缺失后果 |
|---|---|---|
| 角色 | 告诉 AI 以什么身份/视角来回答 | 答案泛泛而谈,不贴场景 |
| 上下文 | 提供项目背景、技术栈、已有代码结构 | AI 盲猜技术选型,方向跑偏 |
| 约束 | 明确边界:不能做什么、必须用什么、优先级是什么 | 生成越权代码,引入不必要依赖 |
| 验收标准 | 说清楚"什么样算完成" | 无法判断输出质量,反复返工 |
比如同样一个需求,拆解成四支柱的写法是这样的:
你是一名熟悉 Django 和 MySQL 的高级后端工程师(角色)。我们项目用的是 Django 4.2 + MySQL 8.0,用户表已经建好,字段包括 phone、password_hash、created_at(上下文)。请实现一个手机号+密码的登录接口,密码必须用 pbkdf2 加密校验,不要引入新的第三方库,不要改动现有表结构(约束)。输出完整代码、URL 配置和在 Django shell 里的验证步骤,并说明这个实现的认证流程(验收标准)。
这种提示词丢给 Claude 或者 Cursor,基本一次就能出能用的东西。因为 AI 不需要猜了,你把它能猜的变量全锁死了。
1.3 提示词不是越复杂越好,关键在信息密度
有人看完四支柱,转头写了个五百字的小作文提示词,把项目从头到尾描述了一遍,然后问 AI"帮我重构一下"。这种提示词效果也很差。
为什么?因为信息密度太低了。五百字里全是"我们的项目是一个帮助用户管理任务的平台,可以创建任务、编辑任务、删除任务、标记完成,非常注重用户体验和界面美观"这种空话,真正有用的技术约束、代码位置、改动目标一个没提。AI 读完只觉得信息量很大,但不知道该往哪使劲。
好的提示词应该是"短而密"的——每句话都在传递有效约束。技术栈、文件路径、函数名、不可触碰的区域、明确的输出格式,这些才是 AI 真正需要的"抓手"。
后面这 10 个提示词,全都是按这个思路设计的。
2. 四个核心开发提示词:从"一句话需求"到"可运行代码"
2.1 提示词一:先给方案,再写代码
这个是所有提示词里我最常用、也最推荐新手先养成习惯的一条。
提示词模板:
我有一个需求:[描述需求]。先不要写代码。请先给我一份实现方案,包括: 1. 技术选型建议(结合我的技术栈:[你的技术栈]) 2. 涉及的文件/模块清单 3. 数据流和接口设计 4. 实现顺序建议 5. 潜在风险点 方案确认后,我再让你逐步实现。为什么这样设计:
大多数人的习惯是一上来就让 AI 写代码,这其实跳过了一个最关键的信息确认环节。AI 写的代码基于它对需求的理解,而需求理解错了,代码写得再快也是错的。
"先方案后代码"的核心逻辑是把需求确认环节前置。AI 用几百字把实现方案列出来,你只需要花两分钟扫一遍,就能立刻发现它有没有理解偏差。有偏差就直接在方案层面纠正,比在代码层面推翻重来要高效得多。
实测效果:
我用一个实际需求演示一下输出效果——假设我要给项目加一个"导出 Excel 报表"功能。
AI 输出的方案通常是这样的结构:推荐用 openpyxl 还是 xlsxwriter(对比两者优劣势)、新增哪几个文件(导出服务、路由、前端按钮)、数据流是"前端请求→后端查询→生成文件→返回下载链接"、实现顺序是先封装查询再写导出逻辑、风险点是数据量大时内存占用过高、建议分批查询。
这套方案里如果还有不对的地方——比如项目禁止引入新依赖、或者导出需要走异步任务队列——我当场就能指出来。AI 重新出方案,一分钟不到。确认了再动手,后面代码基本不会跑偏。
2.2 提示词二:带约束的代码生成,把"不要做什么"说清楚
提示词模板:
在项目 [项目名] 中,请实现 [功能描述]。 技术栈约束: - 后端:[框架版本] - 前端:[框架版本] - 数据库操作:必须使用 [ORM/原生SQL],不要引入新的数据库依赖 - 样式方案:[CSS方案],不要引入 UI 组件库 代码要求: - 遵循项目现有的 [PEP8 / ESLint / Prettier] 代码风格 - 不要改动 [禁止触碰的文件/模块] - 错误处理必须覆盖 [超时/空数据/权限不足] 三类异常 - 关键逻辑需要写注释,说明"为什么这么写" 完成后,列出你改动和新增的所有文件。为什么"约束"比"需求"更重要:
这个提示词的核心不是"做什么",而是"不做什么"。AI 生成代码有一个天然倾向——用最流行的方案解决你的问题。但最流行的方案未必是你项目里最合适的方案。
你的项目可能用了旧版框架,AI 用的是新版语法;你的项目可能统一用某个 UI 库,AI 顺手引入了一个新依赖;你的项目有代码规范,AI 生成的东西全是不合规范的写法。一条约束写清楚,能堵住大部分这类问题。
实测翻车案例:
我之前有个项目用的是 Python 3.8 + 旧版 FastAPI,没写的时候 AI 给我生成了list[str]这种类型注解。Python 3.8 里这是能跑的,但配合旧版 Pydantic 就炸了。后来我在提示词里明确加了"Python 3.8 兼容,禁止使用 3.9+ 语法特性",这类问题再没出现过。
约束写在前面,比报错了再修省一百倍时间。
2.3 提示词三:让 AI 解释代码,而不是只给代码
提示词模板:
请实现 [功能],并在每段关键逻辑旁用注释解释: 1. 这段代码在解决什么问题 2. 为什么用这种方式而不是其他方式 3. 如果后续要扩展 [某个方向],应该改哪里 注释用中文,逻辑部分代码风格保持项目现有约定。为什么要这样做:
很多人拿到 AI 生成的代码直接贴进项目里,跑通了就算完事。但代码越复杂,这个习惯的隐患越大——你没理解的代码,你维护不了。
特别是 AI 写的代码里经常有一些"看起来很奇怪"的写法,比如某个边界条件处理、某个数据结构的巧妙运用。如果你不理解它为什么这么写,后期改需求时很容易把这些关键逻辑误删,或者改出一个隐蔽的 bug。
要求 AI 解释逻辑,其实是在逼它把代码设计思路摊开给你看。你理解了,代码才真正变成"你的"代码。
实际使用技巧:
这个提示词特别适合用在复杂算法、异步逻辑、状态管理这类难啃的代码上。比如我让 AI 写一个并发限流器,它输出的时候自己解释了一堆关于令牌桶算法为什么选择这种实现方式、临界区为什么这么处理的内容,我读完之后不仅代码能跑了,整个人对限流器的理解也清晰了很多。
2.4 提示词四:多文件改动前,先让它列一份"影响面清单"
提示词模板:
我准备做以下改动:[描述改动内容]。 请先做影响面分析,不要直接改代码: 1. 这个改动会涉及哪些文件?每个文件的改动点是什么? 2. 有没有被现有功能依赖的地方?会不会破坏已有功能? 3. 数据模型/接口协议有没有变化?需要做兼容处理吗? 4. 改动的风险等级评估,说明理由。 5. 如果分步骤实施,建议的顺序是什么? 确认清单后再开始修改。为什么这个提示词能救大命:
改代码最怕什么?不是改不动,而是改了 A,炸了 B,B 还是三天后才被发现。
特别是有一定规模的项目,模块之间的隐式依赖非常常见。你以为只是改一个工具函数的实现逻辑,结果这个函数被十几个地方调用,调用方对返回值的行为假设各不相同,你的改动直接引起了连锁故障。
要求 AI 先做影响面分析,就是在真正动手之前,先让它把"这一刀下去会切到哪些神经"摸清楚。这个时候 AI 的大局观反而比人强——它能记住项目中大部分文件的用途和关联关系,人反而容易陷入局部视角。
实测效果:
我有一次要改一个用户权限校验的公共函数,AI 列出的影响面里包括了一个我完全没想到的模块——消息通知服务,原来它也在调用这个函数做操作者身份校验。如果不是提前看到了影响面清单,我改完之后消息通知肯定会出问题。这个提示词值得每次改动前都用。
3. 三个调试与重构提示词:从"反复试错"到"精准打击"
3.1 提示词五:把报错贴给它之前,先要求它按"假设-验证"来排查
这一个是我调试代码时固定会用到的"规范化问法"。
提示词模板:
我在运行 [功能/接口] 时遇到以下错误: [贴入完整报错堆栈] 项目环境:操作系统 [Win/macOS/Linux]、Python/Node 版本 [x.x]、相关依赖版本 [关键依赖列表] 我尝试过:[简单描述已做的排查动作] 请按以下格式输出排查结果: 1. 对根因的前三个假设,按可能性从高到低排列 2. 每个假设对应的验证方法(不要直接让我改代码,先告诉我如何确认) 3. 确定根因后的修复方案 4. 如何避免同类问题再次发生 注意:不要一次给多个假设下的修复方案,等我验证后再继续。核心原理:
很多人调试时习惯把报错一贴,然后加一句"怎么解决",AI 立刻开始输出修复代码。这个流程有个大问题——AI 给的修复代码假设了一个根因,但这个假设可能错了,你把代码一改,报错变了,再贴回去,AI 再给一个修复方案,再改……陷入死循环。
这个提示词强制 AI 把排查过程拉长,先给假设、再给验证方法。验证方法通常很简单,可能是打印某个变量、检查某个配置项、查看某个文件内容。你花两分钟验证完,再告诉 AI "假设一成立/不成立",AI 就能带着更准确的信息进入修复阶段。
为什么我把这个提示词分类为"调试心法"而不是"调试技巧":
因为它改变的底层逻辑,不是让 AI 更快给出答案,而是让 AI 和你一起走一遍"提出假设→验证→得出结论"的科学排查链路。AI 在推理方面的最大优势是能同时生成大量候选假设,而你的优势是能快速验证这些假设是否正确——两者配合,排查效率远超单打独斗。
3.2 提示词六:重构提示词,先立规则再动手
提示词模板:
请对我的 [文件/函数/模块] 做重构,目标是 [提升可读性/优化性能/解耦],但是必须遵守以下约束: 1. 保持所有对外接口签名不变,不允许调用方感知到变化 2. 保持现有单元测试全部通过 3. 改动范围只允许在 [文件名] 内,不允许编辑其他文件 4. 优先提取重复逻辑为私有方法,但不要过度设计 5. 重构后提供一份"改动说明表":改动位置、改前代码、改后代码、改动理由 我的当前代码: [粘贴代码或指明文件路径]重构最大的坑是什么:
不是改不好,是改着改着把功能改没了。
AI 重构的天然风险是"自由发挥过度"。它可能不只优化你要求优化逻辑,还顺手改了变量命名、调整了函数职责、优化了模块依赖——这些改动叠加在一起,你根本不知道是哪一步把功能弄坏的。
用这个提示词,核心是用约束把 AI 的改动边界焊死:接口不能变、测试必须过、范围只在指定文件。三重保险,让 AI 只能在有限空间里做手术,而非全身整容。
实测中的使用心得:
"改动说明表"这个要求是这条提示词的精华所在。AI 重构完之后,你拿到一张表,里面清楚写着每一处改动的理由。审查代码的时候不需要重新 diff 全部内容,只看这张表就能判断哪些改动是合理的、哪些是过度设计。有一次 AI 在表里写"将嵌套循环提取为独立函数,原因是提高可读性",但我发现这个函数在整个模块里只被调用一次,而且提取之后参数传递反而更繁琐——这种改动就是典型的"为了重构而重构",直接驳回。
3.3 提示词七:测试代码生成,把"边界条件"交给 AI
提示词模板:
为以下函数编写单元测试: [粘贴函数代码] 测试要求: 1. 覆盖正常路径、边界条件、异常输入三类场景 2. 重点测这些边界:[根据业务补充,如"空列表""最大长度""null值"] 3. 用项目现有的测试框架:[pytest / Jest / JUnit],遵守现有命名规范 4. 对每个测试用例,用一行注释说明它在验证什么 5. 禁止修改被测函数源码,如果发现函数本身有 bug,在测试中标注出来并在最后说明 请输出完整测试代码,并说明测试覆盖了哪些分支。为什么 AI 是写测试的好手:
人对自己的代码有"路径依赖"——你会不自觉地按自己写的逻辑去构造测试用例,测来测去都在验证"代码按预期工作"。AI 没有这个心理包袱,它读代码的视角更像是黑盒测试工程师,更容易想到你没想到的边界样例。
比如你写了个字符串截断函数,你只测了正常长度和中长字符串。AI 测的是空字符串、刚好等于截断长度的字符串、超长字符串、含有中英文混合的字符串……这类"极端但真实"的输入很可能恰好就是线上用户会遇到的。
核心使用技巧:
提示词里一定要加"发现函数本身有 bug,在测试中标注出来"这一条。我遇到过好几次这种情况——测试用例写到一半,AI 发现被测代码在某个边界条件下逻辑不对。它会把这个问题标注出来,这等于免费送你一个代码审查。
4. 三个专项提示词:全栈功能、数据库设计、代码审查一网打尽
4.1 提示词八:全栈功能一次性交付,前后端一次到位
提示词模板:
请完整实现一个 [功能名称] 功能,涉及前端、后端和数据库。 需求描述:[详细描述功能行为] 技术栈: - 前端:[框架],使用 [UI组件方案],页面文件放 [目录] - 后端:[框架],API 遵循 [REST/GraphQL] 规范,入口文件在 [目录] - 数据库:[数据库类型],使用 [ORM],模型定义在 [目录] 请你按以下顺序输出: 1. 数据库模型定义(含字段说明和索引设计) 2. API 接口定义(含请求/响应示例) 3. 后端实现代码(含异常处理和参数校验) 4. 前端页面实现(含与 API 的交互逻辑) 5. 本地验证步骤 注意:所有代码必须与现有项目风格一致,新增依赖需单独说明。这个提示词为什么设计成"五段式输出":
全栈功能是 AI 编程最容易翻车的场景之一,因为信息量太大了——数据库模型、接口设计、前端交互、错误处理,任何一个环节的理解偏差都会导致返工。
所以我把它拆成按依赖顺序输出的五个阶段:先数据模型,再接口,再后端,再前端,最后验证步骤。每个阶段建立在前一个阶段的输出之上,AI 不需要在同一时刻把一切想清楚,而是像流水线一样逐层推进。对用户来说,这种输出方式也更方便逐段审查——模型定义错了直接叫停,不用看后面的无效输出。
实测效果:
我之前让 AI 实现一个简单的"用户上传头像"功能。按这五个阶段输出的结果是:模型定义里包含 users 表的 avatar_url 字段和文件存储路径设计;接口定义里给出了POST /api/user/avatar的请求体格式和成功/失败响应示例;后端代码里除了上传保存逻辑还贴心地做了图片格式白名单和大小限制;前端页面用了 el-upload 组件,配合了 CORS 配置说明;验证步骤给出了先用 curl 测接口再去页面测交互的完整路径。历史对话里对比过不用这个提示词的结果——AI 只会丢给我一堆散落的代码片段,完全不知道从哪开始贴。
4.2 提示词九:数据库表结构设计,从业务描述到建表语句
提示词模板:
我有一个业务需求:[描述业务场景,包括实体、关系、关键业务流程] 请帮我设计数据库表结构,输出以下内容: 1. 完整的建表 SQL(含字段类型、长度、约束、注释) 2. 索引设计说明(每个索引的用途和适用查询场景) 3. 表之间的关系说明(外键/逻辑关联,级联规则) 4. 预估数据量:[数据规模],请说明分表/分区建议(如果必要) 5. 潜在的性能风险点和优化方案 数据库:MySQL 8.0,使用 InnoDB 引擎,utf8mb4 字符集 如果有多种设计方案的取舍,请对比说明并给出推荐。要不要懂数据库设计的人才能用这个提示词:
其实不用。这个提示词的价值恰恰在于——它把设计决策摊开给你看了。
大多数开发者在初期的时候对表结构设计没什么感觉,习惯了让 ORM 自动建表,AI 帮你建表往往满足当下需求,却为未来埋雷。例如用户表和订单表之间的关系,AI 会自动加上外键约束,但实际上高并发互联网项目里外键往往是一个性能负担,实际开发更倾向于逻辑外键。这个提示词专门要求 AI 对比不同设计方案的取舍,让不懂的人能看懂选择背后的理由,懂的人也能检查 AI 的方案是否合理。
实测例子:
我设计过一个"订单+订单明细"的表结构。AI 默认给订单表加了status字段,用 TINYINT 表示状态枚举。我追问了一句"order_status 用 TINYINT 还是 VARCHAR 更合适",AI 给出的对比分析是:TINYINT 在索引效率和存储空间上有优势,但业务上直接查数据库排查问题时不直观;VARCHAR 状态码可读性好,但索引性能略差且需要额外维护状态码映射。这种级别的分析,至少能帮你避免很多建表时的冲动决策。
4.3 提示词十:代码审查提示词,让 AI 用"评审官"视角挑刺
提示词模板:
请以资深代码审查官的身份,审查以下代码: [粘贴代码或指明文件路径] 审查重点: 1. 安全漏洞(SQL注入、XSS、越权、敏感信息泄露等) 2. 性能问题(N+1查询、无效循环、内存泄漏风险等) 3. 逻辑错误(边界条件遗漏、并发问题、异常处理缺失等) 4. 代码规范(命名、复杂度、重复代码等) 输出格式: - 按严重级别排序:严重(必须修复)/ 一般(建议优化)/ 建议(可选) - 每个问题给出:所在行号、问题描述、修复建议、修复后的代码示例 - 最后给出整体评价和改进优先级 不要客气,不要只夸代码写得好,把所有问题都列出来。为什么最后一句"不要客气"很关键:
AI 的默认行为模式是"讨好用户",审查代码时容易变得客气,什么问题都委婉地提一嘴。你加一句"不要客气,把所有问题都列出来",是明确告诉它你需要的不是夸奖,是批评——它立刻切换到挑刺模式,审查力度完全不一样。
实测中的惊喜:
有一次我把一个业务模块的代码丢给它审查,它找出了一个我完全忽略的越权漏洞:这个接口只校验了用户是否登录,没有校验该用户是否有权限操作目标资源——攻击者只要构造请求参数,就能操作用户的数据。这个问题在测试环境根本测不出来,因为没有模拟多用户的测试数据。这类问题 AI 能帮你找出来,靠的是它对"缺少权限校验"这种代码模式的敏感度非常高。
5. 提示词写得再好,这些环境坑也能让你的效率归零
5.1 在 Windows 上装 Claude Code,最常见的失败现场
前面十个提示词的所有讨论,都建立在一个大前提上——你的 Claude 或 Cursor 能正常运行。但我在实际陪跑不少同学的过程中发现,大量用户的问题不在提示词层面,而是在环境配置层面卡住了。热搜里那一串"claude code 安装失败""failed to start claude's workspace""claude 无法识别为 cmdlet"都是这类问题。
先说 Windows 上装 Claude Code 最常见的失败现场。
打开 PowerShell,输入npm install -g @anthropic-ai/claude-code,然后开始安装。装完之后兴奋地输入claude,结果命令提示符回了一句:claude : 无法将“claude”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
这问题十有八九是 npm 全局安装目录不在 PATH 环境变量里。解决方式很简单:先执行npm config get prefix拿到 npm 全局安装路径,然后把那个目录加进系统 PATH。改完环境变量记得重开终端。
有时候更诡异——早上还能用,下午打开就报failed to start claude's workspace。这个报错的根源大概率是 Claude Desktop 或 Claude Code 依赖的工作目录或配置文件损坏了,通常是异常退出导致的。排查链路一般是:先确认环境变量里CLAUDE_CONFIG_DIR指向的目录是不是被误改了,再检查有没有装过旧版本残留冲突,最后实在不行删掉配置目录重来。
5.2 Cursor 界面全英文看不懂,3 分钟内改成中文
Cursor 默认界面是英文的,这对很多不熟悉英文界面的初学者来说,是个很劝退的坎。它甚至没有在设置界面里直接放一个"Language"选项,很多人看到就懵了——怎么连个语言选项都找不到?
实际改语言非常简单:打开 Cursor 之后按Ctrl+Shift+X打开扩展面板,搜索"Chinese",安装一个简体中文语言包扩展(一般叫"Chinese (Simplified) Language Pack"),然后按Ctrl+Shift+P打开命令面板,输入Configure Display Language,选择简体中文,重启 Cursor 就变过来了。
这一步看起来只是把界面变成了中文,但实际的价值是:你把 ChatGPT 的会话界面、菜单栏、设置项全看懂了,后面配置模型、配置 API Key、选择代码模型版本的时候就不会再因为看不懂选项而卡住。
5.3 环境配置是提示词的"底层基础设施"
为什么我要在一篇讲提示词的文章里专门安排一节讲环境问题?
因为提示词解决的是"AI 怎么高效干活"的问题,环境配置解决的是"AI 能不能干活"的问题。后者没解决,前者写得再好也是零。不少用户看到failed to start claude's workspace就以为是自己提示词写得不对,反复调整提示词毫无作用,实际上问题出在安装配置上。先修好环境,再优化提示词,顺序不能反。
6. 别做提示词的复读机:让这套方法论真正内化成你自己的武器
十个提示词讲完了。但我想专门花一段提醒你一个可能被忽略的事——不要照搬模板,要把模板理解成"自己的东西"。
这些提示词之所以有效,是因为它们都遵循了同一套底层逻辑:信息结构化、约束前置、验收标准显性化。角色、上下文、约束、验收——四支柱缺一不可。只要你掌握了这套逻辑,你自己就能根据不同项目的具体场景,原