📊 页面导航

适用角色与上手难度

角色推荐度上手难度
🛠️ 开发★★★★★★★☆☆☆
🧪 测试★★★★★★★☆☆☆
📦 产品★★★★★★★★☆☆

🎯 学习产出: 掌握 Claude Code 提示词编写的核心方法论,能独立写出高精度指令

🚀 AI 能力提升: 代码生成、需求表达

提示词编写技巧

预计阅读时间: 21 分钟

Claude Code 的能力上限很大程度上取决于你的提示词质量。同样的需求,不同的表达方式,输出质量可能天差地别。本文从认知模型出发,系统化地拆解提示词编写的核心技巧。

Tip

本文聚焦怎么写好提示词。如果你刚开始接触 Claude Code,建议先阅读第一次对话了解基本交互。 想系统化提升 AI 输出准确率(不仅仅是提示词),参考 提高 AI 生成准确率

核心理念:把 AI 当新同事

Claude Code 像一个刚加入团队的高级工程师——技术能力很强,但对你的项目一无所知。你不能只说"修一下那个 bug",而要说清楚上下文、技术栈、期望结果。

记住这三个原则:

  1. 不说你已知的,AI 不知道的事——项目结构、命名规范、业务逻辑
  2. 具体比简短好——一行清晰指令 > 十行模糊追问
  3. 给错误例子比不给好——告诉 AI 不要什么和告诉它要什么同样重要

要不要说"请"和"帮我"

很多人习惯在提示词中加上礼貌用语:

> 请你帮我把用户列表的排序改成按注册时间倒序,谢谢!

结论:不影响生成效果,但浪费 token。

Claude Code 是一个推理模型,不是情感模型。它不会因为你说"请"就更认真,也不会因为你说"谢谢"就多做一步。"请帮我"这三个字对模型来说和空格没有区别——不改变注意力分布,不提升推理深度,不触发任何特殊行为模式。

从 token 经济角度看:

写法token 数效果
"请你帮我把用户列表的排序改成按注册时间倒序"~25一样
"把用户列表排序改成按注册时间倒序"~15一样

每句话省 10 个 token,一天上百条对话,累积省下的上下文窗口可以多放一段真实的代码参考。

但要分场景:

场景建议
Claude Code 写代码去掉,直接说指令
和真人同事在 Slack 沟通时用 AI 润色消息保留,礼貌是社交信号
生成对外文档、邮件保留,读者是人

一条好记的规则:AI 只吃信息,不吃态度。把省下的字数拿去写更具体的需求。

结构化提示词:六要素法

一个好的提示词通常包含六个要素。不是每次都需要全部六个,但要素越全,结果越精准。

六大要素

要素说明示例
角色让 AI 以什么身份思考"你是一个专注性能的资深 React 开发者"
上下文项目背景、技术栈、相关文件"项目用 Next.js 14 + Prisma,数据模型在..."
目标具体要做什么"把用户列表页的数据获取从 CSR 改成 SSR"
约束不动什么、用什么方式、格式要求"不改 UI 样式;用 Server Actions 而不是 API"
示例输入输出样例"输入 {name, email},输出 {name, emailHash}"
验收标准怎么判断做对了"npm run build 无报错,列表页首屏加载 < 2s"

实战示例

❌ 糟糕的提示词:

> 优化一下性能

✅ 好的提示词:

# 角色
你是一个专注 Next.js 性能的资深前端开发者。

# 上下文
项目使用 Next.js 14 App Router + Prisma + Tailwind。
页面:src/app/users/page.tsx,目前是客户端渲染,首次加载 ~4s。

# 目标
把 /users 页面的用户列表从 CSR 改为 RSC(React Server Component),
用 Prisma Client 直接在 Server Component 里查数据库。

# 约束
- 不要改动现有的 UI 样式和布局
- 搜索和筛选功能先用 URL searchParams,不引入额外状态库
- 保持 TypeScript 严格模式

