Claude Code十大常见坑:新手必看的避坑省Token指南

Claude Code十大常见坑:新手必看的避坑省Token指南
张文保 更新 25 分钟阅读 1,730 阅读
本文目录
  1. 为什么第一件事就该写CLAUDE.md?
  2. 是不是所有任务都该用最强的Opus?
  3. 提示词模糊到底浪费了多少Token?
  4. 长对话为什么一定要用/compact?
  5. 哪些重复活该交给Hooks自动做?
  6. 一个超大任务为什么总是做不完?
  7. 你知道自己每天在Claude Code上花多少钱吗?
  8. 频繁的权限弹窗怎么一次性解决?
  9. 不用Worktree并行,你在浪费什么?
  10. 什么时候不该用Claude Code?
  11. 怎么自检你有没有踩这些坑?
  12. 常见问题解答
  13. 用Sonnet代替Opus,质量会明显下降吗?
  14. Hooks配置为什么我照教程写了却不触发?
  15. /compact和/clear有什么区别?
  16. --worktree后面到底该写什么?
  17. 预批准命令会不会有安全风险?
  18. 这些省钱技巧叠加起来大概能省多少?
  19. 新手十条改不过来,最该先改哪几条?

大多数人用Claude Code烧钱、低效,不是因为不会写代码,而是栽在十个几乎人人都犯的习惯上:用最贵的Opus去跑改改文案的小活、提示词含糊到AI只能反复猜、对话拖到几万token还不压缩、明明能让Hooks自动跑的lint偏要手动确认八百遍。这些坑单看都不起眼,叠在一起就是账单翻倍、效率减半。这篇把每个坑的根因、官方正确做法、能省多少都拆给你看——其中两处广为流传的配置写法,连不少教程都抄错了。

保哥带团队上手Claude Code这一年多,见过太多人把一个利器用成了碎钞机。问题极少出在能力上,全在习惯上。

先说个反常识的观察:很多人以为“省Token”是抠门,其实它和“提效率”是同一件事的两面。让AI少猜、少返工、少在无关上下文里打转,账单自然下来,活也干得更快更准。换句话说,下面这十条不是十个省钱小技巧,而是十个把Claude Code从“能用”调到“好用”的开关。它们按踩的人多、影响大排序,每一个都给你讲清楚为什么会踩、官方推荐怎么做、做对了大概能省多少。看完对照自查,省下的Token和时间会很可观。

为什么第一件事就该写CLAUDE.md?

最高频的坑,没有之一:项目根目录连个CLAUDE.md都没有,就直接开干。

CLAUDE.md是Claude Code每次会话自动读取的项目说明书。没有它,AI对你的技术栈、目录约定、命名规范、怎么跑测试一无所知,只能一边摸索一边问,或者干脆按通用习惯瞎猜,然后你再一遍遍纠正。这中间浪费的来回,全是真金白银的Token。

正确做法是花十分钟写一份,把这些写进去:用的什么框架和语言版本、代码风格约定、常用命令(怎么装依赖、怎么跑测试、怎么构建)、哪些目录是干嘛的、有什么坑要避开。一份最朴素的CLAUDE.md骨架就长这样:

# 项目说明
- 技术栈:Next.js 14 + TypeScript + Tailwind
- 包管理器:用 pnpm,别用 npm
- 跑测试:pnpm test,单测在 __tests__ 目录
- 构建:pnpm build,产物在 .next
- 约定:组件用函数式,禁止 any,提交前必过 lint

就这么几行,AI就不会再用npm装依赖、不会再写出一堆any、知道改完要自己过lint。还有个进阶点很多人不知道:CLAUDE.md是分层级的,项目根目录放一份团队共享的,你个人的偏好可以放用户级的,甚至子目录里能再放一份只对那块代码生效的。越贴近代码的约定写得越具体,AI跑偏的概率越低。

