💰 Cost-Aware Routing(成本感知路由)

AI Agent 成本优化 模型选择 OpenClaw 最后更新:2026-05-27

🎬 王家卫式开场

世界上有一种焦虑,叫做「这个月API账单又爆了」。

凌晨2点41分,我看着OpenAI的账单:$8,427.53。我翻了个身,发现我的Agent在过去6小时里,用GPT-4写了300封「您好,欢迎咨询」的邮件。

那一刻我明白,AI不是工具,是碎钞机。

于是我开始思考:能不能让Agent像人类一样,知道「这事儿值不值花这么多钱?」

📖 什么是 Cost-Aware Routing?

Cost-Aware Routing(成本感知路由)是一种智能路由策略,根据任务复杂度、预算约束和模型性能,动态选择最合适的(且最省钱的)模型来完成任务。

通俗理解:

💡 核心思想

不是所有任务都需要核武器——用核弹打蚊子,蚊子死了,你的钱包也瘪了。

Cost-Aware Routing 就是「大脑」:知道什么时候用榔头,什么时候用牙签。

🔬 技术原理

1. 成本模型

不同模型的成本差异巨大:

模型 输入成本(每1M tokens) 输出成本(每1M tokens) 适用场景
GPT-3.5-turbo $0.50 $1.50 简单QA、分类
GPT-4o-mini $0.15 $0.60 中等复杂度任务
GPT-4-turbo $10.00 $30.00 复杂推理、长文档
Claude 3 Opus $15.00 $75.00 顶级推理、代码生成
本地模型(Llama 3) $0.00 $0.00 隐私敏感、高频任务

2. 路由策略

Cost-Aware Routing 通常基于以下维度决策:

3. 实现思路

任务输入
  ↓
[复杂度分类器] → 简单 | 中等 | 复杂
  ↓
[预算检查] → 足够 | 不足
  ↓
[路由决策] → 选择模型
  ↓
[执行 + 成本记录]
  ↓
[更新预算状态]

🛠️ OpenClaw 实战应用

1. 多模型配置(Model Pool)

// OpenClaw 配置:定义模型池
{
  "models": {
    "cheap": {
      "provider": "openai",
      "model": "gpt-3.5-turbo",
      "costPer1MTokens": 1.5,
      "maxComplexity": "simple"
    },
    "mid": {
      "provider": "openai",
      "model": "gpt-4o-mini",
      "costPer1MTokens": 0.75,
      "maxComplexity": "medium"
    },
    "premium": {
      "provider": "anthropic",
      "model": "claude-3-opus",
      "costPer1MTokens": 90,
      "maxComplexity": "complex"
    },
    "local": {
      "provider": "ollama",
      "model": "llama3",
      "costPer1MTokens": 0,
      "maxComplexity": "medium"
    }
  }
}

2. 成本感知路由策略

// SKILL.md 中定义路由规则
## Model Routing Policy
- name: cost-aware-routing
  description: 根据任务复杂度和预算选择模型
  
  rules:
    - if: task.type == "simple_qa" && budget.remaining > 0
      then: use_model("cheap")
    
    - if: task.type == "code_generation"
      then: use_model("mid")
    
    - if: task.type == "complex_reasoning" && budget.remaining > 50
      then: use_model("premium")
    
    - if: budget.remaining < 10
      then: use_model("local")  # 降级到本地模型
    
    - else:
      then: use_model("mid")  # 默认

3. 预算追踪与限流

# Python示例:预算追踪器
class BudgetTracker:
    def __init__(self, daily_limit=100.0):
        self.daily_limit = daily_limit
        self.today_spent = 0.0
        self.history = []
    
    def estimate_cost(self, model, input_tokens, output_tokens):
        rate = MODEL_COSTS[model]
        return (input_tokens * rate['input'] + 
                output_tokens * rate['output']) / 1_000_000
    
    def can_afford(self, estimated_cost):
        return self.today_spent + estimated_cost <= self.daily_limit
    
    def record_usage(self, model, input_tokens, output_tokens):
        cost = self.estimate_cost(model, input_tokens, output_tokens)
        self.today_spent += cost
        self.history.append({
            'model': model,
            'cost': cost,
            'timestamp': time.time()
        })
        return cost

# 使用示例
tracker = BudgetTracker(daily_limit=50.0)  # 每天最多花50刀

if tracker.can_afford(estimated_cost=0.05):
    result = call_llm(model="gpt-4o-mini", prompt="...")
    actual_cost = tracker.record_usage("gpt-4o-mini", 500, 200)
    print(f"本次花费: ${actual_cost:.4f},今日已花: ${tracker.today_spent:.2f}")
else:
    print("⚠️ 预算不足,切换到本地模型")
    result = call_llm(model="llama3", prompt="...")

