name: 模型选择 description: 为自定义代理任务选择合适模型。用于在Haiku、Sonnet和Opus之间选择,优化成本与质量权衡,或匹配模型能力到任务复杂度。 allowed-tools: Read, Grep, Glob, AskUserQuestion
模型选择技能
根据复杂度、成本和性能要求,为自定义代理任务选择正确的模型。
交互式模型选择
使用AskUserQuestion理解需求并推荐最优模型:
# 问题1:主要优先级(MCP:CLI最佳实践 - 权衡选择)
question: "您对此代理的主要优先级是什么?"
header: "优先级"
options:
- label: "成本效率(推荐)"
description: "最小化API成本,高容量操作"
- label: "平衡性能"
description: "大多数任务的良好质量和合理成本"
- label: "最高质量"
description: "最佳结果,不考虑成本,复杂推理"
- label: "最低延迟"
description: "实时响应,面向用户的交互"
# 问题2:任务复杂度(MCP:代理SDK模型选择)
question: "此代理执行的任务有多复杂?"
header: "复杂度"
options:
- label: "简单"
description: "转换、提取、格式化、分类"
- label: "中等"
description: "代码生成、分析、规划、大多数任务"
- label: "复杂"
description: "架构决策、多步推理、关键代码"
- label: "变量"
description: "一个代理中简单和复杂任务的混合"
使用这些响应应用决策树并推荐适当模型。
目的
指导为自定义代理任务选择适当的Claude模型(Haiku、Sonnet、Opus),以优化成本、速度和质量。
何时使用
- 设计新的自定义代理
- 优化现有代理性能
- 平衡成本与质量
- 满足特定延迟要求
模型概述
| 模型 | 速度 | 成本 | 质量 | 使用案例 |
|---|---|---|---|---|
| Haiku | 最快 | 最低 | 良好 | 简单任务,高容量 |
| Sonnet | 快 | 中等 | 非常好 | 大多数任务,平衡 |
| Opus | 最慢 | 最高 | 最佳 | 复杂推理 |
选择决策树
开始
│
├── 任务是简单转换吗?
│ └── 是 → Haiku
│
├── 成本是主要关注点吗?
│ └── 是 → Haiku(如果足够)或Sonnet
│
├── 质量是否关键(不容错误)?
│ └── 是 → Opus
│
├── 任务是否需要复杂推理?
│ └── 是 → Opus
│
├── 延迟是否关键(实时)?
│ └── 是 → Haiku
│
└── 默认 → Sonnet(最佳平衡)
按任务类型选择模型
Haiku 任务
最适合:
- 文本转换(大写、格式化)
- 简单分类
- 数据提取
- 高容量操作
- 实时处理
- 模式匹配
# Haiku 示例
model="claude-3-5-haiku-20241022"
# Echo 代理 - 简单转换
# 计算器 - 直接数学
# 流处理器 - 高容量,低复杂度
Sonnet 任务
最适合:
- 代码生成
- 代码审查
- 规划和分析
- 大多数自定义代理
- 平衡性能
# Sonnet 示例
model="claude-sonnet-4-20250514"
# QA 代理 - 代码库分析
# 构建器代理 - 代码实现
# 通用代理
Opus 任务
最适合:
- 战略规划
- 复杂架构决策
- 关键代码审查
- 多步推理
- 新问题解决
# Opus 示例
model="claude-opus-4-20250514"
# 规划器代理 - 战略决策
# 审查员代理 - 关键验证
# 架构师代理 - 系统设计
成本考虑
相对成本
| 模型 | 输入令牌 | 输出令牌 | 相对成本 |
|---|---|---|---|
| Haiku | 低 | 低 | 1x |
| Sonnet | 中等 | 中等 | ~10x |
| Opus | 高 | 高 | ~30x |
成本优化策略
- 从Haiku开始:测试是否简单模型足够
- 使用Haiku进行预处理:在主要任务之前过滤/分类
- 保留Opus用于关键路径:仅在质量至关重要时使用
- 监控成本:跟踪
ResultMessage.total_cost_usd
# 成本跟踪
async for message in client.receive_response():
if isinstance(message, ResultMessage):
print(f"查询成本:${message.total_cost_usd:.6f}")
速度考虑
延迟配置文件
| 模型 | 第一个令牌 | 总时间 | 吞吐量 |
|---|---|---|---|
| Haiku | ~500ms | 快 | 最高 |
| Sonnet | ~1s | 中等 | 好 |
| Opus | ~2s | 较慢 | 较低 |
速度优化
- 实时需求选择Haiku:亚秒级响应
- 交互式需求选择Sonnet:可接受的延迟
- 批处理允许Opus:延迟不那么关键
质量考虑
能力差异
| 能力 | Haiku | Sonnet | Opus |
|---|---|---|---|
| 简单推理 | ✓ | ✓ | ✓ |
| 代码生成 | 有限 | 好 | 优秀 |
| 复杂规划 | 差 | 好 | 优秀 |
| 多步推理 | 有限 | 好 | 优秀 |
| 新问题 | 差 | 足够 | 优秀 |
质量要求
- Haiku:可接受于定义良好、简单的任务
- Sonnet:适用于大多数开发任务
- Opus:用于关键决策所需
多模型模式
分层处理
# 层1:Haiku用于分类
classification = await classify_task(task, model="haiku")
# 层2:路由到适当模型
if classification == "简单":
result = await process(task, model="haiku")
elif classification == "复杂":
result = await process(task, model="opus")
else:
result = await process(task, model="sonnet")
不同模型的多代理
# 规划器:Opus用于战略决策
planner_options = ClaudeAgentOptions(
model="claude-opus-4-20250514"
)
# 构建器:Sonnet用于实现
builder_options = ClaudeAgentOptions(
model="claude-sonnet-4-20250514"
)
# 审查员:Opus用于关键审查
reviewer_options = ClaudeAgentOptions(
model="claude-opus-4-20250514"
)
输出格式
当推荐模型选择时:
## 模型选择
**任务:** [描述]
**推荐模型:** [Haiku/Sonnet/Opus]
### 决策因素
| 因素 | 权重 | 评估 |
| --- | --- | --- |
| 复杂度 | [H/M/L] | [评估] |
| 成本敏感性 | [H/M/L] | [评估] |
| 质量要求 | [H/M/L] | [评估] |
| 延迟要求 | [H/M/L] | [评估] |
### 理由
[为什么此模型合适]
### 备选方案
- 如果成本是关注点:[备选]
- 如果质量是关键:[备选]
### 配置
options = ClaudeAgentOptions( model=“[model-id]”, … )
选择清单
- [ ] 任务复杂度评估
- [ ] 成本约束识别
- [ ] 质量要求定义
- [ ] 延迟要求考虑
- [ ] 模型选择有理由
- [ ] 备选方案记录
关键见解
“明智选择:Claude Haiku 用于简单、快速任务。Claude Sonnet 用于平衡性能。Claude Opus 用于复杂推理。”
模型选择直接影响:
- 用户体验(延迟)
- 运营成本(令牌)
- 输出质量(准确性)
交叉引用
- @core-four-custom.md - 核心四中的模型
- @custom-agent-design 技能 - 代理设计工作流
- @agent-deployment-forms.md - 部署考虑
版本历史
- v1.0.0 (2025-12-26):初始发布
最后更新
日期: 2025-12-26 模型: claude-opus-4-5-20251101