但也别走到另一个极端:把CLAUDE.md写成上万字的长篇大论。它每次会话都会被完整读进上下文,写太长本身就在烧Token,还容易把真正重要的约定淹没在废话里。诀窍是只写“AI靠自己猜不出来、猜错了代价又大”的那些点——你们团队的特殊约定、容易踩的坑、非标准的命令,而不是把语言官方文档照搬一遍。一份精炼的CLAUDE.md,往往比一份事无巨细的更管用。一份像样的CLAUDE.md,实测能让AI的返工轮次直接砍掉将近一半——它不再猜,而是照着你的规矩来。怎么写一份好的CLAUDE.md,可以参考Claude Code安装配置完全指南里的项目上下文部分。这一步是所有优化的地基,地基不打,后面省的都是小钱。

是不是所有任务都该用最强的Opus?

很多人开着Opus一用到底,改个错别字、调个文案、写段简单脚本,全交给最贵的模型。这是账单失控的头号原因。

讲清楚价格就明白了。按Anthropic官方定价页2026年的数字,每百万token的费用大致是:

模型输入(每百万token)输出(每百万token)适合的活
Opus约5美元约25美元架构设计、复杂调试等硬骨头
Sonnet约3美元约15美元日常开发、改代码、写测试
Haiku约1美元约5美元批量小活、简单分类、格式整理

也就是说,同样的活用Opus跑,比Sonnet贵约1.67倍,比Haiku更是贵了五倍。注意这是Opus在2025年底大幅降价之后的数字,早些时候差距还要夸张得多——所以网上那些“Opus贵十倍”的老结论现在已经不准了,得按最新价目表算。

把这笔账落到具体场景:假设你一天有100次交互,八成是改改代码、补补测试的常规活。全程挂着Opus,和把这八成切到Sonnet相比,月底账单的差距往往是好几百块的量级。对个人开发者,这就是一顿大餐和一杯咖啡的区别;对小团队按人头乘起来,一年下来够再招个实习生了。

保哥这边一个做跨境电商SaaS的客户就吃过这个亏。团队五个开发,图省事统一默认Opus,前两个月的API账单看得财务直皱眉。后来做了一件特简单的事:在共享的项目配置里把默认模型设成Sonnet,约定只有遇到真正复杂的架构问题才手动切Opus。下个月账单直接腰斩,而代码质量肉眼看不出差别——因为他们八成的活本来就用不着Opus那点额外推理力。模型选择从来不是抠门,是把钱花在真正需要算力的地方。

正确姿势是按任务难度分级派模型,在会话里随时切:

/model sonnet   # 日常开发、改代码、写测试,默认就用它
/model opus     # 真正烧脑的架构设计、复杂调试,再上Opus

日常80%的活Sonnet完全够用,又快又省;只有遇到需要深度推理的硬骨头才切Opus。简单到不行的批量小活,Haiku更划算。光是把默认模型从Opus换成Sonnet,大多数人的月度成本就能降三到四成。再叠上提示词缓存(最高省90%)和批处理(省50%),账单还能再压一大截。

提示词模糊到底浪费了多少Token?

“帮我修一下那个登录的bug”——这种提示词,AI拿到手只能先满仓库找“那个bug”是哪个,读一堆文件、做一堆假设,来回猜好几轮才摸到你真正想要的。每一轮猜测都在烧Token。

对比一下精确版:“src/auth/login.ts第42行,用户密码含特殊字符时报Invalid credentials,但密码其实是对的,帮我排查转义问题”。给了文件、行号、报错、现象,AI一步到位,不用猜。

规律很简单:你省下的每一个描述细节,AI都会用三到四倍的Token去猜回来。提示词里尽量带上具体文件名、行号、完整报错信息、复现步骤。

还有两个让提示词更精准的利器。一个是用@直接引用文件或目录,比如解释一下@src/utils/auth.js的逻辑,AI立刻把整个文件内容纳入上下文,不用自己满仓库找。另一个是贴图:报错截图、设计稿、出问题的页面,直接拖进对话或粘贴,AI看图比看你干巴巴的文字描述准得多。

再举个对比就更直观。模糊版:“这个接口有点慢,优化一下。”AI得先满世界找是哪个接口、慢在哪、慢的标准是什么,几轮下来还未必对路。精确版:“@src/api/products.ts的列表接口,500条数据要响应1.2秒,怀疑是N+1查询,帮我定位并改成批量查询。”给了文件、现象、量化指标、初步假设,AI直接奔着问题去,一轮见效。两条提示词解决同一个问题,前者可能烧掉后者三四倍的Token还更慢。把“让AI少猜”当成一种习惯——给文件、给行号、给报错、给图、给你的初步判断——把话说清楚这件事,是性价比最高的省钱动作,零成本,立竿见影。一句话总结:你在提示词上多花的十秒钟,省的是AI好几轮的瞎忙。

