AI Agent 开发中的模型调度策略:何时用便宜模型,何时用强模型

一个 Agent 跑一次任务,背后可能调用模型十几次。如果每次都用 Claude Opus,成本会让你心疼;但如果全用最便宜的模型,效果又会一塌糊涂。聪明的做法是:按任务类型选模型,把钱花在刀刃上。

为什么 Agent 的成本控制比普通调用更重要

普通的 LLM 调用是"一问一答":用户发一条消息,模型回一条,结束。

但 Agent 不一样。一个真正的 Agent 任务会触发一系列的模型调用:

  • 先理解任务、制定计划(planning)
  • 依次执行每个步骤,可能调用工具、处理数据(execution)
  • 每步执行后检查结果是否符合预期(reflection)
  • 最后汇总输出(synthesis)

一次看似简单的"帮我分析这份合同里的风险条款",背后可能是 15 次模型调用。

如果每次都用 Claude Opus 4(约 $15/M tokens),一个任务下来就烧几美元。对于高频场景,成本完全不可接受。

关键洞察:这 15 次调用并不是一样的。有些需要深度推理,有些只是在提取信息,有些甚至只是格式转换。不同步骤对模型能力的需求差异极大。


不同步骤需要什么样的模型

Planning 和 Reflection:需要强模型

这两个步骤决定任务的方向和质量,是整个 Agent 的"大脑"。

Planning 需要模型理解复杂意图、拆解多步骤任务、考虑边界情况。用弱模型做 planning,计划本身就会有缺陷,后续执行再完美也没用。

Reflection 需要模型判断执行结果是否正确、是否偏离目标、是否需要回滚。这里的判断失误会导致整个任务走歪。

推荐:anthropic/claude-opus-4openai/gpt-4o

代码生成:Claude Sonnet 性价比最高

代码生成是个特殊的步骤。它需要足够的推理能力(写出正确逻辑),但不需要 Opus 级别的"战略思维"。

根据实际测试,Claude Sonnet 4 在代码任务上的表现接近 Claude Opus 4,但价格只有后者的五分之一。这是非常划算的替换。

推荐:anthropic/claude-sonnet-4

信息提取和简单工具调用:用 mini/flash 级别

这类任务包括:

  • 从文本中提取结构化字段(日期、金额、人名)
  • 判断一段文本属于哪个分类
  • 把工具返回的 JSON 转成自然语言描述
  • 简单的问答(基于已有上下文回答明确问题)

这些任务对推理能力要求不高,用最便宜的模型完全够用。

推荐:openai/gpt-4o-minigoogle/gemini-2.0-flash


代码示例:一个混合模型的 Agent 框架

下面是一个实际可用的 Python 示例,展示如何根据步骤类型动态选择模型。使用 TheRouter 的 API,只需一个 API Key 就能访问所有模型。

python 复制代码
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["THEROUTER_API_KEY"],
    base_url="https://api.therouter.ai/v1"
)

# 模型配置:按任务类型分配
MODEL_CONFIG = {
    "planning":    "anthropic/claude-opus-4",    # 强推理,做规划
    "reflection":  "anthropic/claude-opus-4",    # 强推理,做审查
    "code":        "anthropic/claude-sonnet-4",  # 代码能力强,性价比高
    "extract":     "openai/gpt-4o-mini",         # 信息提取,快速便宜
    "classify":    "google/gemini-2.0-flash",    # 分类判断,极速极省
    "summarize":   "openai/gpt-4o-mini",         # 摘要生成,无需强模型
}

def call_model(task_type: str, prompt: str, system: str = None) -> str:
    model = MODEL_CONFIG[task_type]
    messages = []
    if system:
        messages.append({"role": "system", "content": system})
    messages.append({"role": "user", "content": prompt})

    response = client.chat.completions.create(
        model=model,
        messages=messages,
        max_tokens=2048,
    )
    return response.choices[0].message.content


def run_agent(user_request: str) -> str:
    print(f"[planning] 使用 {MODEL_CONFIG['planning']}...")

    # Step 1: Planning --- 用强模型分析任务,制定执行计划
    plan_prompt = f"""
    用户请求:{user_request}

    请将这个任务拆解成具体的执行步骤,每个步骤标注类型:
    - code: 需要生成/修改代码
    - extract: 从文本中提取信息
    - classify: 判断分类
    - summarize: 生成摘要

    输出格式(JSON):
    {{"steps": [{{"type": "code", "description": "...", "input": "..."}}]}}
    """
    plan_json = call_model("planning", plan_prompt)

    # 实际项目中这里会 parse JSON,这里用伪代码简化
    import json
    try:
        plan = json.loads(plan_json)
        steps = plan.get("steps", [])
    except:
        steps = [{"type": "summarize", "description": "回答用户问题", "input": user_request}]

    results = []
    for i, step in enumerate(steps):
        step_type = step.get("type", "summarize")
        step_input = step.get("input", step.get("description", ""))

        print(f"[step {i+1}] 类型={step_type},使用 {MODEL_CONFIG.get(step_type, MODEL_CONFIG['summarize'])}...")

        result = call_model(
            task_type=step_type if step_type in MODEL_CONFIG else "summarize",
            prompt=step_input
        )
        results.append({"step": step.get("description"), "result": result})

    # Step 3: Reflection --- 用强模型审查执行结果
    print(f"[reflection] 使用 {MODEL_CONFIG['reflection']}...")
    reflection_prompt = f"""
    原始请求:{user_request}

    执行结果:
    {json.dumps(results, ensure_ascii=False, indent=2)}

    请审查上述执行结果:
    1. 是否完整回答了用户的请求?
    2. 是否有明显错误或遗漏?
    3. 输出最终的综合答案。
    """
    final_answer = call_model("reflection", reflection_prompt)
    return final_answer


