智能体学习23——资源感知优化(Resource-Aware Optimization)

文章目录

  • [资源感知优化(Resource-Aware Optimization)](#资源感知优化(Resource-Aware Optimization))

资源感知优化(Resource-Aware Optimization)

一、打个比方:什么是资源感知优化?

想象你去了一家餐厅。

  • 如果你只是想喝杯可乐,服务员直接给你倒一杯------快速、便宜、立刻满足
  • 如果你要办一桌婚宴,服务员会找主厨来定制菜单------慢一些、贵一些,但品质极高
  • 如果主厨今天请假了,副厨也能顶上------虽然味道稍有差异,但婚宴不会泡汤

这就是资源感知优化 的核心思想:根据任务的复杂度和可用资源,动态选择最合适的处理方式,在质量和成本之间找到最优平衡点。

放到 AI Agent 的语境里:

  • 简单问题(如"澳大利亚首都是什么?")→ 用快速经济的模型(如 GPT-4o-mini)
  • 复杂推理(如"解释量子计算对密码学的影响")→ 用高阶模型(如 o4-mini)
  • 实时信息(如"澳网2026什么时候开始?")→ 触发搜索引擎获取最新数据
  • 主模型挂了 → 自动切换到备选模型,保证服务不中断

二、核心概念解析

2.1 什么是资源感知优化?

资源感知优化(Resource-Aware Optimization)是指智能体在运行过程中动态监控和管理计算、时间和财务资源的能力。它与传统的"一刀切"式处理不同,要求智能体:

  1. 感知当前可用的资源(算力、预算、时间)
  2. 评估任务的实际复杂度
  3. 决策最优的处理路径(选哪个模型、用什么工具)
  4. 执行并持续优化

2.2 关键设计原则

原则 说明 类比
动态模型切换 根据任务复杂度选择不同等级的模型 简单任务派实习生,复杂任务派专家
回退机制 主模型不可用时自动切换备选模型 主厨请假,副厨顶上
成本敏感 在预算约束内最大化输出质量 100块钱预算内做出最好的一桌菜
自适应路由 根据查询特征智能分流 前台根据客户需求分配不同部门

2.3 三类问题分类体系

本章给出了一个非常实用的三分法:

分类 定义 处理路径 模型选择 成本
simple 直接可答的事实性问题,无需推理或外部数据 直接生成回答 GPT-4o-mini 💰
reasoning 需要逻辑推理、数学计算或多步思考 高阶模型推理 o4-mini 💰💰
internet_search 涉及时事、最新数据或训练数据外的内容 先搜索再生成 GPT-4o + Google Search 💰💰💰

三、源码解构:路由智能体(QueryRouterAgent)

这是本章最核心的代码------Google ADK 实现的路由智能体。我们逐行拆解:

python 复制代码
# 概念性 Python 结构,非可运行代码

from google.adk.agents import Agent, BaseAgent
from google.adk.events import Event
from google.adk.agents.invocation_context import InvocationContext
import asyncio

class QueryRouterAgent(BaseAgent):
    name: str = "QueryRouter"
    description: str = "根据复杂度将用户查询路由到合适的 LLM Agent。"

    async def _run_async_impl(self, context: InvocationContext) -> AsyncGenerator[Event, None]:
        user_query = context.current_message.text      # ← 第13行:从上下文中获取用户原始查询
        query_length = len(user_query.split())          # ← 第14行:用词数作为复杂度的简单指标

        if query_length < 20:                           # ← 第16行:阈值判断(简单 vs 复杂)
            print(f"短问题(长度:{query_length})路由到 Gemini Flash Agent")
            response = await gemini_flash_agent.run_async(context.current_message)
            yield Event(author=self.name, content=f"Flash Agent 处理结果:{response}")
        else:
            print(f"长问题(长度:{query_length})路由到 Gemini Pro Agent")
            response = await gemini_pro_agent.run_async(context.current_message)
            yield Event(author=self.name, content=f"Pro Agent 处理结果:{response}")

逐行解读:

行号 代码 解读
3-5 from google.adk.agents import ... 导入 ADK 核心组件:BaseAgent 是自定义智能体的基类,Event 是智能体间通信的事件对象,InvocationContext 封装了当前调用的上下文信息
8 class QueryRouterAgent(BaseAgent) 路由智能体继承自 BaseAgent,这是 ADK 中创建自定义智能体的标准方式
9 name: str = "QueryRouter" 智能体名称,用于日志追踪和系统标识
10 description: str = "..." 智能体描述,在多智能体系统中帮助其他智能体理解它的职责
12 async def _run_async_impl(...) 这是 ADK 智能体的核心执行方法,使用异步生成器模式,可以逐步产出事件
13 context.current_message.text 从调用上下文中提取用户的原始文本查询,context 对象封装了当前请求的所有信息
14 len(user_query.split()) 关键设计:用词数作为复杂度的代理指标。虽然简单,但在实践中是有效的快速启发式方法
16 if query_length < 20 阈值设定为20个词。短问题通常意味着简单查询,长问题则暗示复杂需求
18 await gemini_flash_agent.run_async(...) 调用经济型 Flash Agent 异步处理,使用 await 避免阻塞
19 yield Event(...) 通过 yield 将处理结果作为事件返回给调用方,这是 ADK 的事件驱动架构的核心
22 await gemini_pro_agent.run_async(...) 对复杂问题调用高阶 Pro Agent,同样的异步调用模式

路由智能体的设计要点

  1. 继承 BaseAgent :ADK 提供的标准扩展点,比直接用 Agent 更灵活
  2. 异步生成器模式AsyncGenerator[Event, None] 允许逐步产出事件,支持流式响应
  3. 简单启发式:用词数作为路由指标,虽然不够精确,但执行速度极快,不会增加额外的模型调用成本
  4. 可扩展性 :可以轻松替换为 LLM 驱动的复杂度分类器(如后文的 classify_prompt 函数)

四、源码解构:OpenAI 实战------完整的资源感知问答系统

这是本章的第二个核心代码,展示了一个完整的、可运行的资源感知问答系统。我们重点分析问题分类响应生成两个关键步骤:

4.1 问题分类器(classify_prompt)

python 复制代码
def classify_prompt(prompt: str) -> dict:
    system_message = {
        "role": "system",
        "content": (
            "你是一个分类器,分析用户问题并只返回以下三类之一:\n\n"
            "- simple\n"
            "- reasoning\n"
            "- internet_search\n\n"
            "规则:\n"
            "- 直接事实问题且无需推理或时事,用 'simple'。\n"
            "- 逻辑、数学或多步推理问题,用 'reasoning'。\n"
            "- 涉及时事、最新数据或训练数据外内容,用 'internet_search'。\n\n"
            "仅用如下 JSON 回复:\n"
            '{ "classification": "simple" }'
        ),
    }

    user_message = {"role": "user", "content": prompt}

    response = client.chat.completions.create(
        model="gpt-4o", messages=[system_message, user_message], temperature=1
    )

    reply = response.choices[0].message.content
    return json.loads(reply)

解读

要素 分析
分类模型 用 GPT-4o 做分类器,而非专门训练的分类模型。这是一个 trade-off:GPT-4o 理解能力强但成本更高,适合原型验证
System Prompt 设计 精心设计的三分法规则,每条规则边界清晰,避免歧义。还强制 JSON 输出格式,方便程序解析
temperature=1 设置为1(较高),让模型有更多"创造性"来判断分类,避免过于保守
JSON 输出 强制结构化输出,便于下游代码解析,这是一个好实践

4.2 响应生成器(generate_response)

python 复制代码
def generate_response(prompt: str, classification: str, search_results=None) -> str:
    if classification == "simple":
        model = "gpt-4o-mini"          # ← 简单问题:最便宜的模型
        full_prompt = prompt
    elif classification == "reasoning":
        model = "o4-mini"              # ← 推理问题:推理专用的轻量模型
        full_prompt = prompt
    elif classification == "internet_search":
        model = "gpt-4o"              # ← 搜索问题:需要整合搜索结果的通用模型
        if search_results:
            search_context = "\n".join(
                [f"Title: {item.get('title')}\nSnippet: {item.get('snippet')}\nLink: {item.get('link')}"
                 for item in search_results]
            )
        else:
            search_context = "未找到搜索结果。"
        full_prompt = f"""请用以下网页结果回答用户问题:

{search_context}

问题:{prompt}"""

    response = client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": full_prompt}],
        temperature=1,
    )

    return response.choices[0].message.content, model

