资源感知优化(Resource-Aware Optimization)| Agentic Design Patterns | 智能体设计模式

内容纲要

一、核心定义

资源感知优化:智能体根据计算资源、时间、成本预算动态选择执行策略,在满足目标的前提下优化资源利用效率。

与规划的区别

规划(Planning)      →  关注动作序列
资源感知优化          →  关注如何执行(用什么资源)

核心类比

旅行规划场景:
  高级规划(理解需求、分解行程)  →  使用Gemini Pro(昂贵但智能)
  具体任务(查机票、酒店、餐厅)  →  使用Gemini Flash(便宜且够用)

二、为什么需要资源感知优化?

痛点 影响 解决方案
成本过高 所有查询都用最贵模型 简单查询用便宜模型
延迟过长 实时场景响应慢 快速模型优先
资源浪费 简单任务用复杂模型 智能路由
服务不可用 主模型限流/宕机 自动降级到备用模型
能耗过大 边缘设备电量耗尽 轻量模型+优化

核心优势

  • ✅ 降低运营成本
  • ✅ 提升响应速度
  • ✅ 提高系统可靠性
  • ✅ 优化用户体验
  • ✅ 提升资源利用率

三、核心模式

1. 动态模型切换

原理:根据任务复杂度选择合适的模型

任务类型 模型选择 成本 速度 质量
简单查询 Gemini Flash / GPT-4o-mini 够用
复杂推理 Gemini Pro / GPT-4o
需要联网 标准模型 + 搜索工具

示例

# 定义两个智能体
gemini_pro_agent = Agent(
    model="gemini-2.5-pro",       # 昂贵但强大
    description="处理复杂查询"
)

gemini_flash_agent = Agent(
    model="gemini-2.5-flash",     # 便宜且快速
    description="处理简单查询"
)

2. 路由智能体(Router Agent)

功能:分析查询并路由到最合适的模型

路由策略

策略 实现 适用场景
基于规则 查询长度、关键词 简单场景
基于LLM 用小模型分析复杂度 中等场景
基于ML 训练分类模型 高级场景

示例实现

class QueryRouterAgent(BaseAgent):
    async def _run_async_impl(self, context):
        user_query = context.current_message.text
        query_length = len(user_query.split())

        if query_length < 20:  # 简单查询
            return await gemini_flash_agent.run_async(context.current_message)
        else:  # 复杂查询
            return await gemini_pro_agent.run_async(context.current_message)

三种查询分类

# OpenAI示例
def classify_prompt(prompt):
    """
    分类结果:
    - simple: 直接回答的事实性问题
    - reasoning: 需要推理的逻辑/数学问题
    - internet_search: 需要最新信息的问题
    """
    # 使用GPT-4o分类
    # simple → GPT-4o-mini
    # reasoning → o1-mini(推理模型)
    # internet_search → GPT-4o + Google Search

3. 评论智能体(Critique Agent)

功能:评估响应质量,优化路由决策

职责

职责 作用 价值
自我修正 识别错误,促使改进 提高答案质量
性能监控 跟踪准确性、相关性 持续优化
路由优化 识别次优路由 降低成本
信号收集 为微调提供数据 长期改进

系统提示示例

CRITIC_SYSTEM_PROMPT = """
你是评论智能体,负责质量保证。职责:
1. 评估研究结果的准确性和完整性
2. 识别缺失数据和推理不一致
3. 提出批判性问题
4. 提供建设性改进建议
5. 验证最终输出质量

所有批评必须具有建设性。
"""

四、后备机制(Fallback)

定义:主模型不可用时自动切换到备用模型,确保服务连续性。

实现方式

1. OpenRouter顺序回退

{
  "models": [
    "anthropic/claude-3.5-sonnet",  // 首选
    "openai/gpt-4o",                 // 备选1
    "gryphe/mythomax-l2-13b"         // 备选2
  ]
}

工作流程

尝试Claude 3.5 Sonnet
  ↓ (失败:限流/宕机)
尝试GPT-4o
  ↓ (失败)
尝试Mythomax
  ↓
返回成功响应

2. ADK多模型配置

from google.adk.models.lite_llm import LiteLlm

# 通过LiteLLM集成多模型
agent = Agent(
    model=LiteLlm(model_name="gpt-4o", fallback="gpt-4o-mini")
)

五、实战案例

案例1:OpenAI三级路由系统

图1:OpenRouter统一接口 - 访问数百个AI模型

完整流程

def handle_prompt(prompt):
    # 步骤1: 分类
    classification = classify_prompt(prompt)
    # 返回: "simple" / "reasoning" / "internet_search"

    # 步骤2: 按需搜索
    if classification == "internet_search":
        search_results = google_search(prompt)

    # 步骤3: 生成响应
    if classification == "simple":
        model = "gpt-4o-mini"
        answer = generate_response(prompt, model)
    elif classification == "reasoning":
        model = "o1-mini"  # 推理专用模型
        answer = generate_response(prompt, model)
    elif classification == "internet_search":
        model = "gpt-4o"
        answer = generate_with_search(prompt, search_results, model)

    return {"classification": classification, "model": model, "answer": answer}

成本对比

