用 AI 写代码已经是我日常的一部分了,但我发现身边很多人用 AI 的效果差异很大——有人觉得 AI 很厉害,有人觉得 AI 给的代码总是不能用。

差距基本上在于怎么描述需求。同样一个问题,描述方式不同,AI 给的答案可以是天壤之别。

整理一下我日常在用的一些 Prompt 套路。

基本原则:给上下文,说清楚约束

AI 不了解你的项目,你得主动告诉它相关背景。

差的 Prompt:

1
帮我写一个登录表单

好的 Prompt:

1
2
3
4
5
帮我写一个登录表单组件,技术栈是 React + TypeScript,
表单库用 React Hook Form,UI 组件用 Ant Design,
需要验证邮箱格式和密码长度(至少8位),
提交时调用 authApi.login(email, password),
返回成功跳转到 /dashboard,失败显示错误提示。

第二个 Prompt 给了:技术栈、依赖库、验证规则、接口调用、成功/失败处理,AI 生成的代码基本不需要修改就能用。

调试报错:把错误和代码一起给

遇到报错,很多人只把错误信息发给 AI,但 AI 需要看到代码才能定位问题。

模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
我遇到一个报错,代码和错误如下:

【报错信息】
TypeError: Cannot read properties of undefined (reading 'map')
at UserList (UserList.tsx:24)

【相关代码】
(粘贴出问题的那段代码)

【背景】
users 是从接口获取的,有时候接口返回 null

帮我分析原因并给出修复方案。

带上代码和背景,AI 的诊断准确率高很多。如果只发报错,它只能给你泛泛的可能原因。

让 AI 解释代码

接手老项目或者看开源库的时候,遇到看不懂的代码,可以让 AI 解释:

1
2
3
请解释下面这段代码的作用,逐行注释,并指出有没有潜在问题:

(粘贴代码)

或者更具体:

1
2
3
这个 useReducer 的 reducer 函数在做什么?
为什么要用 immer 而不是直接返回新对象?
(粘贴代码)

代码审查

让 AI 帮你做 code review,发现自己没注意到的问题:

1
2
3
4
5
6
7
请对下面这段代码做 code review,关注以下几点:
1. 有没有性能问题
2. 有没有边界情况没处理
3. TypeScript 类型有没有可以改进的地方
4. 有没有更简洁的写法

(粘贴代码)

这个我用来检查自己写的函数,偶尔能发现几个漏了的边界情况,挺有用的。

写测试用例

写测试很耗时间,AI 来写的效果还不错:

1
2
3
4
为下面这个函数写单元测试,使用 Jest + React Testing Library,
需要覆盖正常场景、边界情况和异常情况:

(粘贴函数/组件代码)

AI 写完之后需要检查测试是否符合实际业务逻辑,有时候它会测试一些不重要的细节,忽略真正关键的用例。

重构代码

1
2
3
4
5
6
7
请重构下面这段代码,要求:
1. 提取重复逻辑
2. 函数保持单一职责
3. 保持原有功能不变
4. 用 TypeScript 类型标注

(粘贴代码)

重构之后一定要跑测试,AI 重构有时候会不小心改了逻辑。

让 AI 给多个方案

遇到设计问题,可以让 AI 给几个方案,自己选:

1
2
3
我需要在 React 应用里实现全局消息通知(Toast),
请给出 3 种不同的实现方案,分别说明优缺点和适用场景,
不需要写完整代码,描述思路就行。

这种方式比让它直接给一个方案更有价值,帮你快速了解不同方向的权衡。

一个比较有用的进阶技巧:角色设定

给 AI 设定一个角色,它会以那个视角来思考问题:

1
2
3
4
5
你是一个有 10 年经验的前端架构师,
请从可维护性和扩展性的角度,
评价我下面这个组件的设计,并给出改进建议:

(粘贴代码)
1
2
3
4
你是一个专注性能优化的工程师,
找出下面代码里所有可能影响性能的地方:

(粘贴代码)

这个技巧对”评估类”的问题效果比较明显,AI 会更聚焦在你指定的维度上给反馈。

关于 AI 生成代码的使用原则

说实话,AI 给的代码我不会无脑复制粘贴。

它比较擅长:常见模式的代码(表单、列表、CRUD)、模板代码(配置文件、类型定义)、代码转换(JavaScript 转 TypeScript)。

它不太擅长:复杂业务逻辑、项目特定的架构约束、需要理解历史背景的改动。

我的习惯是把 AI 的输出当成一个「初稿」,理解它写的逻辑之后再决定用不用,或者部分采纳。完全不理解就 ctrl+c 进去的代码,迟早会在最不合适的时候出问题。