长对话为什么一定要用/compact?

一个对话从早聊到晚,几十轮下来,前面那些早就用不上的探索、读过又丢的文件内容,全堆在上下文里。这里有个很多人没意识到的计费机制:每发一条新消息,整段对话历史都要作为输入重新计费一次。也就是说,上下文里塞了五万token的陈年废料,你哪怕只问一句话,这五万token也跟着一起被算钱。对话越长,这个“历史税”越重,越拖越贵,AI还容易被早就过时的信息带偏,给出风马牛不相及的回答。

解药是两个命令,分场景用:

/compact   # 压缩历史:保留关键结论,把冗余过程裁掉,接着聊
/clear     # 彻底重置:当前任务收尾、要开全新一摊活时用

/compact会把长对话里的精华提炼出来、把废料丢掉,上下文一下子瘦身,长会话能省下两到三成的Token。一个任务告一段落、要换一件完全无关的事时,直接/clear开新会话更干净。

两者的取舍要拎清:/compact保留任务连续性,适合同一件事干很久、但前面的探索过程已经用不上的场景;/clear则是彻底翻篇,速度最快、最省,但之前的上下文全没了。一个简单的判断:接下来要做的事还依赖刚才聊的内容吗?依赖就compact,不依赖就clear。另外,当上下文快被填满时Claude Code也会自动提示压缩,但别等它提醒——主动在合适的节点compact,比被动等系统出手更省,也更不容易在关键时刻被打断。养成手动管理上下文的习惯,是长时间使用Claude Code的基本功。这些命令的细节在Claude Code斜杠命令完全参考里有完整列举。

哪些重复活该交给Hooks自动做?

每次AI改完代码,你手动跑一遍lint、跑一遍测试、确认一下格式——这种机械重复,正是Hooks该接管的。不用Hooks,等于雇了个助理却所有杂事还自己干。

但这里有个广为流传的坑:网上一大半教程把Hooks的配置结构写成了扁平的一层,这是错的。官方的正确结构是两层嵌套——外层matcher匹配触发条件,内层hooks数组里才是真正要执行的命令,且每条命令要写明type。正确写法长这样:

{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "npm run lint"
          }
        ]
      }
    ]
  }
}

注意matcherhooks是平级的两个字段,命令藏在内层hooks数组里,而不是和matcher挤在同一层。那些把command直接塞在matcher旁边的扁平写法,配上去根本不会触发。这个两层结构在Claude Code官方Hooks文档里写得明明白白,可惜抄错的二手教程太多。

除了改完自动lint,Hooks还能玩得更狠。常用的事件有几个:PostToolUse在工具用完后触发,适合自动lint、自动格式化;PreToolUse在AI动手之前触发,适合事前守门——检测到它要改某个敏感文件(线上配置、数据库迁移脚本)就先挡下来让你确认。后者尤其值钱,比如这样一条,让AI每次准备写文件前先跑个自定义的检查脚本:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Write|Edit",
        "hooks": [
          {
            "type": "command",
            "command": "./scripts/guard.sh"
          }
        ]
      }
    ]
  }
}

这个guard.sh可以检查目标路径,碰到.env.production之类的就返回非零退出码把这次写入挡下来。事前拦一道,比改坏了再回滚安全得多。配置里还有几个细节容易踩:钩子的timeout单位是秒不是毫秒,按毫秒填会让会话卡很久;同一个事件可以挂多条钩子,它们会按顺序依次跑。把这些理顺,AI写完文件自动跑lint、提交前自动格式化、碰危险操作自动拦截,机械确认的轮次能砍掉三到五成。完整的Hooks用法和事件类型,见Claude Code Hooks完全指南

一个超大任务为什么总是做不完?