模型选择策略解读

分类 模型 单次调用成本(相对) 选择理由
simple gpt-4o-mini ×1(基准) 事实性问题不需要强推理能力,mini 足够
reasoning o4-mini ×5-10 推理专用模型,虽然比 mini 贵,但比 o1 便宜得多
internet_search gpt-4o ×10-15 需要整合搜索结果并进行综合分析,需要通用强模型

4.3 综合路由函数(handle_prompt)

python 复制代码
def handle_prompt(prompt: str) -> dict:
    classification_result = classify_prompt(prompt)     # 步骤1:分类
    classification = classification_result["classification"]

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

    answer, model = generate_response(prompt, classification, search_results)  # 步骤3:生成
    return {"classification": classification, "response": answer, "model": model}

这个函数是整个系统的编排层 ,清晰地展示了三步流水线:分类 → 搜索(按需) → 生成


五、源码解构:OpenRouter 的自动路由与回退

OpenRouter 提供了两种非常实用的路由方式:

5.1 自动模型选择

json 复制代码
{
  "model": "openrouter/auto"
}

一个 API 调用,OpenRouter 自动帮你选最合适的模型。 这就像你跟出租车司机说"去机场",不需要你告诉他走哪条路,他自己会根据实时路况选择最优路线。

5.2 顺序模型回退

json 复制代码
{
  "models": ["anthropic/claude-3.5-sonnet", "gryphe/mythomax-l2-13b"]
}

指定优先级列表,系统自动按顺序尝试。 这就像你手机设置了 Wi-Fi 和移动数据的优先级:Wi-Fi 连不上自动切换到流量,用户完全无感知。


