模型选择策略
核对日期:2026-05-09。
1. 定义与边界
模型选择不是“选最强模型”,而是在任务成功率、工具稳定性、上下文长度、延迟、成本、安全和供应商约束之间做工程权衡。官方模型能力以 OpenAI、Anthropic、Google 等厂商文档为准;排行榜和社区测试只能作为补充。
2. 为什么重要
Agent 失败通常不是单一模型问题。低风险摘要任务用高推理模型会浪费成本;高风险工具链使用廉价模型可能导致错误调用;长文档任务只看上下文窗口又会忽略引用、压缩和检索质量。
3. 核心机制
选择模型前先拆任务:
| 维度 | 需要问的问题 | 影响 |
|---|---|---|
| 任务类型 | 生成、抽取、推理、代码、视觉、语音、工具调用? | 模型族和多模态能力 |
| 工具复杂度 | 是否需要多步 tool calling、结构化输出、并行工具? | 工具调用稳定性 |
| 上下文 | 输入规模、历史轮次、证据引用要求? | 上下文窗口与检索策略 |
| 风险 | 是否涉及资金、权限、个人信息、生产变更? | 人类在环和护栏 |
| SLA | p95 延迟、吞吐、可用性? | 模型大小、并发和路由 |
| 预算 | 单任务可接受成本? | 分层路由和缓存 |
4. 架构模式
5. 工程实现
推荐用模型能力卡(model capability card)管理,而不是把模型名散落在代码里:
models:
default_fast:
provider: openai
model: "official-fast-model-id"
supports_tools: true
supports_vision: true
max_input_tokens: "see provider docs"
risk_level: low
deep_reasoning:
provider: openai
model: "official-reasoning-model-id"
supports_reasoning_effort: true
risk_level: medium
routes:
refund_policy_analysis:
primary: deep_reasoning
fallback: default_fast
requires_eval_suite: refund_v3
路由器只读取能力标签,不直接写死供应商:
def choose_model(task):
if task.risk in {"money", "production", "privacy"}:
return "deep_reasoning_with_approval"
if task.needs_long_context:
return "long_context_model"
if task.volume == "high" and task.complexity == "low":
return "fast_model"
return "balanced_model"
6. 生产实践
- 每个模型升级都要跑固定评测集和线上影子流量。
- 记录模型版本、参数、系统提示词、工具 schema 版本和路由理由。
- 供应商能力变化较快,模型卡应有
last_verified_at字段。 - 对高成本模型设置预算阈值和 fallback,但 fallback 不应绕过安全策略。
- 不要把“长上下文模型”当默认,先看是否能检索、分块和摘要。
7. 常见反模式
| 反模式 | 问题 |
|---|---|
| 按聊天观感选 Agent 模型 | 忽略工具调用、格式稳定性和延迟 |
| 只看上下文窗口 | 忽略证据引用和中间信息遗失 |
| 线上直接切最新模型 | 引入未知行为差异 |
| 所有任务都走一个模型 | 成本和失败模式不可控 |
| 用社区 wrapper 能力冒充模型原生能力 | 可维护性差,升级风险高 |
8. 评测方法
至少准备三类集:
- 黄金集:历史真实任务,人工标注成功标准。
- 对抗集:prompt injection、脏数据、工具错误返回、模糊需求。
- 回归集:模型升级和提示词改动前后必须比较。
核心报表:
| 指标 | 解释 |
|---|---|
| 成功率差值 | 新旧模型在同一数据集上的差异 |
| 成本/成功任务 | 失败重试也计入成本 |
| p95 延迟 | 真实用户体验和队列容量 |
| 安全违规率 | 越权工具、敏感信息输出、策略绕过 |
9. 安全与治理
高风险任务不应只靠模型分级。必须把身份、权限、审批、数据分级放在模型外部。供应商之间切换时还要确认数据保留、区域、企业合同和日志策略。
10. 决策框架:模型选择评分卡
模型选型建议先打分,再做小流量验证。不要把“最新”“最大”“榜单最高”当默认答案。
| 维度 | 权重建议 | 评分问题 | 不达标时 |
|---|---|---|---|
| 任务成功率 | 30% | 在黄金集上是否显著优于基线 | 不上线或缩小适用任务 |
| 工具调用稳定性 | 20% | 工具选择和参数是否稳定 | 优化 schema 或换模型 |
| 安全与拒绝 | 15% | 越权、注入、敏感外发是否阻断 | 加 policy gate,不靠模型 |
| 延迟 | 10% | p95 是否满足交互/批处理 SLA | 路由到快速模型或异步化 |
| 成本 | 10% | 每个成功任务成本是否可接受 | 缓存、分层路由、限制上下文 |
| 上下文与模态 | 10% | 是否支持长文、多模态、结构化输出 | RAG/压缩或换专用模型 |
| 供应商治理 | 5% | 数据保留、区域、合同是否满足 | 私有部署或禁用该路由 |
11. 预算模型
单次模型调用便宜不代表 Agent 便宜。建议按“成功任务”建模:
total_cost_per_success =
(model_input_cost + model_output_cost
+ tool_cost + retrieval_cost
+ retry_cost + human_review_cost)
/ task_success_rate
任务预算配置示例:
model_budget_policy:
support_triage:
target_success_rate: 0.90
max_cost_per_success_usd: 0.08
max_latency_p95_ms: 5000
primary_route: fast_tool_model
upgrade_when:
- confidence_below: 0.72
- safety_risk: medium
production_change:
target_success_rate: 0.98
max_cost_per_success_usd: 3.00
max_latency_p95_ms: 90000
primary_route: reasoning_model
required_gates:
- policy
- approval
- deterministic_test
12. Fallback 策略
fallback 不是简单把模型换成另一个。每种失败需要不同动作:
| 触发条件 | 不推荐 | 推荐 |
|---|---|---|
| JSON 格式错误 | 直接升级强模型 | 同模型 repair prompt,一次为限 |
| 工具参数缺字段 | 让模型猜 | 向用户澄清或查权威数据 |
| 低置信度复杂推理 | 重复采样投票 | 升级推理模型并启用 verifier |
| 供应商 5xx/限流 | 无限重试 | 熔断、队列、备用供应商 |
| 安全策略失败 | 换模型绕过 | 直接拒绝并写审计 |
| 成本超预算 | 降级后继续写操作 | 只读摘要或请求人工确认 |
13. 选型评测方案
评测数据要按任务类型分桶,不要用一个平均分覆盖所有路由。
| 数据集 | 内容 | 指标 |
|---|---|---|
| Golden | 真实历史任务和人工验收答案 | task success、groundedness |
| Tool | 需要函数调用和多步工具链的任务 | tool call accuracy、argument validity |
| Safety | prompt injection、越权、敏感数据 | block rate、unsafe action rate |
| Long Context | 长文、早期约束、冲突证据 | key fact retention、citation accuracy |
| Regression | 模型升级前后固定样例 | delta、成本、p95 延迟 |
准入建议:
- 新模型必须优于当前模型或在成本/延迟上显著收益,不能只“差不多”。
- 任何安全指标下降都需要主控确认。
- 高风险路由必须保留旧模型一键回滚。
- 评测报告记录模型 ID、参数、提示词版本、工具 schema 版本、核对日期。
14. 不适用场景
以下情况不应只通过模型选型解决:
- 业务规则不清,需要先定义流程和权限。
- 数据源不可信,需要先做数据治理和检索 ACL。
- 工具缺少幂等、审计、回滚,换模型无法降低副作用风险。
- 组织无法承担人工审批延迟,却要求模型自动处理高风险动作。
15. 权威资料
- OpenAI Models docs: https://platform.openai.com/docs/models
- OpenAI Reasoning guide: https://platform.openai.com/docs/guides/reasoning
- Anthropic Claude models overview: https://docs.anthropic.com/en/docs/about-claude/models/overview
- Google Gemini models: https://ai.google.dev/gemini-api/docs/models
- Google Gemini function calling: https://ai.google.dev/gemini-api/docs/function-calling
- NIST AI RMF: https://www.nist.gov/itl/ai-risk-management-framework