别再教 AI 写 for 循环了!搞懂"意图编程",让 Claude Code/Cursor 效能翻倍

上周三下午三点,我在赶一个接口联调,需要把一段旧的数据处理逻辑改成异步的。我打开 Cursor,直接问:”帮我把这个 forEach 改成异步的”。
AI 给了我一版,跑起来报错。我说”不对,要等所有请求完成再返回”,它又改了一版,还是不对。来回折腾了四十分钟,最后我自己动手写了十行代码,五分钟搞定。
那一刻我意识到,不是 AI 笨,是我问的方式有问题。
我一直在告诉它”怎么做”,但从没说清楚”要什么”。
三个让 AI 变”智障”的错误姿势
错误 1:把 AI 当搜索引擎用
很多人跟 AI 说话,就像在百度打关键词:
“登录验证”
“React 状态管理”
“数据库查询优化”
这种提示词,AI 只能猜你想干什么。猜对了是运气,猜错了是常态。
就像你去餐厅,跟服务员说”吃的”,然后期待对方端上来正好是你想要的那道菜。
错误 2:手把手教 AI 写代码
“先定义一个变量 user”
“然后写一个 if 判断”
“再加一个 try-catch”
这种做法,本质上是把 AI 当成了”会打字的手”。
你在用自然语言翻译代码逻辑,AI 在用代码翻译你的自然语言。中间隔了两层转换,效率能高才怪。
更要命的是,AI 不知道你为什么要这么写。它只是在机械执行指令,没法帮你优化,没法给你更好的方案。
错误 3:一次性扔一堆需求
“帮我写一个用户管理系统,要有增删改查,要有权限控制,要有日志记录,要有数据验证,界面要好看,性能要好…”
AI 看到这种需求,就像你看到一个没有任何拆解的 100 页 PRD。
它会尽力去做,但大概率会:
- 漏掉某些功能
- 架构设计不合理
- 代码风格不统一
- 关键细节处理不到位
意图编程:换个方式跟 AI 说话
真正高效的做法,不是教 AI 怎么写代码,而是告诉它你想解决什么问题。
这就是”意图编程”的核心:说清楚你要什么,而不是怎么做。
黄金法则 1:说明业务背景
不要:
1 | 帮我写一个登录验证函数 |
要:
1 | 我在做一个企业内部管理系统,需要实现用户登录功能。 |
看到区别了吗?
第一种提示词,AI 只能给你一个最基础的登录函数。
第二种提示词,AI 知道了:
- 这是企业系统(安全要求高)
- 用邮箱登录(需要邮箱格式验证)
- 用 JWT(需要 token 生成和验证逻辑)
- 有锁定机制(需要记录登录失败次数和时间)
AI 会给你一个更完整、更符合实际需求的方案。
黄金法则 2:定义验收标准
不要:
1 | 优化这段代码的性能 |
要:
1 | 这段代码在处理 10 万条数据时耗时超过 5 秒,用户体验很差。 |
验收标准让 AI 知道:
- 什么叫”好”(1 秒以内)
- 什么不能动(数据结构)
- 为什么要优化(用户体验差)
有了这些信息,AI 才能给出真正有用的优化方案,而不是随便改改了事。
黄金法则 3:设定全局约束
不要:
1 | 帮我重构这个组件 |
要:
1 | 帮我重构这个 React 组件。 |
全局约束就像是给 AI 设定了”编码风格指南”。
它知道了你的技术栈、代码规范、团队习惯,生成的代码才能直接用,而不是还要你再改一遍。
实战演练:从”差提示词”到”好提示词”
场景 1:重构旧代码
差提示词:
1 | 这段代码太乱了,帮我重构一下 |
好提示词:
1 | 这是一个用户信息展示组件,目前有以下问题: |
效果对比:
差提示词:AI 可能随便改改格式,或者改了不该改的地方。
好提示词:AI 知道了具体问题、重构目标、约束条件,能给出针对性的解决方案。
场景 2:新增登录校验
差提示词:
1 | 加一个登录校验 |
好提示词:
1 | 需求:在所有需要登录的页面添加权限校验。 |
效果对比:
差提示词:AI 可能给你一个最简单的 if-else 判断,放在每个页面里。
好提示词:AI 会给你一个完整的中间件方案,包括 token 验证、过期处理、路由白名单、自动跳转等完整逻辑。
让 AI 帮你优化提示词
这里有个小技巧:用 AI 来优化你的提示词。
当你不确定自己的提示词是否清晰时,可以这样问 AI:
1 | 我想让你帮我实现一个功能,但我不确定我的需求描述是否清楚。 |
这个方法特别适合复杂需求。AI 会帮你梳理思路,补充缺失信息,让需求描述更完整。
写在最后
我现在用 Cursor 的方式变了很多。
以前我会说”帮我写一个登录函数”,现在我会先花两分钟想清楚:这个登录是给谁用的?有什么安全要求?失败了怎么处理?然后把这些背景一起告诉 AI。
效果差距很明显。以前一个功能要来回改五六次,现在通常第一版就能用,最多微调一下细节。
不是 AI 变聪明了,是我问的问题变具体了。
那个折腾了四十分钟的异步问题,如果我一开始说”我需要并发请求一批接口,等所有请求完成后统一处理结果,用 Promise.all 实现”,大概五分钟就能搞定。
这个认知盲区我花了挺长时间才意识到。