“帮我把整个用户系统重构一遍,加上权限、加上审计日志、再把测试补全”——这种一口塞进去的巨型任务,几乎注定烂尾。原因在于上下文窗口是有限的:AI一边读相关文件、一边生成代码、一边记着你的要求,这些全占着窗口。任务越大,要塞进窗口的东西越多,干到一半窗口满了,它就只能丢掉前面的细节硬着头皮往下写,结果就是东一块西一块、接口对不上、没一处是完整的。这不是AI不行,是你给的活超出了它一次能稳稳端住的量。

正确做法是把大任务拆成五到六个聚焦的小步骤,一步一确认:先抽数据模型,跑通;再加权限中间件,跑通;再补审计日志,跑通……每一步都小到能在一个清爽的上下文里干完、验证、提交。拆小不是麻烦,是让每一步都做得完、做得对。

有个省心的中间方案:拿不准怎么拆,就先让Claude进计划模式(按Shift+Tab切,或启动时带--permission-mode plan)。它会先读代码、给你一份分步计划,你审一遍、调整顺序,再让它照着执行。这一步把“边想边做做到一半发现方向错了”的浪费提前堵住了。还有个判断标准很实用:如果一个步骤你自己都说不清“做完长什么样、怎么验证它对了”,那它就还不够小,继续拆。

保哥见过一个做独立站的开发,想一口气让Claude把整个结账流程重写——含购物车、优惠券、支付回调、订单状态机。第一次直接甩一大段需求进去,跑到一半上下文耗尽,生成的代码购物车和支付对不上、状态机缺了好几个分支,几乎没法用,白烧了一大笔Token。第二次他学乖了:先用计划模式让Claude列出六个步骤,一步步来,每步跑通测试再进下一步。同样的活,第二次又快又稳,返工几乎为零。差别不在AI,在拆没拆。这和前面说的用Worktree并行其实是一体两面:复杂工作要么拆成串行的小步,要么拆成并行的隔离任务,就是别一锅烩。

你知道自己每天在Claude Code上花多少钱吗?

很多人从来没看过/cost,对自己的消耗毫无概念,等月底账单出来才肉疼。这是典型的“不量化就无法优化”。

/cost   # 查看当前会话的Token消耗与花费

养成每完成一个任务瞄一眼/cost的习惯,你会很快建立起直觉:哪类任务费钱、哪种提示词浪费、切到Sonnet后差距有多大。订阅套餐用户更要关注用量额度,避免高峰期突然被限流卡住活儿。心里有了这杆秤,前面那些省钱动作你才会真去执行,而不是嘴上知道。

更进一步的做法是定期复盘。每周花两分钟回看这一周的消耗结构,你会发现钱主要烧在哪几类任务上——很可能就是那几个本该切Sonnet却用了Opus的、或者那几次提示词含糊导致反复猜的。把这些高耗点揪出来针对性改,比泛泛地“注意省钱”有效得多。光是建立成本意识、顺手调整,通常就能再省两到三成。看得见,才管得住——这是一切优化的前提,量化不了的东西你永远改进不了。

频繁的权限弹窗怎么一次性解决?

每跑一条git status、每跑一次npm test,都弹个框问你“允许吗”,点到手软,工作流被切得稀碎。尤其是让AI自主跑一长串操作时,它每一步都停下来等你点确认,所谓的“自动化”就成了“半自动还得人盯着”,体验大打折扣。很多人就这么忍着,其实安全又省心的解法早就有:把你信任的常用命令预先批准。

在设置里配一份允许清单,把那些读操作、测试、构建之类明确安全的命令加进去:

{
  "permissions": {
    "allow": [
      "Bash(git status)",
      "Bash(npm test:*)",
      "Bash(npm run lint:*)"
    ]
  }
}

注意几个细节:npm test:*这种带通配符的写法能一次放行一整类命令,不用一条条列;这份配置放在项目的.claude/settings.json里就只对当前项目生效,放用户级的就全局通用。反过来,你也可以用deny列表把某些命令永久拉黑,比如明确禁止rm -rf、禁止直接推main分支,给自己上一道保险。

配好之后,这些命令AI直接跑,不再打断你;而真正有风险的操作(删文件、改配置、推远程)依然会弹窗确认。预批准的关键是只放行明确安全、可逆的命令,破坏性操作绝不进白名单。有个反例值得警醒:图省事把Bash(*)整个放开,等于把方向盘交出去还蒙上眼,AI一个误操作就可能删错东西。把弹窗从“无差别打断”收敛成“只在该谨慎时出现”,工作流顺畅度立刻上一个台阶,而安全底线一点没松。