# 验收标准
- npm run build 无报错
- 列表页首屏 HTML 包含用户数据(SSR 成功)
- 首次内容绘制(FCP)从 ~4s 降到 < 2s

什么时候用哪些要素

场景最少需要的要素
修一个小 bug上下文 + 目标
写一个新功能角色 + 上下文 + 目标 + 约束
重构/架构决策全部六要素 + 示例
探索性研究("帮我分析")上下文 + 目标
生成文档目标 + 示例 + 格式约束

上下文管理:给够但不给多

Claude Code 的上下文窗口有限。给太多无关信息会稀释关键信号,给太少则缺少判断依据。

提供上下文的方式

1. 直接描述(一次性的):

> 项目用 Express + TypeScript,JWT 存在 httpOnly cookie 里。
> 帮我把 /api/auth/refresh 接口改成同时支持 cookie 和 Authorization header。

2. 引用文件(推荐):

> 参考 src/config.ts 里的数据库配置,给 src/db/schema.ts 加上 createdAt 和 updatedAt 字段

Claude Code 会自动读取引用路径,无需你手动粘贴代码。

3. 建立项目记忆(长期的):

CLAUDE.md 中记录项目规范:

# 项目规范
- 组件用 named export,不用 default export
- API 错误统一返回 { error: { code, message } }
- 数据库字段用 snake_case,TypeScript 用 camelCase

这样每次对话 AI 都会自动读取这些规范,无需重复说明。

多少上下文算合适

太少:"修复这个接口"                                   ← AI 不知道是哪个接口
刚好:"src/api/users.ts 的 GET /users 接口缺少分页"    ← 定位精准
太多:把整个 src/api/ 目录复制过来                     ← 信息噪音

提示词模板集

以下是可以直接套用的模板。把 [...] 替换成你的具体内容。

功能开发

在 [文件路径] 中实现 [功能描述]。

技术栈:[Next.js 14 / Express / Django / ...]

要求:
- [具体要求 1]
- [具体要求 2]

不改动:[明确说不改什么]

参考:
- 现有的 [类似功能] 在 [文件路径]

Bug 修复

Bug 描述:[具体现象和复现步骤]

定位:发生在 [文件路径] 的 [函数名/组件名]

期望行为:[正确的结果应该是什么]

提示:[你已经排查过的方向,或者怀疑的原因]

代码审查

审查 [文件路径] 的 [变更范围]。

关注点:
- [关注点 1,比如:是否有 SQL 注入风险]
- [关注点 2,比如:错误处理是否完整]

忽略:[明确说不关注什么,比如代码风格]

重构

重构 [文件路径] 的 [目标部分]。

目标:[更好的可读性 / 减少重复 / 提升性能 / ...]

约束:
- 不改变外部接口
- 保持向后兼容
- 不改动测试文件

如果你的方案有多个选项,先列出对比让我选。

探索分析

分析 [目录/文件] 的 [关注问题]。

我需要了解:
- [问题 1]
- [问题 2]

输出格式:用 Markdown 表格对比,每条附一行建议

常见错误

1. 一次给太多任务

❌ 错误:

> 把用户模块的接口重构一下,加上分页和排序,顺便把认证中间件也优化一下,
> 然后给前端加个骨架屏,最后更新一下 README

✅ 正确: 拆成多个独立指令,逐个完成。

2. 以为 AI 还记得上一条对话

❌ 错误:

(前一条对话讨论了数据库设计)
> 按之前说的,生成 migration

✅ 正确: 每次带上关键上下文。

> 根据之前讨论的数据库设计(users 表:id, name, email, role),生成 Prisma migration

3. 用了太模糊的形容词

❌ 错误:

模糊词AI 的理解范围
"优化"性能 / 可读性 / 体积 / ...
"完善"加测试 / 加文档 / 加功能 / ...
"改好一点"完全随机

✅ 正确: 用可量化的词替代。

模糊词精确替代
优化去掉不必要的 re-render
完善覆盖所有 > 400 状态码的响应
改好把按钮颜色从 #333 改成 #222

