Skip to content

提示词技巧

让 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:

  1. 先写测试(src/api/billing/export.test.ts)
    • 测试空数据
    • 测试 1 条数据
    • 测试 100k 数据(流式)
    • 测试错误处理
  2. 跑测试看到 RED
  3. 写最小实现让测试 PASS
  4. 重构改进
  5. 重跑测试确保还 PASS

### 让 Claude 做代码审查

审查这次的 git diff,按以下维度打分(1-5):

维度分数理由
安全?
性能?
可读性?
测试覆盖?
规范遵守?

最后给一个综合结论:merge / request changes / discuss


### 让 Claude 解释陌生代码

我接手了这个项目,请帮我建立心智模型:

  1. tree -L 3 看结构
  2. 读 README + package.json
  3. 找出主要入口
  4. 画一个文字版调用流程图
  5. 列出 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 中文调教指南

内容采用 CC BY-NC-ND 4.0 协议 · 禁止商业使用 / 禁止改编 / 禁止训练 AI 模型