不用Worktree并行,你在浪费什么?

单会话里一会儿修bug、一会儿写新功能、一会儿又去重构,任务在同一个上下文里来回切,互相污染,AI经常把A任务的假设带到B任务上。你浪费的,是本可以并行的产能。

Claude Code内建了Worktree支持,一条命令就能开一个隔离的工作目录加独立分支:

claude --worktree fix-login      # 一路专修登录bug
claude --worktree feature-export # 另一路专写导出功能

这里也得纠正一个常见错误:--worktree后面跟的是worktree的名字,不是任务描述。不少教程写成claude --worktree "帮我加个导出功能",把整句任务塞进去是不对的,名字给个feature-export这样的短标识就行,这一点Claude Code官方Worktrees文档说得很清楚。每路任务在自己的隔离目录里跑,互不干扰,一个人能同时推三四条线。

这里有个新手必栽的坑要提前说:worktree是一份全新checkout,被gitignore的.env这类本地文件不会自动跟过来,新目录里一跑就报缺环境变量。官方的解法是放一个.worktreeinclude文件把它们自动带进去。完整的并行用法、环境变量怎么带、怎么自动清理,见Claude Code Worktree并行开发完全指南。把串行的脑力切换换成并行的隔离推进,是高手和新手在产出上拉开差距的关键一招。

什么时候不该用Claude Code?

最后一个坑反着说:把Claude Code当百科搜索引擎用。“JavaScript的map和forEach有什么区别”“HTTP状态码302是什么意思”——这类纯知识问答,让一个代理型工具去回答,它会真的去翻你的项目、做一堆其实没必要的动作,既慢又费额度。

分清楚工具的定位:常识性、知识性的问题,查文档、用普通搜索更快更省;Claude Code的价值在于“代你动手”——读你的代码、改你的文件、跑你的命令、完成需要操作项目的实际任务。把它当搜索引擎,是用牛刀杀鸡还嫌刀钝。

举个对比就清楚了。问“Python里列表推导式怎么写”,这是纯知识点,自己搜一下、问个轻量模型几秒钟搞定,没必要动用Claude Code去翻你的项目;但问“按我项目里现有的写法,把@src/data.py这个循环改成列表推导式”,这就该交给它——因为它要读你的代码、按你的风格改。同一个知识点,前者是背书、后者是动手,差别全在“要不要碰你的项目”。

这条边界也别走极端。有一类问题问Claude Code反而最合适:关于它自己能力的问题。“你能帮我创建PR吗”“权限是怎么管理的”“怎么用MCP”——这些它内置了最新文档,回答又快又准,不用你去翻官网。真正要避开的,是那种和你项目八竿子打不着、纯背知识点的提问,那才是浪费代理能力。说白了,让它干“需要看你项目、动你文件”的活,知识点自己查或者问它的能力本身,分寸就拿对了。该让它干活时让它干活,该自己查的别占着它的额度,这条边界拎清了,每一分钱才花在刀刃上。

这十个坑,单独拎出来每个都简单到“早知道了”,但保哥见过太多老手依然天天在犯——道理懂和习惯成,中间隔着的就是刻意练习。挑你最常踩的两三条,这周就改过来,下个月的账单和效率会替你说话。

怎么自检你有没有踩这些坑?

把上面十条压缩成一份自查清单,每条对照问自己一句:

  • 项目里有没有一份像样的CLAUDE.md?
  • 日常小活是不是还在用Opus,没切Sonnet?
  • 提示词有没有带上文件、行号、报错?
  • 长对话有没有及时/compact
  • 重复的lint/测试有没有交给Hooks(而且配的是正确的两层结构)?
  • 大任务有没有拆成五六个小步?
  • 有没有定期看/cost
  • 常用安全命令有没有预批准?
  • 多任务有没有用--worktree并行?
  • 是不是还在拿它当搜索引擎?