4. 3 AM 测试:成本+正确率双指标

结合妙趣AI的「含虾率」理念,成本感知路由不仅是省钱,更是「花得值」:

// OpenClaw 中的含虾率+成本策略
{
  "routingStrategy": "cost-aware-shrimp",
  "metrics": {
    "shrimpRate": {  // 含虾率 = 正确完成率
      "weight": 0.7,
      "minThreshold": 0.85
    },
    "cost": {
      "weight": 0.3,
      "maxPerTask": 0.50  // 单任务最多花50美分
    }
  },
  "fallback": {
    "onLowShrimp": "upgrade_model",  // 含虾率低就升级模型
    "onBudgetExceeded": "use_local"   // 超预算用本地
  }
}

💻 完整示例:智能路由系统

# Python完整示例:Cost-Aware Router
import re
from enum import Enum

class TaskComplexity(Enum):
    SIMPLE = "simple"
    MEDIUM = "medium"
    COMPLEX = "complex"

class CostAwareRouter:
    def __init__(self, budget_daily=100.0):
        self.budget = budget_daily
        self.spent = 0.0
        
        self.models = {
            "gpt-3.5": {"cost": 1.5, "max_complexity": TaskComplexity.SIMPLE},
            "gpt-4o-mini": {"cost": 0.75, "max_complexity": TaskComplexity.MEDIUM},
            "gpt-4-turbo": {"cost": 40.0, "max_complexity": TaskComplexity.COMPLEX},
            "local-llama3": {"cost": 0.0, "max_complexity": TaskComplexity.MEDIUM}
        }
    
    def classify_task(self, prompt: str) -> TaskComplexity:
        """简单规则分类任务复杂度"""
        if len(prompt) < 50 and "?" in prompt:
            return TaskComplexity.SIMPLE
        elif any(kw in prompt.lower() for kw in ["write", "generate", "code", "analyze"]):
            return TaskComplexity.COMPLEX
        else:
            return TaskComplexity.MEDIUM
    
    def select_model(self, prompt: str) -> str:
        """根据任务选择最合适的模型"""
        complexity = self.classify_task(prompt)
        
        # 按成本排序
        candidates = sorted(
            [(name, info) for name, info in self.models.items()],
            key=lambda x: x[1]['cost']
        )
        
        for name, info in candidates:
            if self._can_handle(info, complexity) and self._can_afford(info):
                return name
        
        # 都不行,用本地模型
        return "local-llama3"
    
    def _can_handle(self, model_info, complexity):
        return self._complexity_level(model_info['max_complexity']) >= self._complexity_level(complexity)
    
    def _can_afford(self, model_info):
        return self.spent + model_info['cost'] < self.budget
    
    def _complexity_level(self, c):
        return {"simple": 1, "medium": 2, "complex": 3}[c.value]

# 使用示例
router = CostAwareRouter(budget_daily=20.0)

prompts = [
    "今天天气怎么样?",
    "帮我写个Python爬虫,抓取新闻网站",
    "分析这份财报,给出投资建议(5000字)"
]

for prompt in prompts:
    model = router.select_model(prompt)
    print(f"任务: {prompt[:30]}...")
    print(f"  → 选择模型: {model}")
    print(f"  → 预估成本: ${router.models[model]['cost']:.2f}")
    print()

📊 策略对比

路由策略 优点 缺点 适用场景
固定模型 简单可预测 浪费钱或效果差 预算无限制
成本优先 省钱 质量不稳定 高频简单任务
质量优先 效果好 很贵 关键任务
成本感知 平衡成本与质量 需要复杂度分类 生产环境推荐

✅ 最佳实践

🏆 成本感知路由的5条黄金法则

  1. 永远给简单任务用便宜模型:别用GPT-4回答「1+1等于几」
  2. 设置单日预算上限:防止Agent失控烧钱(我就烧过$8K)
  3. 本地模型作为降级方案:预算用完时,至少还能干活
  4. 监控含虾率:便宜模型含虾率低于85%就该升级了
  5. 记录成本数据:分析哪些任务最烧钱,优化它们

⚠️ 常见踩坑

🚨 烧钱实录

🔗 相关资源

🎭 周星驰式总结

Cost-Aware Routing,说白了就是「有钱能使鬼推磨,没钱只能自己推」。

GPT-4就像请个哈佛教授给你讲笑话——效果好,但贵。

GPT-3.5就像请个大学生给你讲笑话——效果一般,但便宜。

本地模型就像自己讲笑话——免费,但可能冷场。

聪明的Agent,知道什么时候该请哈佛教授,什么时候该自己上。

毕竟,钱不是大风刮来的……虽然对于我们这种烧钱速度,大风刮来的也不够。