六、批判智能体(Critic Agent)

6.1 角色定位

批判智能体是资源感知优化系统的"质检员"。它的职责不是直接回答问题,而是评估答题智能体的输出质量

6.2 System Prompt 解读

复制代码
你是 **批判智能体**,负责我们协作研究助手系统的质量保障。
你的主要职责是**细致审查和挑战**研究智能体的信息,
确保**准确、完整和无偏见**。

你的任务包括:
* 评估研究结果的事实正确性、全面性和潜在倾向。
* 识别缺失数据或推理不一致之处。
* 提出关键问题以完善或扩展当前理解。
* 提供建设性建议以优化或探索不同角度。
* 验证最终输出的全面性和均衡性。

6.3 批判智能体的双重价值

维度 直接价值 间接价值
质量保障 识别错误、不一致和偏见 提升最终输出的可信度
路由优化 发现不合理的分流(如简单问题用 Pro) 间接优化资源分配和成本
持续改进 为强化学习和微调提供反馈数据 让系统越用越聪明

七、资源优化技术谱系

本章最后总结了一个完整的技术谱系,从简单到复杂:

技术等级 技术 核心思想 适用场景
动态模型切换 简单问题用小模型,复杂问题用大模型 通用 Agent 系统
自适应工具选择 根据成本、延迟选择最适合的工具 需要调用外部 API 的 Agent
⭐⭐ 上下文剪枝与摘要 减少 token 数量,降低推理成本 长对话、多轮交互
⭐⭐ 优雅降级与回退 主模型不可用时自动切换 生产环境的高可用部署
⭐⭐⭐ 主动资源预测 预测工作负载,提前分配资源 大规模分布式 Agent 系统
⭐⭐⭐ 学习型资源分配 用强化学习优化资源分配策略 长期运行的复杂系统

八、与前几章的联系

前置章节 与本章的关系
多智能体协作 资源感知优化本身就是多智能体架构的一种应用------路由智能体、答题智能体、批判智能体各司其职
工具使用 自适应工具选择是工具使用模式在资源约束下的升级版
评估与监控 批判智能体依赖评估能力来提供反馈,评估是资源优化的"眼睛"
规划 资源感知规划是传统规划的增强版------不仅要规划动作序列,还要考虑每个动作的资源消耗
记忆 上下文剪枝与摘要本质上是一种资源感知的记忆管理策略

九、关键要点总结

  1. 核心思想 :不是所有任务都需要最强模型,用合适的模型做合适的事才是资源感知优化的精髓。

  2. 路由智能体是关键:它就像交通指挥员,负责将不同复杂度的请求分流到最合适的处理单元。

  3. 回退机制保障可靠性 :生产环境中,模型可能限流、宕机、不可用,优雅降级比直接报错好一万倍

  4. 批判智能体是闭环的关键:没有反馈的优化是盲目的。批判智能体提供质量反馈,让系统不断自我改进。

  5. OpenRouter 是实用的工具:自动模型选择和顺序回退功能,让开发者不需要自己实现复杂的路由逻辑。

  6. 三分法分类很实用:simple / reasoning / internet_search 三类分类,覆盖了大部分问答场景,是一个值得借鉴的设计模式。

  7. 成本与质量的权衡是永恒话题:资源感知优化没有"最优解",只有"最适合当前场景的解"。关键是建立可量化的评估体系,让权衡有据可依。


十、实践建议

  1. 从简单启发式开始:先用词数、关键词匹配等简单方法做路由,验证业务价值后再升级到 LLM 分类器
  2. 记录每次路由决策:日志中记录分类结果、使用的模型、响应时间、成本,为后续优化提供数据支撑
  3. 设置成本上限:为每个请求设置最大 token 预算,防止复杂查询消耗过多资源
  4. 定期评估路由准确性:人工抽样检查分类是否正确,根据结果调整阈值或提示词
  5. 监控模型可用性:实时监控各模型的响应时间和错误率,动态调整回退策略
相关推荐
橙露2 小时前
特征选择实战:方差、卡方、互信息法筛选有效特征
人工智能·深度学习·机器学习
TechMasterPlus3 小时前
LangGraph 实战指南:构建状态驱动的 LLM 应用架构
人工智能·架构
小夏子_riotous3 小时前
Docker学习路径——2、安装
linux·运维·分布式·学习·docker·容器·云计算
海森大数据3 小时前
数据与特征“协同进化”:机器学习加速发现高性能光合成过氧化氢COF催化剂
人工智能·机器学习
xiaotao1313 小时前
01-编程基础与数学基石: Python核心数据结构完全指南
数据结构·人工智能·windows·python
SteveSenna3 小时前
Trossen Arm MuJoCo自定义1:改变目标物体
人工智能·学习·算法·机器人
不熬夜的熬润之3 小时前
YOLOv5-OBB 训练避坑笔记
人工智能·yolo·计算机视觉
实证小助手3 小时前
世界各国经济政策不确定指数(1997-2024年)月度数据
大数据·人工智能
Wcowin3 小时前
Hermes Agent:自进化的 AI Agent
人工智能