主题
01.5 模型选择与用量管理
模型不是"越贵越好",是"越贵越慢越费额度"。选型是工程决策。
读完你能做什么:给定任务类型立刻选对模型,并设计出一套不会在关键时刻断粮的额度策略。
一、模型矩阵
| 别名 | 完整 ID | 相对能力 | 相对速度 | 定位 |
|---|---|---|---|---|
opus | claude-opus-5 | 最强 | 最慢 | 复杂推理、架构设计、疑难 debug |
sonnet | claude-sonnet-5 | 强 | 中 | 日常主力,绝大多数任务的默认选择 |
haiku | claude-haiku-4-5-20251001 | 中 | 最快 | 批量、简单、高频调用 |
fable | claude-fable-5 | 强(创作向) | 中 | 创意写作、叙事 |
二、选型决策表
| 任务类型 | 推荐 | 理由 |
|---|---|---|
| 跨 20+ 文件的架构重构 | opus | 需要同时持有大量状态并推理依赖关系 |
| 难以复现的并发 bug | opus | 需要构建复杂因果链 |
| 技术方案设计与权衡 | opus | 多约束优化 |
| 日常写功能、改 bug | sonnet | 能力足够,速度快一倍以上 |
| 代码 review | sonnet | 模式识别任务,Sonnet 很强 |
| 写文档、写测试 | sonnet | 结构化生成 |
| 批量格式转换、分类、抽取 | haiku | 简单任务,速度和成本决定体验 |
| 大量文件的初筛("哪些文件跟支付有关") | haiku | 用在 subagent 里做扫描 |
| 小说、剧本、文案 | fable | 针对创作场景优化 |
2.1 一条实用启发式
先用 Sonnet。当且仅当 Sonnet 连续两次给出不满意的结果,且你确认提示词本身没问题时,才换 Opus。
大多数"模型不行"的场景,真实原因是提示词没说清、或上下文里缺关键信息。换更贵的模型往往只是掩盖问题。先检查 02.7 反模式清单。
三、在各入口切换模型
3.1 网页 / 桌面客户端
输入框附近的 [Model Selector] (模型选择器) 下拉。切换只影响之后的消息,已有回复不会重算。
3.2 Claude Code
bash
# 启动时指定
claude --model opus
claude --model claude-sonnet-5
# 会话中切换
> /model
# 设置持久默认值(~/.claude/settings.json)json
{
"model": "sonnet"
}3.3 混合模型策略(Claude Code 进阶)
在 Claude Code 中,可以让主会话用 Opus,子代理用 Haiku,把"广撒网"的成本压到最低:
markdown
---
name: file-scanner
description: 在大型仓库中快速定位与给定关键词相关的文件,返回文件路径列表
model: haiku
tools: Glob, Grep, Read
---
你负责快速扫描。只返回文件路径和一句话说明,不要分析代码细节。主会话(Opus)负责推理,扫描(Haiku)负责跑腿。详见 06.4 Subagents 子代理编排。
四、Effort Level:另一个被忽略的旋钮
在 Claude Code 中,除了换模型,还可以调整同一个模型的推理投入:
bash
claude --effort low # 快,适合简单任务
claude --effort medium
claude --effort high # 深度推理
claude --effort xhigh
claude --effort max会话中:
text
> /effort可用级别取决于模型。 这个旋钮的性价比常常高于换模型 —— sonnet --effort high 在很多任务上接近 opus --effort medium,但更快。
五、用量管理
5.1 查看当前消耗
| 入口 | 方法 |
|---|---|
| 网页 / 桌面 | [Settings] (设置) → [Usage] (用量) |
| Claude Code | /usage(别名 /cost、/stats) |
Claude Code 的 /usage 在 Pro / Max / Team / Enterprise 计划上还会按 skill、subagent、plugin、MCP server 分类展示消耗 —— 这是定位"哪个自动化在偷偷烧额度"的最快方式。
5.2 额度耗尽的常见元凶
| 元凶 | 症状 | 对策 |
|---|---|---|
超长 CLAUDE.md | 每次会话开头就吃掉几千 token | 控制在 200 行内,长内容改成 Skill |
| 未压缩的长会话 | 每一轮都重发全部历史 | 定期 /compact 或 /clear |
| 加载了大量 MCP 工具 | 工具定义常驻上下文 | 启用 tool search(见 07.5) |
无脑 [Retry] (重新生成) | 同一个提示词重跑 N 次 | 先改提示词 |
| Opus 跑简单任务 | 慢且贵 | 降级到 Sonnet / Haiku |
| 子代理无限展开 | 后台代理一直在跑 | 用 --max-turns、--max-budget-usd 设限 |
5.3 在脚本中设置硬性预算上限
bash
# print 模式下限制花费上限
claude -p --max-budget-usd 5.00 "重构 src/legacy 下的所有回调为 async/await"
# 限制最大轮数
claude -p --max-turns 10 "修复 CI 中失败的测试"--max-budget-usd 会把子代理的开销一并计入。v2.1.217+ 在达到上限后还会停止仍在运行的后台子代理。
5.4 模型降级链
主模型过载或不可用时自动降级:
bash
claude --fallback-model sonnet,haiku持久化到设置:
json
{
"model": "opus",
"fallbackModel": "sonnet,haiku"
}六、成本直觉
在没有精确定价的情况下,用这个粗略比例做决策心算:
text
Haiku : Sonnet : Opus ≈ 1 : 5 : 25 (数量级参考,非精确值)推论:
- 一次 Opus 调用 ≈ 25 次 Haiku 调用。如果一个任务能被拆成"Haiku 扫描 + Opus 决策",往往比"Opus 全干"更快更省。
- 上下文长度直接乘算成本。同一个问题,在 5 万 token 上下文里问,比在 5 千 token 上下文里问贵 10 倍。这是
/clear和/compact的真实价值。 - Prompt caching 可以把重复前缀的成本大幅降低,见 03.5 Prompt Caching 与成本工程。
七、一份务实的默认配置
~/.claude/settings.json:
json
{
"model": "sonnet",
"fallbackModel": "haiku",
"effortLevel": "medium"
}然后在需要时临时提升:
bash
# 遇到硬骨头
claude --model opus --effort high理由:把默认值设在"够用"档位,让升级成为一个有意识的动作,而不是默认状态。默认用 Opus 的人,通常在三周后开始抱怨额度。