Claude Code的强大不在于模型本身,而在于你如何向它下达指令。同样的需求,一条模糊的Prompt可能产出90%正确但无法使用的代码,而一条结构精准的Prompt则能在第一轮就交付可部署的结果。本教程基于2026年最新的Prompt工程研究成果,系统拆解Claude Code的六种核心Prompt形态——生成、重构、调试、解释、编排、审查——以及对应的反模式诊断与修复方法。适合已有Claude Code基础使用经验、希望从"能用"跃升到"精准驱动"的开发者。
前置条件:已安装Claude Code CLI(v2.1+),了解基本命令操作,有一个真实项目可作为练习场。
Claude Code不是传统的代码补全工具,而是一个自主代理(Agent)。它接收指令后,会自主选择工具(读取文件、搜索代码、执行命令、编辑代码),循环工作直到满足停止条件。这意味着Prompt的质量直接决定了:
Kevin Kinnett在2026年5月的研究中提出,Claude Code的有效交互可以被归类为六种Prompt形态,每种形态有其最优结构。掌握这六种形态,就等于掌握了驱动Claude Code的核心语法。
graph TB
subgraph "Claude Code 六大 Prompt 形态"
A[生成 Generate] --> A1["写出执行X的新代码"]
B[重构 Refactor] --> B1["修改Y的行为,保持Z不变"]
C[调试 Debug] --> C1["找到X失败的原因"]
D[解释 Explain] --> D1["描述代码Y做了什么"]
E[编排 Orchestrate] --> E1["规划并执行多步骤任务"]
F[审查 Review] --> F1["审计指定关注点"]
end
subgraph "通用原则"
G[明确的验收标准]
H[文件指针与上下文]
I[约束条件与边界]
end
A & B & C & D & E & F --> G & H & I
生成形态是最常见的Prompt类型:你描述期望的行为,Claude Code产出新代码。这类Prompt的最佳结构包含四个要素:目标位置、输入输出形状、技术约束、至少一个可验证的验收标准。
弱Prompt:
claude "写一个重试函数"
这条指令缺少:使用什么语言?放在哪个文件?重试什么类型的操作?最大重试次数?退避策略?
强Prompt:
claude "在 @src/utils/retry.ts 中创建一个通用重试函数 retry<T>,要求:
- 泛型支持,返回 Promise<T>
- 参数:执行函数 fn: () => Promise<T>,最大重试次数 maxRetries: number(默认3),初始延迟 baseDelay: number(默认1000ms)
- 指数退避策略:每次重试延迟翻倍
- 只在网络错误(ERR_NETWORK)和超时(ETIMEDOUT)时重试
- 最后一次重试失败后抛出 AggregateError,包含所有错误
- 验收标准:运行 npx jest src/utils/retry.test.ts 全部通过"
[目标] 在 <文件路径> 中创建 <组件/函数/模块>
[输入输出] 接收 <参数描述>,返回 <返回值描述>
[约束条件]
- <约束1>
- <约束2>
[验收标准] 运行 <命令> 全部通过
没有验收标准的生成Prompt是Token浪费的第一大来源。Claude Code在生成代码后会尝试自我验证——但如果你的Prompt中没有明确的验证方式,它可能: - 生成看起来正确但有隐藏Bug的代码 - 跳过边界情况处理 - 使用与你项目不一致的模式
修复方法:始终在Prompt末尾添加验收标准,最好是可以自动化运行的命令:
# 好的验收标准
"验收标准:npm test -- --grep 'UserService' 全部通过,且 ESLint 零错误"
重构形态是最容易出现反效果的Prompt类型。问题在于:重构必须在"改变行为"和"保持不变的部分"之间取得精确平衡。如果你只说了"重构X",Claude Code无法判断哪些行为是必须保留的。
claude "重构 @src/services/payment.ts 中的 processPayment 函数:
[变更目标]
- 将单体函数(180行)拆分为4个独立函数:validateOrder, calculateTotal, chargeCustomer, sendConfirmation
- 主函数 processPayment 编排这4个子函数
[保持不变]
- 公共API签名:processPayment(order: Order): Promise<PaymentResult> 不变
- 错误处理策略:所有错误必须通过 PaymentError 包装后抛出
- 日志格式:保持 @CLAUDE.md 中定义的结构化日志格式
[参考模式]
- 参照 @src/services/shipping.ts 中 shipOrder 的拆分模式
[验收标准]
- 所有现有测试通过:npx jest tests/payment.test.ts
- 新函数各有独立的单元测试
- processPayment 的集成测试行为不变"
# 危险!这是最常见的反模式
claude "重构 payment.ts 让它更干净"
"更干净"是一个主观判断,Claude Code无法将其转化为具体的操作。可能的后果: - 重命名所有变量(你原有命名是有业务含义的) - 抽取不必要的抽象层 - 改变错误处理行为 - 移除看似"冗余"实则是防御性编程的代码
修复方法:将"更干净"翻译为具体可操作的指令:
"更干净" → "提取超过30行的函数为独立命名函数,添加TypeDoc注释"
"优化性能" → "将N+1查询替换为JOIN查询,目标响应时间<200ms"
"模块化" → "拆分为独立文件,每个文件单一职责,导出明确的公共API"
在执行重构前,确保目标代码有足够的测试覆盖。如果没有,Prompt的第一步应该是:
claude "在执行重构前,先为 @src/services/payment.ts 的 processPayment 函数编写完整的单元测试。
覆盖以下场景:正常支付流程、余额不足、网络超时、并发支付。
使用 @tests/services/shipping.test.ts 作为测试模式参考。"
调试形态是最能体现Claude Code代理能力的场景。关键在于:提供实际的失败输出,而不是描述"有什么问题"。Claude Code需要看到错误消息、堆栈跟踪和测试输出,才能精准定位问题。
# 方法一:直接传入错误输出
claude "调试测试失败:
<test_output>
FAIL tests/integration/user-auth.test.ts
● User Auth › should refresh expired token
AssertionError: expected undefined to equal 'new-access-token'
at Object.<anonymous> (tests/integration/user-auth.test.ts:45:23)
console.error:
TokenRefreshError: Refresh token has expired at epoch 1716123456
at TokenService.refresh (src/services/token.ts:78:13)
</test_output>
涉及文件:@src/services/token.ts @src/middleware/auth.ts @tests/integration/user-auth.test.ts
最近的变更:PR #567 修改了 token 过期逻辑
修复后要求:npm test 全部通过"
# 方法二:管道传入测试输出
npm test 2>&1 | claude "以下是测试输出,诊断失败原因并修复:
涉及文件:@src/services/token.ts @src/middleware/auth.ts
@CLAUDE.md 错误处理规范"
# 太模糊
claude "测试挂了,帮我修"
Claude Code虽然可以运行测试命令来获取输出,但这会消耗额外的Token和时间。直接提供错误输出是最高效的做法。
效率对比:
| 方式 | Token消耗 | 响应时间 | 诊断准确率 |
|---|---|---|---|
| 提供完整错误输出 | ~2,000 | 快(1轮) | ~95% |
| 只说"测试挂了" | ~8,000 | 慢(3-5轮) | ~60% |
| 描述现象不贴输出 | ~5,000 | 中(2-3轮) | ~70% |
技巧一:包含最近的变更历史
claude "调试回归问题:
错误:[贴入错误输出]
这个测试在PR #567合并前是通过的。
PR #567的变更:修改了 token 过期检查从绝对时间改为滑动窗口。
涉及文件:@src/services/token.ts(修改行:72-85)"
技巧二:限定调试范围
claude "调试 @src/api/users.ts:postUser 的500错误。
只在 @src/api/users.ts 和 @src/services/user-service.ts 中查找原因。
不要修改数据库层代码。
错误日志:[贴入日志]"
解释形态看似简单,但大多数人的Prompt过于宽泛,导致Claude Code输出冗长但缺乏重点的泛泛之谈。关键是指定你想要理解的具体维度。
# 弱:太宽泛
claude "解释一下 @src/services/payment.ts"
# 强:指定维度
claude "解释 @src/services/payment.ts:processPayment 中的支付流程:
我需要理解:
1. 资金流转的时序(从用户点击支付到商户收到款项)
2. 与第三方支付网关的交互协议(请求/响应格式)
3. 失败回滚策略(哪些步骤有补偿事务)
4. 并发控制机制(如何防止重复扣款)
不需要:代码逐行解释、基础概念科普"
解释形态在以下场景中特别有价值:
场景一:接手遗留代码
claude "我刚接手 @src/legacy/batch-processor.js,这是2019年写的无文档代码。
帮我梳理:
1. 这个模块的对外接口和调用者(搜索整个项目中的引用)
2. 数据流向:输入从哪来,输出到哪去
3. 已知的TODO和FIXME注释
4. 外部依赖及其用途"
场景二:理解架构决策
claude "分析 @src/middleware/ 目录下所有中间件的执行顺序和依赖关系。
用表格展示:中间件名 | 职责 | 是否阻塞 | 依赖哪些其他中间件"
场景三:生成文档
claude "为 @src/api/routes/ 目录下的所有端点生成API文档。
格式:OpenAPI 3.0 YAML,包含请求/响应Schema。
@CLAUDE.md API文档规范"
编排形态是六种形态中最复杂的,也是最容易出问题的。当你需要Claude Code完成一个涉及多个步骤、多个文件的任务时,必须提供步骤序列、依赖关系和验收标准。这正是"原子任务设计"(Atomic Task Design)方法论的用武之地。
原子任务设计的核心思想:将大目标分解为最小的、可独立验证的任务单元。每个原子任务满足: - 有一个明确的输出 - 有一个二元(通过/失败)的验收标准 - 可以独立执行和验证
flowchart TD
A["大目标:实现用户认证系统"] --> B["原子任务1:创建User数据模型"]
B --> C["验收:npx jest models/user.test.ts 通过"]
C --> D["原子任务2:实现注册API"]
D --> E["验收:curl POST /api/auth/register 返回201"]
E --> F["原子任务3:实现登录API + JWT签发"]
F --> G["验收:curl POST /api/auth/login 返回token"]
G --> H["原子任务4:实现认证中间件"]
H --> I["验收:受保护端点无token返回401"]
I --> J["原子任务5:集成测试"]
J --> K["验收:npm test 全部通过"]
style A fill:#e74c3c,color:#fff
style C fill:#2ecc71,color:#fff
style E fill:#2ecc71,color:#fff
style G fill:#2ecc71,color:#fff
style I fill:#2ecc71,color:#fff
style K fill:#2ecc71,color:#fff
claude "实现用户认证模块,按以下步骤执行:
步骤1:创建数据模型
- 在 @src/models/user.ts 创建 User 模型
- 字段:email(唯一索引)、passwordHash、createdAt、lastLoginAt
- 使用 @src/models/base.ts 作为基类模板
验收:npx jest tests/models/user.test.ts 通过
步骤2:实现注册端点
- POST /api/auth/register
- 输入验证:email格式、密码最小8位
- 密码使用 bcrypt 哈希(参照 @CLAUDE.md 安全规范)
- 返回201 + userId,不返回passwordHash
验收:curl测试返回正确状态码
步骤3:实现登录端点
- POST /api/auth/login
- 返回JWT(过期时间24小时,参考 @src/config/auth.ts 的密钥配置)
- 错误:401 + 'Invalid credentials'(不暴露是邮箱还是密码错误)
验收:curl测试返回有效token
步骤4:认证中间件
- @src/middleware/authenticate.ts
- 从 Authorization header 提取 Bearer token
- 验证JWT并注入 req.user
验收:受保护端点正确拦截无token请求
步骤5:编写集成测试
- 测试完整注册→登录→访问受保护资源的流程
- 测试错误场景:重复注册、错误密码、过期token
验收:npm test -- tests/integration/auth/ 全部通过
约束:
- 不要修改已有的 @src/routes/index.ts 路由注册方式
- 错误处理遵循 @CLAUDE.md 中定义的错误响应格式
- 所有新文件添加到 @src/types/index.ts 的类型导出中"
# 最致命的反模式
claude "帮我实现一个完整的用户认证系统,包括注册、登录、JWT、中间件、测试,
用React和Node.js,PostgreSQL数据库,用最好的实践"
这种Prompt的典型失败模式: 1. 上下文溢出:Claude Code尝试在单个上下文窗口中处理所有决策,导致关键细节被截断 2. 连锁失败:一个步骤的错误会传播到所有后续步骤,因为代理无法回退 3. 不可验证:没有中间检查点,最终产物是"看起来对但到处漏"的代码
修复方法:分阶段执行,每个阶段完成后验证:
# 阶段1
claude "执行步骤1:创建User数据模型。[详细描述]"
# 等验证通过后...
# 阶段2
claude "继续。执行步骤2:实现注册端点。[详细描述]"
# 依赖步骤1的产出...
审查形态与"解释"形态的关键区别在于:审查需要你明确指定关注点。说"审查这段代码"等于没说——你必须告诉Claude Code审查什么维度。
| 审查维度 | Prompt关键词 | 产出形式 |
|---|---|---|
| 安全 | OWASP Top 10、注入、认证绕过 | 漏洞列表 + 修复代码 |
| 性能 | N+1查询、内存泄漏、大循环 | 性能问题列表 + 优化方案 |
| 可维护性 | 圈复杂度、代码重复、函数长度 | 重构建议列表 |
| 一致性 | 与CLAUDE.md规范对比 | 偏差列表 |
| 类型安全 | TypeScript strict模式合规 | 类型错误列表 |
# 安全审查
claude "对 @src/api/ 目录下所有端点执行安全审查:
- 检查所有用户输入是否经过验证和消毒
- 检查SQL注入可能性(特别是字符串拼接的查询)
- 检查是否有未认证的端点暴露了敏感数据
- 检查错误响应是否泄露了内部实现细节
参照 @CLAUDE.md 安全规范和 OWASP Top 10
输出格式:按严重程度排序(Critical > High > Medium > Low)"
# 性能审查
claude "审查 @src/services/ 目录的性能问题:
- 识别所有数据库查询,标记N+1查询
- 检查是否有不必要的数据获取(SELECT * 但只用了2个字段)
- 检查循环内的异步操作(应替换为批量操作或Promise.all)
- 检查是否有缺失的数据库索引(对比 @prisma/schema.prisma 的索引定义)
输出格式:每个问题包含文件名、行号、当前代码、建议修改"
# 无效的审查Prompt
claude "审查一下这个文件有没有什么问题 @src/api/users.ts"
Claude Code面对这种Prompt可能: - 只检查语法问题(这ESLint就能做) - 提出一堆风格建议(无关痛痒) - 完全忽略真正的安全漏洞(因为你没说要检查安全)
修复方法:始终指定审查维度和参照标准:
# 有效的审查Prompt
claude "审查 @src/api/users.ts 的安全性,特别关注:
1. 所有 req.body / req.params 的输入验证
2. 用户ID是否有权限检查(横向越权)
3. 文件上传端点的大小和类型限制
参照 @CLAUDE.md 安全规范第3节"
Claude对XML标签有天然的解析优势——其训练数据中包含大量XML格式的结构化内容。在Prompt中使用XML标签可以显著提升指令的清晰度:
claude "<task>重构 @src/services/order.ts 的 OrderService 类</task>
<changes>
- 将 createOrder 方法拆分为 validateItems、calculatePricing、processPayment 三个私有方法
- 将状态机逻辑提取到独立的 OrderStateMachine 类
</changes>
<preserve>
- 公共方法签名不变
- 所有现有测试必须继续通过
- 订单号生成算法不变
</preserve>
<reference>@src/services/subscription.ts 的 SubscriptionService 作为重构模式参考</reference>
<acceptance>
- npx jest tests/order/ 全部通过
- OrderService.ts 总行数不超过 150 行
- 每个新方法有对应的单元测试
</acceptance>"
在Claude Code中使用 @文件路径 可以将特定文件注入到上下文中,避免代理浪费Token搜索文件:
# 好的做法:精准引用
claude "参照 @src/templates/email-templates.ts 中的模板格式,在 @src/services/notification.ts
中添加新的邮件通知方法。@CLAUDE.md 通知服务规范"
# 不好的做法:让代理自己找
claude "参照项目中已有的邮件模板格式,在通知服务中添加新方法"
否定约束("不要做X")和肯定约束同样重要。Claude Code的代理特性意味着它可能在执行过程中"创造性"地添加你不需要的东西:
claude "修复 @src/api/orders.ts 中的分页Bug。
约束:
- 只修改 getOrders 函数中的分页逻辑(第45-60行)
- 不要修改排序逻辑
- 不要修改API响应格式
- 不要添加新依赖
- 不要修改测试文件,只确保现有测试通过"
当你需要特定格式的输出时,直接给出格式模板:
claude "分析 @src/ 目录的依赖关系图,输出以下格式:
\`\`\`
模块名 | 依赖模块 | 被依赖次数 | 耦合等级(高/中/低)
------------------------------------------------------
auth | database, config | 5 | 高
payment | auth, database, stripe | 3 | 中
\`\`\`
按被依赖次数降序排列。只显示跨模块依赖,不显示同模块内的导入。"
下面用一个完整的实战案例演示如何将六大形态组合使用,实现一个"通知中心"功能模块。
claude "分析 @src/ 目录的现有模块架构:
1. 列出所有 service 层模块及其职责
2. 识别现有的通知机制(邮件、SMS、推送)
3. 找到事件总线或消息队列的使用模式
4. 列出 @CLAUDE.md 中关于新模块的规范要求
输出格式:结构化表格"
claude "基于上一步的分析,规划'通知中心'模块的实现步骤。
目标:创建统一的通知服务,支持邮件、SMS、站内推送三种渠道。
约束:
- 遵循 @CLAUDE.md 模块规范
- 参照 @src/services/email.ts 作为服务模板
- 使用 @src/events/ 的事件总线
输出格式:每个步骤包含名称、文件路径、依赖步骤、验收标准
不要开始编码,只输出计划"
# 先实现核心模型和接口
claude "执行计划步骤1:创建通知类型定义和接口
[步骤1的详细描述和验收标准]"
# 验证通过后继续
claude "继续执行步骤2:实现 NotificationService 核心类
[步骤2的详细描述,引用步骤1的产出文件]"
claude "对新建的所有通知模块文件执行安全审查:
- 检查通知内容模板是否有XSS注入风险
- 检查用户通知偏好设置是否有权限绕过
- 检查批量发送是否有速率限制
参照 @CLAUDE.md 安全规范
输出按严重程度排序"
claude "修复通知模块的安全问题:
问题1(Critical):模板引擎直接注入用户输入
文件:@src/services/notification/template.ts:23
修复:使用模板参数化而非字符串拼接
问题2(High):批量发送无速率限制
文件:@src/services/notification/sender.ts:45
修复:添加令牌桶限流器,参考 @src/utils/rate-limiter.ts
验收:npm test 全部通过 + 安全审查复查通过"
claude "优化 @src/services/notification/ 目录的代码结构:
变更:
- NotificationService.ts 超过200行,拆分为 NotificationRouter、ChannelDispatcher、TemplateEngine
- 三个渠道适配器(email、sms、push)提取到 @src/services/notification/channels/ 目录
保持不变:
- 公共API接口 NotificationService.notify()
- 事件订阅协议
- 现有测试全部通过
验收:npm test 通过 + TypeScript strict 编译零错误"
sequenceDiagram
participant D as 开发者
participant CC as Claude Code
D->>CC: 解释形态:分析现有架构
CC-->>D: 架构分析报告
D->>CC: 编排形态:规划任务序列
CC-->>D: 实现计划(5个原子步骤)
Note over D,CC: 循环执行每个原子步骤
loop 步骤 1-5
D->>CC: 生成形态:实现步骤N
CC-->>D: 代码 + 自动测试结果
D->>D: 验证验收标准
end
D->>CC: 审查形态:安全审计
CC-->>D: 安全问题列表
D->>CC: 调试形态:修复安全问题
CC-->>D: 修复代码 + 测试通过
D->>CC: 重构形态:代码结构优化
CC-->>D: 重构后代码 + 测试通过
D->>D: 最终验证:完整功能测试
以下汇总了最致命的Claude Code Prompt反模式及其修复方案:
| # | 反模式 | 典型表现 | 后果 | 修复方案 |
|---|---|---|---|---|
| 1 | 蒙眼式请求 | "修复这个bug"、"让代码更好" | 代理盲目猜测 | 用具体指标替代主观描述 |
| 2 | 零上下文 | "添加认证"(无文件引用) | 代理发明不存在的模式 | 使用@引用文件和CLAUDE.md |
| 3 | 一锅端 | "构建完整的电商系统" | 上下文溢出,连锁失败 | 分解为可验证的原子任务 |
| 4 | 无验收标准 | "写一个重试函数" | 代理无法判断何时停止 | 添加自动化验收命令 |
| 5 | 主观验收 | "让代码更干净" | 结果与预期不匹配 | 翻译为可量化的指标 |
| 6 | 无边界调试 | "测试挂了帮我修" | 代理搜索整个代码库 | 提供错误输出和范围限定 |
| 7 | 万能审查 | "检查有没有问题" | 输出浮于表面 | 指定审查维度和参照标准 |
反模式修复的黄金法则:每条Prompt都应该能回答三个问题——做什么(What)、不做什么(Not)、怎么算做完(Done)。
在发送任何Claude Code指令前,用以下清单快速检查:
如果你的Prompt通过了以上所有检查,它大概率是一条高质量的Prompt。
flowchart LR
A[写好Prompt] --> B{目标明确?}
B -->|No| C[补充具体描述]
B -->|Yes| D{范围限定?}
D -->|No| E[添加@文件引用]
D -->|Yes| F{有验收标准?}
F -->|No| G[添加自动化验证命令]
F -->|Yes| H{任务原子性?}
H -->|No| I[分解为多个子任务]
H -->|Yes| J[发送Prompt]
C --> B
E --> D
G --> F
I --> H
platform.claude.com/docs/en/build-with-claude/prompt-engineering/claude-prompting-best-practices — Anthropic出品的权威Prompt最佳实践kevinkinnett.com/posts/claude-code-prompt-taxonomy/ — 六种Prompt形态的原创分类框架slava-kudzinau.github.io/cc-guide/docs/07-reference-troubleshooting/04-antipatterns.html — 完整的反模式参考手册github.com/ThamJiaHe/claude-code-handbook — 220+来源的综合指南,含Prompt工程专题ralphable.com/blog/claude-code-prompt-mistakes-developers-2026 — 原子任务设计方法论详解| 评估维度 | 说明 |
|---|---|
| 适合训练营类型 | 中级开发者训练营(已掌握Claude Code基本操作) |
| 教学时长 | 4-5小时(含实操练习) |
| 实操建议 | 学员携带自己的真实项目,现场对6种形态逐一练习 |
| 考核方式 | 给出同一个需求,学员分别用弱Prompt和强Prompt执行,对比结果差异 |
| 分组建议 | 2-3人一组,一人写Prompt,一人观察代理行为,一人记录Token消耗和产出质量 |
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
