用了半年 Claude,我才明白自己之前全用错了

不是 Claude 不行,是你在用「石器时代」的方式跟它对话。掌握这些技巧,你的 AI 协作效率至少翻 3 倍。

先问你一个问题:你用 Claude 写代码,是不是经常遇到这种情况——

第一天:哇,这也太神了,我一个下午干完了以前三天的活!
第三天:emmm 它怎么开始说废话了……
第一周后:算了,还是自己写吧。

然后你得出结论:「AI 不过如此。」

但事实是:不是 AI 退步了,是你的用法从一开始就不对。

Claude 本质上是一个「对上下文极度敏感」的协作者——你给的信息越结构化、越精准,它给你的代码就越靠谱。就像你新入职一个厉害的外包同事,第一天啥也没交代直接扔任务,结果能好才怪。


问题不在 Claude,在于你没跟它「交接」

Claude 没有跨对话的记忆。每次打开新窗口,它就是一个什么都不知道的新人

你叫它写代码,它会写——用它认为"通用"的方式,而不是你项目里约定的方式。

这不是 Bug,这是特性。你得学会跟它说清楚。

下面 7 个技巧,是我结合国内开发场景总结出来的,从最基础的说起。


技巧一:用 XML 标签说话,别跟它聊天

很多人跟 Claude 交互就像发微信消息——一句话扔过去,然后抱怨结果不对。

Claude 其实更喜欢「结构化输入」。用 XML 标签把你的需求拆开,它能更准确地理解你在说什么。

反面教材(聊天式):

帮我写一个登录接口,用 Spring Boot,要有参数校验和错误处理,返回 token

正确姿势(结构化):

<instructions>
  实现用户登录接口
</instructions>

<context>
  Spring Boot 3.x + MyBatis Plus,使用 Sa-Token 做鉴权
  参考项目里已有的 UserController.java 风格
</context>

<requirements>
  - 参数校验用 @Valid 注解
  - 密码用 BCrypt 加密对比
  - 返回格式统一用项目里的 Result<T> 封装
  - 错误码参考 ErrorCode.java 枚举
</requirements>

<constraints>
  - 不要引入新的依赖
  - 不要写任何 System.out.println
</constraints>

别嫌麻烦。你多写 30 秒,它少返工 3 次。


技巧二:给它「封官加职」

Claude 默认会给你一个「通用答案」,就像你问路,对方给你说「往前走」一样没什么用。

但如果你在开头告诉它它是谁,输出质量会明显不同。

区别看这里:

❌ 帮我 review 这段 SQL,看看有没有问题

✅ 你是一名专注于 MySQL 性能调优的高级 DBA,
   当前系统日均查询量约 500 万次。
   请 review 这段 SQL,重点找出在大数据量下可能出现的慢查询风险。

国内常用场景的角色模板:

// 代码安全审查
你是一名熟悉 OWASP Top 10 的安全工程师,
同时了解国内等保 2.0 合规要求,请审查以下代码。

// 架构设计
你是一名设计过日活百万 App 后端架构的技术专家,
当前团队使用阿里云全家桶,请给出系统设计方案。

// Bug 排查
你是一名专注于 JVM 调优和内存泄漏排查的 Java 专家,
请分析以下堆栈日志并给出排查思路。

💡 角色描述控制在 1-2 句话,太长反而会稀释重点。


技巧三:CLAUDE.md——让它永远记住你的项目

这是 Claude Code 里最被低估的功能,没有之一。

在项目根目录创建一个 CLAUDE.md 文件,Claude 每次启动时会自动读取它。相当于你提前帮它写好了「入职文档」。

在终端里运行:

/init

它会帮你生成一个初始模板,然后根据你的项目补充内容:

# 项目:XX电商后台管理系统

## 技术栈
- 后端:Java 17 + Spring Boot 3.2 + MyBatis Plus
- 前端:Vue 3 + TypeScript + Element Plus
- 数据库:MySQL 8.0 + Redis 7
- 部署:阿里云 ECS + OSS,CI/CD 用 Jenkins

## 代码规范
- 接口返回统一用 Result<T>(见 common/Result.java)
- 异常统一抛 BusinessException,不要自己 try-catch 吞掉
- 所有 Service 方法必须写 Javadoc
- 禁止在 Service 层直接写 SQL,必须走 Mapper

## 禁止事项
- 不准硬编码任何配置项,统一走 application.yml + Nacos
- 不准用 System.out.println,统一用 Lombok 的 @Slf4j
- 不准随意引入新依赖,需先在群里确认

## 接口规范
- RESTful 风格,统一加 /api/v1 前缀
- 分页参数:pageNum / pageSize
- 时间字段统一用 LocalDateTime,序列化格式:yyyy-MM-dd HH:mm:ss

你花 1 小时写好这个文件,能省掉后续无数次「上下文复读机」的痛苦。


技巧四:上下文管理——别让它变成「金鱼」

这个技巧很多人完全没意识到,但影响极大。

Claude 的上下文窗口有限。当你在一个对话里聊了太多乱七八糟的内容,它的「注意力」就会开始涣散,后续输出质量明显下降。

研究表明,上下文使用率超过 40% 后,输出质量就开始明显下滑。

几个关键命令要记住:

# 清空上下文,切换新任务时必用
/clear

# 压缩上下文,保留关键信息
/compact

# 带提示的压缩(效果更好)
/compact 保留认证模块的重构进度,删除之前调试日志的部分

# 回退到上次失败前的状态
/rewind

正确的工作节奏:

❌ 错误做法
一个对话里:修 Bug → 加新功能 → 重构代码 → 再修 Bug
→ Claude 越来越乱,代码越来越离谱

✅ 正确做法
任务1:/clear → 修登录 Bug → commit → /clear
任务2:/clear → 加导出 Excel 功能 → commit → /clear
→ 每次都是满血状态

记住一个原则:rewind 比纠错强。Claude 写错了,别急着让它改——直接 /rewind 回到出错前,重新描述需求,比让它在错误代码上打补丁要好得多。


技巧五:先让它出卷子,再让它写代码

这是区分「用 AI 做玩具」和「用 AI 做生产项目」最关键的习惯。

直接让 Claude 写代码,对于简单需求没问题。但凡涉及业务逻辑稍复杂的功能,先规划再动手,最终结果往往更好、返工更少。

Claude Code 有个 Plan 模式,Shift+Tab 可以切换进去。

另一个更实用的方式,是用这个提示词让它先问你问题

我想做一个:[需求简述]

在写代码之前,请先深度采访我,问清楚:
- 业务逻辑和边界情况
- 与现有模块的集成方式
- 性能和并发要求
- 我可能没想到的坑

不要问显而易见的问题,只问核心的、影响架构决策的问题。

采访完成后,输出完整的技术方案文档保存到 SPEC.md,
我确认后再开始编码。

实战工作流:

Session 1(规划):
→ 用上面的提示词采访 + 生成 SPEC.md
→ 你 review 并修改 SPEC.md
→ /clear

Session 2(开发):
→ 加载 SPEC.md
→ 按模块逐步实现
→ 每个模块完成后 commit

感觉多了一步,实际上省了后期大量返工。


技巧六:让两个 Claude 互相「挑刺」

这个方法略显"奢侈",但效果出奇的好。

核心思路:写代码的 Claude 和 review 代码的 Claude,不能是同一个上下文

写代码的 Claude 对自己写的东西有"感情",找不出问题。但一个全新的、什么都不知道的 Claude,会更客观。

# 终端1 —— 开发者 Claude
> 实现一个基于 Redis 滑动窗口的接口限流中间件,
  每个用户 IP 每分钟最多 60 次请求

[写完代码]

# 终端2 —— 评审者 Claude(全新窗口)
> 你是一名专注于高并发场景的资深 Java 工程师。
  请严格审查以下限流中间件代码,重点关注:
  1. 高并发下的线程安全问题
  2. Redis 操作的原子性是否有保障
  3. 极端情况下的绕过风险
  4. 内存和性能问题

  [粘贴终端1的代码]

如果没有条件开两个终端,也可以用「自我批判」模式:

请先完成 [任务]。
完成后,以一个挑剔的技术 leader 的视角,
列出至少3个你觉得这段代码可能存在的问题,
然后基于这些问题重新优化代码。

技巧七:把你们团队的「暗知识」写进命令

这是让 Claude 从「个人工具」升级为「团队工具」的关键。

CLAUDE.md 里定义自定义命令,把你们团队约定好的流程固化下来:

## 自定义命令

### /plan
开始任何开发任务前:
1. 问清楚需求和验收标准
2. 列出所有需要修改的文件
3. 评估对现有功能的影响
4. 写出分步骤的实施计划
5. 等待我确认后再开始写代码

### /review
代码审查清单:
1. 安全:有没有 SQL 注入风险?敏感信息有没有泄露?
2. 性能:有没有 N+1 查询?循环里有没有数据库操作?
3. 异常:所有异常是否正确处理,有没有被吞掉?
4. 规范:是否符合项目里的命名和分层规范?
5. 测试:核心逻辑有没有对应的单元测试?

### /ship
提交前自检:
1. 跑完所有单元测试,确认全绿
2. 检查有没有遗留的调试代码和 TODO
3. 确认没有硬编码的密码、密钥、IP 地址
4. git diff 看一眼完整改动
5. 写规范的 commit message:type(scope): 描述

用起来很简单:

/plan 新增订单超时自动取消功能
/review  [粘贴代码]
/ship

新人入职,直接给他看 CLAUDE.md,不用再口头交代一遍编码规范。


把这 7 个技巧串起来

技巧 解决的问题 核心价值
XML 结构化提示 输出混乱、不符合预期 更精准的第一次输出
角色赋予 回答太通用 技术深度符合场景
CLAUDE.md 每次都要重复交代背景 项目上下文永久保留
上下文管理 越聊越乱,质量下滑 全程保持高质量输出
先规划再编码 写到一半推倒重来 减少大规模返工
双 Claude 互审 自己写的代码找不出问题 客观发现隐患
自定义命令 流程靠嘴说,新人不统一 团队规范可复用

最后说一句

Claude 就像一个能力极强但完全不了解你公司的外包

你不交代清楚,他就按自己理解来,写出来的东西你不满意,然后你说「AI 没用」。

但你要是花时间把项目规范、技术约束、验收标准都说清楚——他会让你觉得身边多了个不用发工资的高级工程师。

这 7 个技巧,本质上都是在做一件事:把你脑子里的"默认知识",变成 Claude 也能理解的显式规则

学会了,vibe coding 才能真的起飞。