主题
提示词技巧
让 Claude / Codex 一次写对的实战技巧。基于 Anthropic 官方 prompt engineering 文档和大量真实工单总结。
核心原则
提示词是工程,不是玄学。 系统化、可迭代、结果可测量。
1. 结构化优于自然语言
❌ 不好
帮我写一个用户注册接口,要支持邮箱验证,密码要安全,
还要有错误处理,对了别忘了写测试✅ 好
写一个用户注册接口:
# 需求
- POST /api/auth/register
- 输入:{ email, password, name }
- 输出:{ user: { id, email, name }, token }
# 验证
- email: 格式 + 唯一性
- password: ≥ 12 字符 + 包含大小写数字
- name: 1-50 字符
# 安全
- 密码用 bcrypt(cost=12)
- token 用 JWT(HS256)
- 错误统一格式:{ error: { code, message } }
# 测试
- 同时写 src/api/auth.register.test.ts
- 至少覆盖:成功 / 重复邮箱 / 弱密码 / 缺字段结构化让 Claude 不会漏需求。
2. 用 XML 标签分区
Anthropic 模型对 XML 标签有特殊优化(训练数据特征):
<context>
我在做一个 SaaS 项目,用 Next.js + Prisma + PostgreSQL。
现在要给账单页加导出功能。
</context>
<requirement>
导出 CSV,包含订单号、日期、金额、状态。
</requirement>
<constraints>
- 不能阻塞主线程
- 大数据量(10万行)要分页流式
- 文件名格式:billing-YYYY-MM-DD.csv
</constraints>
<output_format>
1. 先列实现方案
2. 等我确认再写代码
</output_format>比起自然语言段落,模型解析准确度提升 20%+。
3. 用 ALL CAPS 强调
请实现登录功能。
CRITICAL:
- 密码绝对不要 log
- token 必须设置 HttpOnly + Secure
- 不要用 Math.random() 生成 secret
IMPORTANT:
- 用 Zod 验证 input
- 错误信息别泄露用户是否存在Claude 对 ALL CAPS 关键词敏感度高,能降低"忘记重要约束"概率。
4. 让 Claude 先思考再做
简单任务 → 直接做
改个 typo,password → passwords复杂任务 → 强制思考
重构这个 800 行的 service。
请按以下步骤:
1. 先读代码理解现状
2. 列出 3-5 种重构方案,每种说明优缺点
3. 等我选定方案
4. 再写代码
不要直接开始改!或开 thinking 模式(Shuro 没有独立的 -thinking 模型别名,直接用基础模型 + thinking 请求参数 / /think):
claude --model claude-opus-4-6
# 会话内用 /think 或在 prompt 里写 "ultrathink" 触发深度思考让模型先输出思考过程再做。
5. 给例子(few-shot)
我要把蛇形命名改成驼峰,例如:
user_name → userName
api_key_id → apiKeyId
HTTP_status → httpStatus
按上面规则改 src/types/api.ts 里的所有字段。例子比规则描述更精确。
6. 限定范围 / 越界警告
重构 src/auth/login.ts。
只改这个文件!不要:
- 碰其他文件
- 改 package.json
- 改测试文件
- 改数据库 schema
如果发现要改其他文件才能完成,先停下来问我。避免 Claude "顺手"改一堆东西。
7. 输出格式约束
让 Claude 输出特定格式
分析这段代码的性能问题。
输出格式(严格遵守):
```yaml
issues:
- severity: high|medium|low
location: <文件:行号>
problem: <描述>
fix: <建议>
estimated_speedup: <估算提速倍数>
```
不要写其他内容。YAML / JSON / 表格都比自由文本好解析。
让 Claude 用 tool 输出
找出代码里所有 TODO 注释。
对每个 TODO 用 todo 工具创建一个待办事项。Claude 调用 todo 工具,结果可程序读取。
8. 链式思考(CoT)
分析这个 bug:
第一步:阅读相关代码(用 Read 工具)
第二步:跑测试看错误(用 Bash 工具)
第三步:定位根因
第四步:列 3 个修复方案
第五步:选最优方案,说明理由
第六步:实施修复
第七步:再跑测试验证
按顺序,每步说明你在做什么。显式列出步骤 = Claude 不会跳步骤。
9. 角色提示
你是一位**资深 Rust 工程师**,专攻:
- 内存安全和零拷贝优化
- 异步编程(tokio / async-std)
- unsafe 块的合理使用
请审查我这段 unsafe 代码:
<code>
...
</code>角色定义 = 调整模型输出风格和深度。
10. 自我修正
写完代码后请自己审查:
1. 有没有 TypeScript 错误?运行 tsc --noEmit 验证
2. 有没有未使用的 import?运行 eslint 验证
3. 测试都过了吗?运行 pnpm test 验证
4. 性能怎么样?识别可能的 N+1
发现问题就修复,不要等我指出。让 Claude 自检 = 减少来回扯皮。
11. 否定 vs 肯定
❌ 不好(堆砌 "不要")
不要用 var,不要 console.log,不要写注释,不要默认导出模型注意力被 "不要" 占用。
✅ 好(说明该做什么)
用 const / let
用 console.error 配合 logger
代码自解释,省略注释
具名导出正向描述比反向禁止更有效。
12. 重要的规则放最后
模型对最近上下文最敏感。把 CRITICAL 规则放 prompt 末尾:
[大段需求描述...]
[大段背景...]
CRITICAL: 完成后必须跑 pnpm test 验证。比放开头记得更牢。
13. 加入失败案例(warn-by-example)
之前有人试过这样实现:
```ts
async function fetchUser(id: string) {
const user = await db.user.findUnique({ where: { id } });
return user!; // ⚠️ 用 ! 强制非空
}问题:当 id 不存在时返回 undefined,但 ! 让 TS 以为是 User 类型,下游就会崩。
请避免这种模式,显式处理 null 情况。
负面例子 + 解释 > 抽象规则。
## 14. 善用 `/think` 强制思考/think 请设计一个支持百万并发的实时聊天系统架构。
强制 Claude 进入 thinking 模式,**适用于设计/架构/难题**。
## 15. 真实场景模板
### 让 Claude 跑测试驱动开发我要加一个新功能:导出账单为 CSV。
请按 TDD:
- 先写测试(src/api/billing/export.test.ts)
- 测试空数据
- 测试 1 条数据
- 测试 100k 数据(流式)
- 测试错误处理
- 跑测试看到 RED
- 写最小实现让测试 PASS
- 重构改进
- 重跑测试确保还 PASS
### 让 Claude 做代码审查审查这次的 git diff,按以下维度打分(1-5):
| 维度 | 分数 | 理由 |
|---|---|---|
| 安全 | ? | |
| 性能 | ? | |
| 可读性 | ? | |
| 测试覆盖 | ? | |
| 规范遵守 | ? |
最后给一个综合结论:merge / request changes / discuss
### 让 Claude 解释陌生代码我接手了这个项目,请帮我建立心智模型:
- tree -L 3 看结构
- 读 README + package.json
- 找出主要入口
- 画一个文字版调用流程图
- 列出 5 个最重要的文件,每个一句话说明
不要展开太多细节,给我"鸟瞰图"。
## 16. 不该问 Claude 什么
| 问题 | 为什么不该问 |
|---|---|
| "你觉得 X 怎么样?" | 模型会"附和",没参考价值 |
| "猜一下这是什么 bug" | 让它跑测试看真实错误 |
| "评分一下我的代码" | 主观,浪费 token |
| "你能记住这个吗?" | 模型无记忆,要写进 CLAUDE.md |
| "请尽可能优雅" | 抽象指令无效 |
## 17. 调试 prompt
如果 Claude 经常答非所问:
1. **看它实际理解了什么** → 让它先 "请用一句话总结你接下来要做什么"
2. **如果总结错了** → prompt 有歧义,要更明确
3. **如果总结对了但做错了** → 拆解步骤,每步明确
4. **如果都对但效果不好** → 模型能力问题,换 Opus 4.7
## 推荐阅读
- [Anthropic 官方 Prompt Engineering 文档](https://docs.anthropic.com/en/docs/prompt-engineering)
- [Claude 4 提示工程最佳实践](https://www.oschina.net/news/351881/claude-4-best-practices)
- [拆解 Claude Code 提示词工程](https://www.douban.com/note/875961539/)
- [tsaol/awesome-claude](https://github.com/tsaol/awesome-claude) Claude 中文调教指南