4. 在一条指令里给矛盾信息

❌ 错误:

> 把这个组件拆成更小的组件,但不要新建文件

✅ 正确: 先理清矛盾点。

> 把这个组件拆成更小的子组件。所有子组件放在同一个文件里,用 named export 导出。

进阶技巧

让 AI 先反问

需求本身不清楚时,与其写一个模糊的提示词然后反复改,不如让 AI 先提问:

> 我需要给 /api/users 接口加上权限控制。在开始之前,如果你有任何不确定的地方,先问我,确认清楚再动手。

效果:AI 会列出它的疑问——"哪些角色可以访问?权限粒度是接口级还是字段级?认证方式是 JWT 还是 session?"——你一次性回答完,代码质量远超反复纠正。

适合场景:需求边界模糊、涉及多条业务规则、需要做架构决策。

分步确认模式

大任务拆成两步走,先看计划再执行:

> 我要重构 src/services/order.ts,拆成 createOrder / updateOrder / cancelOrder 三个独立模块。
> 先列出你的拆分方案和每个模块的职责边界,等我确认后再动手。

关键区别:一个指令拆成两轮交互。第一轮只输出计划(token 成本几乎为零),确认方向正确后再花 token 写实际代码。方向错了直接改计划,比写完整代码再改省 5-10 倍 token。

显式否定:说"不要"有时候比说"要"更省

AI 的搜索空间非常大。排除错误方向比穷举正确方向更高效:

> 不要用 class component
> 不要引入新的 npm 依赖
> 不要改现有的 export 接口
> 不要用 any 类型

技巧:DO/DON'T 对比格式在越复杂的任务中越有效:

要求:
✅ DO:用 React Server Components + Server Actions
✅ DO:所有表单用 react-hook-form + zod
✅ DO:错误状态用 ErrorBoundary 包裹

❌ DON'T:不要用 useState + useEffect 做数据请求
❌ DON'T:不要创建新的 API route
❌ DON'T:全局状态不要用 useContext(用 URL searchParams 替代)

二次提示:追加式修正

AI 输出接近但不是完全正确时,最常见的错误是重写整个提示词。更好的做法——追加一条简短的修正指令:

# 第一次
> 给 src/components/UserTable.tsx 加上排序功能

# AI 输出了,但排序方向反了,且缺少 loading 状态

# ❌ 不要这样——重写整个提示词
> 给 src/components/UserTable.tsx 加上排序功能,默认降序,加上 loading...

# ✅ 追加修正即可
> 1. 排序默认改成降序
> 2. 数据加载时显示 loading skeleton
> 其他保持不变

追加修正 > 重写提示词。每次重写都在消耗你刚建立的上下文对齐。

版本锁定防漂移

AI 训练数据覆盖多个版本,你不说版本号,它可能用到你项目里不存在的 API:

# ❌ 没有版本约束
> 用 Prisma 写一个用户查询

# ✅ 锁版本
> 用 Prisma v5.x 写一个用户查询,不要用 v6 的新 API
> 用 Next.js 14 App Router,不用 Pages Router
> 用 React 18,不用 React 19 的 use() hook

利用 CLAUDE.md 消除重复

如果你发现自己反复在提示词中说同一个约束,把它写进 CLAUDE.md

# CLAUDE.md(项目根目录)

## 代码规范
- 不要用 default export,统一用 named export
- 组件文件用 PascalCase,工具文件用 kebab-case
- API 错误统一返回 { error: { code: string, message: string } }
- 不要用 any,确实无法推断时用 unknown

## 技术约定
- 本项目锁定 React 18 + Next.js 14 Pages Router
- 状态管理用 Zustand,不用 Redux
- 测试用 Vitest,不用 Jest

之后每次对话 AI 自动读取,你的提示词可以省略这些重复说明——每条指令省 50-100 token。

参考:CLAUDE.md 集合 了解更多实际用法。

用好 @ 和路径引用

Claude Code 能理解项目文件路径。与其粘贴代码或模糊描述,直接给路径:

