概述
Shannon 根据以下因素自动为每个任务选择最佳 LLM 模型:- 任务复杂度(在分解期间分析)
- 显式层级请求(
model_tier参数) - 模型/提供商覆盖(
model_override、provider_override) - 优先级排名(在
config/models.yaml中定义) - 预算约束和 token 限制
模型层级
Shannon 将模型组织成三个层级:| 层级 | 目标使用率 | 特征 | 成本范围 |
|---|---|---|---|
| Small | 50% | 快速、成本优化、基础推理 | $0.0001-0.0002/1K 输入 |
| Medium | 40% | 平衡能力/成本 | $0.002-0.006/1K 输入 |
| Large | 10% | 重度推理、复杂任务 | $0.02-0.025/1K 输入 |
选择流程
优先级排名
在每个层级内,模型按优先级排名(数字越小 = 优先级越高)。Shannon 按优先级顺序尝试模型,直到成功。 来自config/models.yaml 的示例:
- 如果优先级 1 失败(速率限制、API 错误),Shannon 尝试优先级 2
- 继续直到模型成功或所有选项耗尽
- 失败记录到编排器日志
参数优先级
当多个参数指定模型选择时,优先级为:model_override(最高优先级)→ 强制特定模型provider_override→ 限制为一个提供商的模型model_tier→ 使用请求的层级- 自动检测复杂度(最低优先级)→ 默认行为
顶层参数 vs 上下文参数
顶层参数总是覆盖上下文参数:使用示例
自动选择(默认)
gpt-5-nano-2025-08-07(优先级 1)
强制特定层级
gpt-4.1-2025-04-14(大型层级中的优先级 1)
覆盖到特定模型
强制提供商
claude-sonnet-4-5-20250929
Python SDK 示例
成本优化策略
1. 从小型开始,必要时升级
2. 提供商特定优化
3. 基于会话的升级
复杂度分析
Shannon 使用多个因素分析任务复杂度:- 查询长度和具体性
- 识别的子任务数量
- 工具使用要求
- 所需的上下文深度
- 推理强度(关键词如”分析”、“比较”、“综合”)
< 0.3→ 小型层级(简单问答、基础任务)0.3 - 0.7→ 中型层级(多步骤、中等推理)> 0.7→ 大型层级(复杂研究、重度推理)
监控与调试
检查使用了哪个模型
Prometheus 指标
编排器日志
"Model selected: gpt-5-nano-2025-08-07 (small tier, priority 1)""Falling back to priority 2: claude-haiku-4-5-20251001""Tier override: user requested large → using gpt-4.1-2025-04-14"
配置
模型层级和优先级在config/models.yaml 中定义:
priority(默认):按优先级顺序尝试模型round-robin:在相同优先级的模型之间均匀分配负载least-cost:始终选择层级中最便宜的模型
故障排除
问题:选择了错误的层级
症状: 任务使用中型层级,但您期望小型 解决方案:- 在请求中显式设置
model_tier: "small" - 检查编排器日志中的复杂度分数
- 验证查询未触发复杂度启发式(避免”深度分析”等词)
问题:未使用特定模型
症状: 请求model_override: "gpt-5-pro" 但获得不同的模型
解决方案:
- 验证模型在
config/models.yaml的model_catalog下 - 检查
.env中是否设置了提供商的 API 密钥 - 验证模型 ID 使用规范名称(非别名)
- 检查编排器日志中的回退消息
问题:成本过高
症状: 成本高于预期 解决方案:- 通过 Prometheus 检查实际层级分布
- 在请求中添加显式
model_tier: "small" - 检查
shannon_tier_drift_total是否有不需要的升级 - 在
.env中设置MAX_COST_PER_REQUEST以强制预算
问题:速率限制
症状: 频繁的 429 错误,缓慢的回退级联 解决方案:- 向层级优先级列表添加更多提供商
- 启用
round-robin模式以分配负载 - 增加受影响提供商的
RATE_LIMIT_WINDOW - 考虑更便宜的提供商(DeepSeek、Groq)作为回退
最佳实践
- 默认自动选择: 让 Shannon 的复杂度分析工作
- 谨慎覆盖: 仅在必要时使用
model_override - 从小型开始: 为成本敏感的工作负载设置
model_tier: "small" - 监控分布: 通过指标跟踪层级使用情况
- 配置回退: 确保每个层级有 3+ 个提供商
- 测试优先级顺序: 验证您首选的模型是优先级 1
- 预算执行: 设置
MAX_COST_PER_REQUEST以确保安全