跳转到主要内容

概述

Shannon 根据以下因素自动为每个任务选择最佳 LLM 模型:
  1. 任务复杂度(在分解期间分析)
  2. 显式层级请求model_tier 参数)
  3. 模型/提供商覆盖model_overrideprovider_override
  4. 优先级排名(在 config/models.yaml 中定义)
  5. 预算约束和 token 限制
本指南解释模型选择的工作原理以及如何控制它。

模型层级

Shannon 将模型组织成三个层级: 注意: 百分比是目标分布,不是强制配额。实际使用取决于您的工作负载。

选择流程

模型选择流程

优先级排名

在每个层级内,模型按优先级排名(数字越小 = 优先级越高)。Shannon 按优先级顺序尝试模型,直到成功。 来自 config/models.yaml 的示例:
回退行为:
  • 如果优先级 1 失败(速率限制、API 错误),Shannon 尝试优先级 2
  • 继续直到模型成功或所有选项耗尽
  • 失败记录到编排器日志

参数优先级

当多个参数指定模型选择时,优先级为:
  1. model_override(最高优先级)→ 强制特定模型
  2. provider_override → 限制为一个提供商的模型
  3. model_tier → 使用请求的层级
  4. 自动检测复杂度(最低优先级)→ 默认行为

顶层参数 vs 上下文参数

顶层参数总是覆盖上下文参数:

使用示例

自动选择(默认)

Shannon 分析复杂度 → 选择小型层级 → 使用 gpt-5-nano-2025-08-07(优先级 1)

强制特定层级

使用大型层级 → gpt-5.1-2025-11-01(大型层级中的优先级 1)

覆盖到特定模型

强制使用 Anthropic Claude Sonnet,忽略层级/优先级。

强制提供商

使用中型层级但仅 Anthropic 模型claude-sonnet-4-5-20250929

Python SDK 示例

成本优化策略

1. 从小型开始,必要时升级

2. 提供商特定优化

3. 基于会话的升级

研究分层模型架构

Shannon v0.3.0 新增。该功能在研究工作流中相比统一使用大型模型可实现 50-70% 的成本降低
Shannon 的研究工作流会自动为不同执行阶段分配不同的模型层级,仅在质量最关键的环节使用昂贵的模型。

工作原理

配置

综合阶段的层级可通过任务请求中的 synthesis_model_tierconfig/shannon.yaml 进行配置:
也可以按请求覆盖:

快速研究策略

quick 策略强制所有研究 Agent 使用小型模型并行运行,优先考虑速度和成本而非深度:

成本对比

示例:5 个 Agent 的研究工作流 结果:分层架构实现 50-70% 成本降低,同时保持综合质量。

复杂度分析

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"
  • "Falling back to priority 3: grok-3-mini (xAI)"
  • "Tier override: user requested large → using gpt-5.1-2025-11-01"

配置

模型层级和优先级在 config/models.yaml 中定义:
选择模式:
  • priority(默认):按优先级顺序尝试模型
  • round-robin:在相同优先级的模型之间均匀分配负载
  • least-cost:始终选择层级中最便宜的模型

故障排除

问题:选择了错误的层级

症状: 任务使用中型层级,但您期望小型 解决方案:
  1. 在请求中显式设置 model_tier: "small"
  2. 检查编排器日志中的复杂度分数
  3. 验证查询未触发复杂度启发式(避免”深度分析”等词)

问题:未使用特定模型

症状: 请求 model_override: "gpt-5-pro" 但获得不同的模型 解决方案:
  1. 验证模型在 config/models.yamlmodel_catalog
  2. 检查 .env 中是否设置了提供商的 API 密钥
  3. 验证模型 ID 使用规范名称(非别名)
  4. 检查编排器日志中的回退消息

问题:成本过高

症状: 成本高于预期 解决方案:
  1. 通过 Prometheus 检查实际层级分布
  2. 在请求中添加显式 model_tier: "small"
  3. 检查 shannon_tier_drift_total 是否有不需要的升级
  4. .env 中设置 MAX_COST_PER_REQUEST 以强制预算

问题:速率限制

症状: 频繁的 429 错误,缓慢的回退级联 解决方案:
  1. 向层级优先级列表添加更多提供商
  2. 启用 round-robin 模式以分配负载
  3. 增加受影响提供商的 RATE_LIMIT_WINDOW
  4. 考虑更便宜的提供商(DeepSeek、Groq)作为回退

最佳实践

  1. 默认自动选择: 让 Shannon 的复杂度分析工作
  2. 谨慎覆盖: 仅在必要时使用 model_override
  3. 从小型开始: 为成本敏感的工作负载设置 model_tier: "small"
  4. 监控分布: 通过指标跟踪层级使用情况
  5. 配置回退: 确保每个层级有 3+ 个提供商
  6. 测试优先级顺序: 验证您首选的模型是优先级 1
  7. 预算执行: 设置 MAX_COST_PER_REQUEST 以确保安全

相关文档

模型 API

列出可用模型和定价

提交任务

使用模型参数提交任务

配置

环境变量和 YAML 配置

成本跟踪

查看模型使用和成本