> 参照 src/utils/api.ts 里 createRequest 的错误处理方式,
> 给 src/services/auth.ts 的所有函数加上同样的错误处理

更深层的技巧——用 @ 引用目录让 AI 自己探索:

> 查看 src/api/routes/ 目录下的所有路由文件,
> 统一给每个接口加上 try-catch 错误包装

AI 会自动读取目录结构,找到所有路由文件并逐个处理。比你自己数有哪些文件再一个个点名高效得多。

给 AI 一个诚实出口

强制性要求会让 AI 在有歧义的情况下强行猜测。加上退路反而提高质量:

> 如果你不能 100% 确定某个 API 的用法,标注为 [待确认] 并说明你的猜测依据。
> 不要假装确定——我宁愿多确认一次,也不要猜错了再改。

效果:对于训练数据模糊的技术点,AI 会主动标注不确定性而非悄悄用错。

迭代优化:别指望一步到位

即使是最好的提示词,第一次结果也不一定完美。把 AI 当成可对话的工具,不要当作一次性命令。

迭代流程

你:[详细提示词]
AI:[输出结果]

你:"第 2 点不对,应该用 useReducer 而不是 useState"
AI:[修正]

你:"类型定义再加一个 metadata 字段,也是可选的"
AI:[继续修正]

你:"好了,这次的可以。给我加上 JSDoc 注释"

关键习惯:每次只修正一个维度,避免一条消息里同时要求修改逻辑、样式、测试。

如果 AI 一直不对

> 你三次都在 XXX 上出错了。请先解释你对这个需求的理解,确认我们理解一致后再写代码。

强制 AI 先解释理解,比对后再动手——比反复纠正高效得多。

技巧速查

技巧一句话说明示例
让 AI 先反问不确定时先让 AI 列出疑问,一次性澄清"开始前有任何不确定的先问我"
分步确认大任务先出计划,确认后再写代码"先列出改动方案,等我确认后再动手"
DO/DON'T 对比明确说要不要,排除错误方向比穷举正确方向高效"✅ DO: RSC + Server Actions; ❌ DON'T: useEffect"
追加式修正改结果别说重来,追加一条短指令修正"第 3 段改成...,其他保持不变"
给错误例子告诉 AI 不要什么和告诉它要什么同样重要"不要用 any,不要用 useEffect 做数据请求"
锁定版本号防止 AI 用你项目里不存在的 API"用 Prisma v5.x,不要用 v6 的新 API"
写进 CLAUDE.md反复说的约束写进项目文件,一劳永逸命名规范、技术栈、API 约定
直接用路径引用比粘贴代码高效"参照 src/utils/api.ts 的错误处理方式"
给诚实出口允许 AI 说不确定,反而提高准确性"不能 100% 确定的标为 [待确认]"
指定输出格式问之前告诉 AI 怎么答"用 Markdown 表格对比三个方案"
用角色设定窄化 AI 的思考方向"你是一个研究 Rust 内存模型的专家"
给出验收方式告诉 AI 什么叫"做对了""改动后运行 npm run test:auth,48 个用例全绿"
每次只修正一个维度别在一次回复里同时改逻辑、样式、测试逻辑对了再要求样式,样式对了再要求加测试
去礼貌用语"请""帮我""谢谢"不影响效果,但浪费 token"把排序改成降序"而非"请你帮我把排序改成降序"
一行一要求多要求用列表,不混在一句话里要求:1. xxx; 2. yyy; 3. zzz
给参考实现"像 XXX 那样"比抽象描述快十倍"错误处理像 src/api/users.ts 的 GET 接口那样"
指定不改的东西缩小范围比扩大范围高效"只改查询逻辑,不要动 UI 和类型定义"
要求解释而非执行对方案不确定时,先让 AI 分析"别写代码,先分析这三种方案各有什么风险"

下一步

掌握了提示词编写技巧后,你已经有能力让 Claude Code 高效工作了。接下来可以学习: