Skip to content
雲里
里雾

08 最佳实践与工作模式

claude code guide AI 更新于 2026/3/26

原文:Best Practices + Common Workflows

一条核心约束

上下文窗口很快就会满,性能随之下降。

所有最佳实践都围绕这一个约束展开。上下文窗口容纳你的对话、文件内容、命令输出——一次调试会话可能消耗数万 token。当窗口快满时,Claude 可能”忘记”早期指令或犯更多错误。

五条黄金法则

1. 给 Claude 验证手段(最高杠杆)

Claude 能自验证工作时表现显著提升。没有验证标准,它可能产出”看起来对但实际不对”的东西。

差的做法好的做法
”实现邮箱验证函数""实现 validateEmail。测试用例:user@example.com → true, invalid → false。实现后跑测试"
"让仪表盘更好看""[贴截图] 实现这个设计,截图对比原图,列出差异并修复"
"构建失败了""构建失败,错误信息:[贴错误]。修复并确认构建成功。解决根因,不要压制错误”

2. 先探索,再计划,再编码

[Plan Mode] 读 src/auth/,理解会话处理

[Plan Mode] 我想加 OAuth,哪些文件要改?创建计划

    (Ctrl+G 在编辑器中编辑计划)

[Normal Mode] 按计划实现,写测试,跑测试修复

[Normal Mode] 用描述性消息提交,开 PR

什么时候跳过计划:改动明确且小(改个 typo、加行日志、重命名变量)。如果你能一句话描述 diff,就直接做。

3. 给具体上下文

策略
限定范围”给 foo.py 加测试""给 foo.py 写测试,覆盖用户登出的边界情况。不用 mock”
指向来源”ExecutionFactory 的 API 为什么这么奇怪?""看 ExecutionFactory 的 git 历史,总结它的 API 是怎么演变的”
参考模式”加个日历组件""看首页现有组件的实现模式,HotDogWidget.php 是好例子。按同样模式实现日历组件”

4. 积极管理上下文

何时 /clear

5. 及早纠正

如果纠正了两次还不对/clear,用更好的初始 prompt 重新开始。干净的会话 + 好 prompt > 长会话 + 累积的纠正。

五个常见反模式

反模式症状解决
厨房水槽会话一个会话里做了三件不相关的事/clear 分隔不同任务
反复纠正修了两次还是错/clear + 更好的初始 prompt
过长的 CLAUDE.mdClaude 忽略一些规则精简,重要规则转成 Hook
信任后验证缺口看起来对但边界情况没处理始终提供验证手段
无限探索”调查一下”没有范围限制限定范围或用 SubAgent

实用工作流

探索新代码库

"给我这个代码库的概览"
→ "解释主要的架构模式"
→ "认证是怎么处理的?"

修 Bug

"npm test 有错误"
→ "建议几种修复 user.ts 里 @ts-ignore 的方法"
→ "用你建议的 null check 更新 user.ts"

让 Claude 采访你(大型特性)

"我想做 [简要描述]。用 AskUserQuestion 工具详细采访我。
问技术实现、UI/UX、边界情况、权衡。
不要问显而易见的问题,深入我可能没考虑到的难点。
采访结束后写完整 spec 到 SPEC.md。"

然后新建会话执行 spec——新会话有干净的上下文专注实现。

并行会话

批量操作

for file in $(cat files.txt); do
  claude -p "Migrate $file from React to Vue. Return OK or FAIL." \
    --allowedTools "Edit,Bash(git commit *)"
done

知识检测

概念理解题

  1. 为什么”给 Claude 验证手段”被称为最高杠杆?没有验证时 Claude 的行为模式是什么?

  2. “干净的会话 + 好 prompt > 长会话 + 累积的纠正”——为什么?这和上下文窗口有什么关系?

  3. Plan Mode 的核心价值是什么?它和直接让 Claude 编码相比,浪费的是什么、节省的是什么?

应用题

  1. 你要用 Claude Code 把一个 JavaScript 项目逐步迁移到 TypeScript。设计一个工作流,考虑:如何分批、如何验证、如何管理上下文。

  2. 你的 CLAUDE.md 里有一条规则”所有 API 响应要包含 requestId 字段”,但 Claude 经常忘记。分析可能的原因,提出三种解决方案。


参见

参考答案

1. “给 Claude 验证手段”是最高杠杆

没有验证时,Claude 只能靠自己的推理判断结果正确性——而 LLM 的推理是概率性的,“看起来对”不等于”真的对”。有了验证手段(测试套件、lint、截图对比),Claude 可以观察到客观事实然后自我修正。这把 Agent 从”盲飞”变成”有仪表盘的飞行”——从依赖模型判断力变成依赖工具反馈,质量飞跃。

2. 干净会话 > 长会话 + 纠正

长会话积累了大量失败尝试和纠正——这些都是”噪音”,占用上下文空间并干扰模型判断。模型可能在纠正中建立错误的关联(“上次这个方法不行,但这次可能又试了”)。干净的会话没有这些包袱——200 行的 CLAUDE.md + 一个清晰的初始 prompt 比 2000 token 的纠正历史更有效。上下文窗口角度:纠正历史浪费的空间本可以用于实际工作。

3. Plan Mode 的核心价值

Plan Mode 浪费的是”执行速度”——你多花一步来规划而非直接动手。节省的是”返工成本”——一个好的计划避免了多次错误实现和回滚。对于复杂任务(跨多文件重构、架构变更),Plan Mode 的 ROI 极高;对于简单任务(改 typo),跳过计划直接做。Ctrl+G 可以在编辑器中修改计划——这意味着你可以精确控制 Claude 的行动路径。

4. JS→TS 迁移工作流

(1) Plan Mode 做整体评估:哪些文件可以独立迁移、哪些有依赖、tsconfig.json 配置策略 (2) 按依赖图从底层开始(utils → services → routes),每次迁移一个文件——/clear 分隔每个文件的迁移任务(避免上下文膨胀)(3) 每次迁移后跑 tsc --noEmit(验证手段)(4) 用 CLAUDE.md 记录迁移规范(类型定义约定、any 使用策略、已迁移文件列表)(5) 复杂文件用 SubAgent 先分析再迁移。

5. Claude 忽略 API requestId 规则

可能原因:(1) 规则表述太笼统(“所有 API 响应”没有指定具体文件和函数)(2) CLAUDE.md 过长导致遵守率下降 (3) 规则和其他指令冲突。解决:(a) 把规则改得更具体:“在 src/api/handlers/ 下所有 handler 的返回值中必须包含 requestId: crypto.randomUUID()” (b) 迁移到 .claude/rules/api-handlers.md 并设 paths: ["src/api/**/*.ts"](条件加载减少噪音)(c) 用 PostToolUse Hook 在编辑后自动检查是否包含 requestId(确定性验证)。