《Claude Code 工程化实战》第 31 讲 Claude Code 性能优化

发布时间:2026/7/21 7:50:13
《Claude Code 工程化实战》第 31 讲 Claude Code 性能优化 本讲摘要· Claude Code 性能优化不是加机器的问题而是用对模型、管好上下文、复用连接、善用回滚的系统工程。本讲从模型分级选型、上下文压缩、Token 经济、Checkpointing 回滚、MCP 连接复用、实战调优剧本六个维度系统拆解省时间、省钱、少返工的工程方法论。学完本讲你应该能针对一个真实项目的月账单做出可量化的优化方案并在 5 步之内把单次任务的 Token 消耗压到原来的 30% 以下。1. 模型分级选型不是每件事都需要 OpusClaude Code 支持四种模型档位合理选型是性能优化里 ROI 最高的一招。模型适用场景相对速度相对成本何时别用haikulint、格式化、简单补全、grep 类查询⚡⚡⚡ 最快 最低复杂多文件重构、架构设计sonnet日常开发、bug 定位、单文件改写⚡⚡ 较快 中等需要 100 文件联动的巨型重构opus架构设计、跨模块推理、长链路任务⚡ 较慢 最高简单补全、单行修改inherit跟当前账户/团队档位走、自动伸缩——想精确控制单次成本时实战代码块 1 — 用 haiku 跑轻量任务。把模型选择变成项目级约定而不是每次手动指定。# .claude/skills/lint-fast/SKILL.md --- name: lint-fast description: 跑 ESLint Prettier 校验用 haiku 模型秒回。触发关键词lint, format, check style, 格式化, 检查代码风格。 model: haiku tools: [Bash, Read] --- # Lint Fast Skill 只跑以下命令不做任何修改 bash pnpm run lint:check返回结果时通过 → 简短回复 “LGTM ✓”失败 → 列出错误文件 行号不在此 Skill 中自动修复把 Skill 的 model 字段显式锁死子代理或 Hook 在调用 lint 时就永远走最便宜的模型。即使父 Agent 正在用 opus 处理复杂任务子代理也能并行用 haiku 校验代码风格总耗时反而更短——因为不必等主对话让出 quota。 回想第 8 讲讲的并行不悖——子代理天然适合跑轻量模型。一个典型组合 - **主 Agent** (opus)负责架构设计、跨文件推理、写复杂业务逻辑 - **子 Agent 1** (haiku)负责 lint、格式化、单测生成 - **子 Agent 2** (sonnet)负责单文件 bug 定位、简单改写 三档模型同时跑主对话只承担最贵的部分总账单立刻降一半以上。 ⚠️ **坑 1** · 以为默认 inherit 就够——很多企业账户默认 inherit 走的是 opus 档如果不在 Skill 里显式锁 model: haiku你可能在不知不觉中烧掉 10× 的钱。 ## 2. 上下文压缩Token 才是最贵的资源 Claude Code 的对话是上下文窗口的累积游戏聊得越久Token 越多响应越慢账单越贵。三个常用压缩手段 | 手段 | 触发方式 | 保留什么 | 丢弃什么 | |---|---|---|---| | /clear | 用户手动输入命令 | CLAUDE.md、项目记忆 | 整段对话历史 | | 摘要压缩 | 自动每 50 轮触发或 /compact | 关键决策、文件路径、错误信息 | 过程性输出、已读文件内容 | | Skill 渐进式披露 | 自动按需加载 | 当前任务需要的 Skill 正文 | 未触发的 Skill 全文 | **实战代码块 2 — 自动摘要压缩脚本**。如果你想让团队每个人都用上 /compact可以做成一个 pre-commit hook bash # scripts/auto-compact-reminder.sh #!/usr/bin/env bash # 检测当前会话对话轮数超过 40 轮时提醒 compact set -euo pipefail TURNS_FILE.claude/.session-turns mkdir -p .claude if [ ! -f $TURNS_FILE ]; then echo 0 $TURNS_FILE fi CURRENT$(cat $TURNS_FILE) NEXT$(CURRENT 1) echo $NEXT $TURNS_FILE if [ $NEXT -ge 40 ] [ $NEXT -lt 42 ]; then echo ⚠️ 本会话已对话 ${NEXT} 轮Token 累积较多。 echo 建议执行claude /compact echo 或claude /clear (完全重置保留 CLAUDE.md) fi把这个脚本挂到 Hook 的UserPromptSubmit事件上参考第 17 讲每次用户提交就自增一次计数到阈值时弹个提醒。这比让用户自己记该 compact 了靠谱得多。2.1 上下文压缩的边界摘要压缩会丢失过程性细节——比如你让 Agent 改 10 个文件它读完这 10 个文件的内容会留在上下文里压缩后只剩修改了哪些文件 改了什么内容本身没了。如果接下来还要基于这些文件的内容继续工作就别压缩改成开新会话用 CLAUDE.md 衔接。⚠️坑 2· 在长任务中间无脑/compact——压缩后 Agent 忘了刚才读过的文件内容会重新去读反而多花一次 Read 工具调用的 Token。原则任务有连续性就别 compact有阶段切换就果断 clear。3. Token 经济批处理 并行 工具裁剪Token 消耗有三大来源模型推理输出、工具调用输入输出、系统提示每次会话固定。我们能压的主要是前两项。实战代码块 3 — 批处理多文件 review。不要让 Agent 一次只读一个文件而是让它一次性把整个目录的 diff 拉过来# 错误做法让 Agent 一个个文件地问 User: 请 review src/ 下的所有文件 # Agent 会调 30 次 Read每次都是独立工具调用 # 每次 Read 都把工具描述 文件路径塞进上下文浪费 1000 Token # 正确做法让 Agent 一次性看全 User: 请用 git diff HEAD~1 -- src/ 看今天改了什么review 一遍 # 一次 Bash 调用把所有 diff 拉到一个输出里 # Agent 直接基于这个 diff 写 reviewToken 消耗 -60%三个具体技巧grep 优于 Read要看 30 个文件里是否包含某 pattern直接grep -rn pattern src/不要让 Agent 一个个 Readgit diff 优于 file 全文review 改动只关心 diff不用看未改的部分批处理优于循环一个 Bash 里跑 5 个命令比 5 个 Bash 调用便宜 5 倍因为系统提示只算一次⚠️坑 3· 在 prompt 里堆请严格按照以下 12 条要求……——每条要求都是 Token而且模型对长 prompt 的遵从度反而下降。原则prompt 短一点 Skill 长一点让 Skill 按需加载。4. Checkpointing 与回滚用对方法少返工Claude Code 的/rewind命令或者用 git stash/branch 配合能在 Agent 改坏文件时一键回退这是性能优化里省时间维度最被低估的一招。实战代码块 4 — 性能监控片段。建议每个项目都开一个轻量监控看自己实际跑得怎么样# .claude/hooks/log-usage.sh#!/usr/bin/env bash# 每次 Agent 完成任务时记录耗时与 Token 估算# 挂到 Stop 事件set-euopipefailLOG.claude/usage.logTIMESTAMP$(date-Iseconds)TURNS$(cat.claude/.session-turns2/dev/null||echo0)# 简单估算每轮平均 2000 tokenEST_TOKENS$(TURNS *2000)echo${TIMESTAMP}turns${TURNS}est_tokens${EST_TOKENS}$LOG# 周报统计过去 7 天的总 Token 估算if[$(date%u)1];thenecho 本周 Token 估算awk{sum$NF} END {print sum token}$LOG|tail-7fi改文件前先 commit让 Agent 改之前先git add -A git commit -m before: $TASK这样改坏了git checkout一秒回退大改前先开分支跨 20 文件的重构新开git checkout -b refactor/xxx失败就git checkout main git branch -D用/rewind处理误操作Agent 误删文件、跑错命令时直接/rewind回到上一步比手动回退快 10×回滚的性能意义在于Agent 返工一次的成本通常比小心翼翼地慢慢改高 5×。大胆改、快回滚反而是最高效的节奏。⚠️坑 4· 让 Agent 改文件之前没有 commit——改坏了一脸懵不知道哪一步出错只能让 Agent 自己修复陷入修一个 bug 引入三个 bug的死循环。5. MCP 连接复用别每个会话都重握手每个 MCP server 第一次连接时都要握手、鉴权、加载工具列表这一下可能花掉 3–5 秒 几千 Token。如果你在同一个项目里反复开会话可以用以下方式复用Skill 化 MCP 配置把常用 MCP server 的配置写到 Skill 的mcpServers字段首次加载后缓存工具列表用--continue续接claude --continue会复用上次的 MCP 连接而不是重新握手长期任务用 SDKAgent SDK 里的ClaudeCodeOptions.mcp_servers可以在进程内复用连接适合跑长链路任务MCP 复用是省时间维度收益最大的优化之一。一个本来 30 秒启动的任务复用后 3 秒启动体感像本地应用。6. 实战调优剧本从月账单到周预算如果你的 Claude Code 月账单开始超出预期按这个剧本做 5 步优化通常能把成本压到原来的 30–50% 性能调优剧本 · 5 步法注意区分基线和优化——基线是达成业务目标所需要的最低成本优化是在基线之上锦上添花。如果你的 Agent 经常返工先解决返工问题改 prompt、加测试、明确边界再做 Token 优化。否则省下来的 Token 都会被返工吃掉。优化维度具体动作预期收益实施难度模型分级Skill 锁model: haiku/sonnet-40% 成本★☆☆上下文压缩40 轮自动提醒 /compact-20% 成本★☆☆批处理grep / git diff 替代 Read-30% Token★☆☆Checkpointing改前 commit 用 /rewind-50% 返工时间★☆☆MCP 复用Skill 化 --continue-90% 启动时间★★☆7. 一句话备忘⚙️ 性能优化的本质不是让模型变快而是让对的模型在对的时间处理对的事。