# 运行示例
if __name__ == "__main__":
    result = run_agent("帮我写一个 Python 函数,从 JSON 数组中提取所有 email 字段,去重后排序")
    print("\n=== 最终结果 ===")
    print(result)

运行这个 Agent,你会在日志里看到不同步骤使用了不同的模型:

复制代码
[planning] 使用 anthropic/claude-opus-4...
[step 1] 类型=code,使用 anthropic/claude-sonnet-4...
[step 2] 类型=extract,使用 openai/gpt-4o-mini...
[reflection] 使用 anthropic/claude-opus-4...

成本对比:全强模型 vs 混合路由

以一个典型的文档分析 Agent 为例(处理一份 5 页的合同文档):

步骤 Token 消耗(约) 全强模型(Opus) 混合路由
Planning 2,000 $0.030 $0.030(Opus)
文本提取 × 5 8,000 $0.120 $0.008(GPT-4o-mini)
分类判断 × 10 5,000 $0.075 $0.003(Gemini Flash)
代码生成 × 2 4,000 $0.060 $0.012(Sonnet)
Reflection 3,000 $0.045 $0.045(Opus)
合计 22,000 $0.330 $0.098

混合路由把成本降低了 70%,同时在关键步骤(planning/reflection)保持了最高质量。

对于高频场景,比如每天跑 1000 次这样的 Agent,节省的费用是:

  • 全强模型:330/天 ≈ 10,000/月
  • 混合路由:98/天 ≈ 3,000/月

省下来的 $7,000/月,对独立开发者或小团队来说非常可观。


为什么 TheRouter 让混合路由变得简单

混合路由最大的工程障碍,通常是需要维护多个 API 客户端

python 复制代码
# 没有路由网关的痛苦:每个提供商都要单独配置
anthropic_client = anthropic.Anthropic(api_key=ANTHROPIC_KEY)
openai_client = openai.OpenAI(api_key=OPENAI_KEY)
google_client = google.generativeai.configure(api_key=GOOGLE_KEY)

# 每次调用都要选不同的客户端和不同的 API 格式

这带来了额外的复杂度:多个 API Key 要管理、多种 API 格式要适配、多个 SDK 要维护。

使用 TheRouter,只需一个客户端:

python 复制代码
# 使用 TheRouter:一个客户端,切换 model 参数即可
client = OpenAI(
    api_key=THEROUTER_API_KEY,
    base_url="https://api.therouter.ai/v1"
)

# Planning:强模型
plan = client.chat.completions.create(model="anthropic/claude-opus-4", ...)

# 提取:便宜模型
data = client.chat.completions.create(model="openai/gpt-4o-mini", ...)

# 代码:Sonnet
code = client.chat.completions.create(model="anthropic/claude-sonnet-4", ...)

同一个 client 对象,切换 model 参数就行。API 格式统一,不需要适配不同 SDK。


真实案例:法律文档审查 Agent

一个朋友在做合同风险审查的 SaaS 工具。最初全程用 Claude Opus,每份合同分析费用约 $0.50,用户量上来后成本急剧攀升。

改造方案:

  1. 文本分块和初步分类 :改用 google/gemini-2.0-flash,速度更快,每份合同这部分成本从 0.15 降到 0.01
  2. 具体条款的风险识别 :保留 anthropic/claude-opus-4(这是核心价值,不能妥协)
  3. 标准条款说明生成 :改用 openai/gpt-4o-mini,费用降低 90%
  4. 最终风险报告 :保留 anthropic/claude-opus-4

改造后每份合同的分析成本从 0.50 降到 0.18,降幅 64%,同时用户反馈质量没有下降(因为关键推理步骤没有妥协)。


小结:混合路由的设计原则

  1. 识别关键路径:哪些步骤的质量直接影响最终结果?这些用强模型,不省这点钱。
  2. 批量操作用弱模型:提取、分类、格式转换这类"体力活",便宜模型完全够用。
  3. 代码生成是个例外:Sonnet 级别往往足够,不需要 Opus。
  4. 用一个网关统一管理:减少工程复杂度,避免维护多套 API 配置。
  5. 记录每步的 token 消耗:建立成本基线,才能持续优化。

混合路由不是"用便宜货凑合",而是"把预算分配给真正需要的地方"。这是 Agent 工程从玩具走向产品的必经之路。

相关推荐
星越华夏4 小时前
计算机视觉:YOLOv12安装环境
人工智能·yolo·计算机视觉
代码搬运媛5 小时前
Jest 测试框架详解与实现指南
前端
Yolanda946 小时前
【人工智能】《从零搭建AI问答助手项目(九):Prompt优化》
人工智能·prompt
wj3055853786 小时前
课程 9:模型测试记录与 Prompt 策略
linux·人工智能·python·comfyui
小和尚同志6 小时前
深入使用 skill-creator:结合真实生产级实践
人工智能·aigc
DevSecOps选型指南6 小时前
安全419专访悬镜安全 | 穿越周期在 AI 浪潮中定义数字供应链安全新范式
人工智能
沪漂阿龙6 小时前
面试题详解:GraphRAG 全面解析——知识图谱增强 RAG、Local Search、Global Search、社区摘要、工程落地与评估指标一次讲透
人工智能·知识图谱
WangN26 小时前
Unitree RL Lab 学习笔记【通识】
人工智能·机器学习
haina20196 小时前
海纳AI亮相《科创中国》,解码招聘“智”变之路
人工智能·ai面试·ai招聘
阿星AI工作室6 小时前
刘润年中大课笔记:一句话说清AI落地之战的本质
大数据·人工智能·创业创新·商业