别想着一口气十条全改,那又是犯了“超大任务”的老毛病。挑你中招最狠、最容易改的两三条先动手——对大多数人来说,就是把默认模型切到Sonnet、给项目补一份CLAUDE.md、长对话记得compact这三条,投入最小、回报最大。这周先把这三条变成肌肉记忆,下周再加两条。习惯是一条条养出来的,不是一天全换的。

十条里只要有三条以上中招,你的Token和时间就在悄悄漏。这些坑之所以普遍,正是因为每一个单看都“不至于”——不写CLAUDE.md也能跑、用Opus也出得了活、不compact也不报错。可正是这些“不至于”,日积月累成了账单上多出来的一大截和效率上凭空蒸发的小半天。逐条堵上,省下来的不止是钱,更是把一个利器真正用出利器的样子。AI工具的差距,从来不在工具本身,而在用的人有没有把这些不起眼的习惯抠到位。

常见问题解答

用Sonnet代替Opus,质量会明显下降吗?

日常开发、改代码、写测试这类任务,Sonnet的质量完全够用,且更快更省。只有真正需要深度推理的架构设计、复杂调试,Opus才有明显优势。按任务难度切模型,而不是一律用最贵的,是性价比最优解。

Hooks配置为什么我照教程写了却不触发?

大概率是结构写错了。正确结构是两层嵌套:外层matcher匹配条件,内层hooks数组里放命令,每条命令带type字段。把command直接塞在matcher旁边的扁平写法是错的,根本不会触发,这是网上流传最广的一个坑。

/compact和/clear有什么区别?

/compact压缩当前对话,保留关键结论、裁掉冗余历史,适合长任务中途瘦身接着干;/clear彻底重置会话,适合一个任务收尾、要开全新一摊无关的活时用。前者续命,后者重开。

--worktree后面到底该写什么?

写worktree的名字,一个短横线连接的标识,比如feature-export、fix-login,不是任务描述。把整句任务塞进去是错的写法。想偷懒可以完全省略名字,Claude会自动生成一个。

预批准命令会不会有安全风险?

只要你只放行明确安全、可逆的命令(读状态、跑测试、构建),就很安全。删文件、改配置、推远程这类破坏性操作绝不加进白名单,它们会照常弹窗确认。关键是分清哪些命令可逆、哪些不可逆。

这些省钱技巧叠加起来大概能省多少?

因项目而异,但把模型分级、提示词精确、定期compact、Hooks自动化几条都做到位,整体Token消耗通常能降三到五成,再叠上提示词缓存和批处理还能更多。省的不只是钱,返工变少后效率也明显提升。

新手十条改不过来,最该先改哪几条?

先改投入小、回报大的三条:把默认模型从Opus切到Sonnet,给项目补一份精炼的CLAUDE.md,长对话记得用compact压缩。这三条几乎不花力气,却能立刻砍掉一大块成本和返工。养成习惯后再逐步加上Hooks自动化和worktree并行。

FAQPage + Article AI 引用友好版

TL;DR · 60–80 字摘要 · 适用 ChatGPT / Perplexity / Gemini / 文心 引用

Claude Code十个高频踩坑:没写CLAUDE.md、一律用Opus、提示词模糊、不用compact、Hooks配置抄成扁平结构、大任务不拆、不看cost、不预批准命令、不用worktree、当搜索引擎,逐条给官方正确做法。

关键实体 · Key Entities

  • Claude Code
  • AI编程
  • 效率工具
  • Token优化
  • 开发技巧
  • AI编程与工具链

引用元数据 · Citation Metadata

title:       Claude Code十大常见坑:新手必看的避坑省Token指南
author:      张文保 (Paul Zhang) — PatPat SEO 经理
url:         https://zhangwenbao.com/claude-code-mistakes.html
published:   2026-02-25
modified:    2026-06-01
source-type: First-hand expert commentary
language:    zh-CN
license:     CC BY-NC-SA 4.0 (要求保留原文链接与作者归属)
分享到
标签
版权声明

本文标题:《Claude Code十大常见坑:新手必看的避坑省Token指南》

本文链接:https://zhangwenbao.com/claude-code-mistakes.html

版权声明:本文原创,转载请注明出处和链接。许可协议: CC BY-NC-SA 4.0

继续阅读
发表评论
分享到微信 或在下方手动填写
支持 Ctrl + Enter 提交