查询类型 模型 成本 示例
简单 GPT-4o-mini $0.15/1M tokens "澳大利亚首都?"
推理 o1-mini $3/1M tokens "量子计算对密码学的影响?"
联网 GPT-4o + Search $5/1M tokens + API "2026澳网何时开始?"

案例2:ADK层次化智能体

# 规划器智能体(高级任务)
planner_agent = Agent(
    model="gemini-2.5-pro",
    instruction="理解复杂需求,制定旅行计划"
)

# 工具执行智能体(简单任务)
tool_agent = Agent(
    model="gemini-2.5-flash",
    instruction="执行具体搜索:机票/酒店/餐厅",
    tools=[flight_search, hotel_search, restaurant_search]
)

# 层次化编排
workflow = HierarchicalAgent(
    planner=planner_agent,
    workers=[tool_agent]
)

六、OpenRouter统一接口

核心价值

  • 一个API访问数百个模型
  • 自动故障转移
  • 成本优化
  • 无缝集成

基础用法

import requests

response = requests.post(
    url="https://openrouter.ai/api/v1/chat/completions",
    headers={
        "Authorization": "Bearer <API_KEY>",
    },
    json={
        "model": "openai/gpt-4o",  # 或"openrouter/auto"自动选择
        "messages": [{"role": "user", "content": "你的问题"}]
    }
)

自动模型选择

{
  "model": "openrouter/auto"  // 自动选择最优模型
}

特性


七、扩展优化技术

1. 提示优化

技术 说明 价值
提示压缩 删除冗余词语 减少Token消耗
Few-shot优化 精选示例 提高准确性
模板化 预定义结构 标准化输出

2. 缓存策略

# 伪代码
def cached_llm_call(prompt, model):
    cache_key = hash(prompt + model)
    if cache_key in cache:
        return cache[cache_key]  # 命中缓存,省钱省时

    result = llm.call(prompt, model)
    cache[cache_key] = result
    return result

3. 批处理

# 合并多个查询
batch_queries = [
    "查询1",
    "查询2",
    "查询3"
]
# 一次调用处理多个,减少API开销
result = llm.batch_call(batch_queries)

4. 流式输出

# 立即返回部分结果,降低感知延迟
for chunk in llm.stream(prompt):
    print(chunk, end="")  # 实时显示

5. 超时与重试

try:
    result = llm.call(prompt, timeout=5)  # 5秒超时
except TimeoutError:
    result = llm.call(prompt, model="faster_model")  # 降级

八、典型应用场景

1. 成本优化的LLM使用

场景:企业客服系统
实现:
  - FAQ简单问题 → GPT-4o-mini
  - 复杂投诉处理 → GPT-4o
  - 技术问题需搜索 → GPT-4o + Search
价值:降低70%运营成本

2. 延迟敏感操作

场景:实时聊天机器人
实现:
  - 首选快速模型(Flash)
  - 复杂查询异步处理(Pro)
  - 流式输出降低感知延迟
价值:响应时间<1秒

3. 边缘设备能效优化

场景:移动App智能助手
实现:
  - 简单任务本地小模型
  - 复杂任务云端大模型
  - 批处理减少网络调用
价值:延长50%电池寿命

4. 服务可靠性

场景:金融分析系统
实现:
  Claude 3.5 → GPT-4o → Gemini Pro(多级回退)
价值:99.9%可用性

九、优势与挑战

✅ 核心优势

优势 说明
降低成本 简单查询用便宜模型
提升速度 快速模型优先
增强可靠性 自动故障转移
优化体验 动态平衡质量与速度
能效提升 边缘设备省电

⚠️ 挑战

挑战 影响 缓解方案
路由准确性 错误分类导致质量下降 持续优化分类器
复杂性增加 系统更难维护 模块化设计+监控
延迟增加 分类步骤增加时间 缓存+并行处理
评估困难 难以量化优化效果 A/B测试+指标追踪

十、常见问题

Q1:如何确定路由阈值?

1) 收集历史查询数据;2) 人工标注复杂度;3) 训练分类模型;4) A/B测试验证;5) 持续调优。

Q2:路由智能体用什么模型?
轻量快速模型(如GPT-4o-mini),路由本身不应成为瓶颈。

Q3:如何平衡成本和质量?
设定质量基线,在满足基线前提下优化成本。对关键场景保证质量,非关键场景降低成本。

Q4:评论智能体会增加成本吗?
短期会,但长期通过优化路由降低总成本。可对部分查询采样评论。

Q5:OpenRouter vs 自建路由?

  • OpenRouter: 快速上线、自动维护、支持多模型
  • 自建: 完全可控、定制化、可能更省钱(规模大时)

Q6:如何监控资源使用?

  • 追踪每个模型的调用次数和成本
  • 监控平均延迟
  • 分析路由准确率
  • 用户满意度反馈

十一、参考资源

开源代码

工具平台

图片资源

  • chapter16_fig1chapter16_fig2OpenRouter网站

原文章节

  • <code>22-Chapter-16-Resource-Aware-Optimization.md</code>

相关章节

  • 第 2 章:路由 - 路由智能体的基础
  • 第 4 章:反思 - 评论智能体的原理
  • 第 6 章:规划 - 与资源优化的区别
  • 第 7 章:多智能体协作 - 层次化架构应用

滚动至顶部