设置

语言

使用多模型构建AI代理:实用架构指南

L
LemonData
·2026年2月26日·11 次浏览
#AI智能体#多模型#架构#教程#LangChain
使用多模型构建AI代理:实用架构指南

使用多模型构建AI代理:实用架构指南

大多数AI代理使用单一模型处理所有任务。规划步骤、工具调用、摘要、错误恢复等都用同一个模型。这种方式适合演示,但在生产环境中非常浪费资源。

需要深度推理的规划步骤不必用与JSON提取相同的模型。代码生成任务与分类任务的需求也不同。用Claude Opus 4.6($25/百万输出token)来格式化日期字符串,就像请一位高级架构师去刷墙一样。

下面介绍如何构建能够将每个步骤路由到最优模型的代理。

多模型代理架构

User Request
    │
    ▼
┌─────────────┐
│   Router     │  ← 任务复杂度分类器
│  (fast model)│
└──────┬──────┘
       │
   ┌───┴───┐
   ▼       ▼
┌──────┐ ┌──────┐
│Simple│ │Complex│
│Model │ │Model  │
└──┬───┘ └──┬───┘
   │        │
   ▼        ▼
┌─────────────┐
│  Aggregator  │  ← 结果合并器
│  (fast model)│
└─────────────┘

三个组件:

  1. 一个路由器,根据任务复杂度进行分类
  2. 一组针对不同任务类型匹配的模型池
  3. 一个在需要时合并结果的聚合器

使用OpenAI SDK实现

通过一个聚合器使用单个API密钥,您可以访问所有模型,无需管理多个SDK:

from openai import OpenAI

client = OpenAI(
    api_key="sk-lemon-xxx",
    base_url="https://api.lemondata.cc/v1"
)

# 按成本/能力分层的模型池
MODELS = {
    "router": "gpt-4.1-mini",        # $0.40/百万输入token - 快速分类
    "simple": "gpt-4.1-mini",        # $0.40/百万输入token - 提取、格式化
    "reasoning": "claude-sonnet-4-6",# $3.00/百万输入token - 规划、分析
    "complex": "gpt-4.1",            # $2.00/百万输入token - 代码生成、多步任务
    "budget": "deepseek-chat",       # $0.28/百万输入token - 批量处理
}

def route_task(task: str) -> str:
    """使用廉价模型对任务复杂度进行分类。"""
    response = client.chat.completions.create(
        model=MODELS["router"],
        messages=[
            {"role": "system", "content": """将此任务分类为以下类别之一:
- simple: 数据提取、格式化、翻译
- reasoning: 分析、规划、比较
- complex: 代码生成、多步问题解决
- budget: 批量处理、非关键任务
仅回复类别名称。"""}, 
            {"role": "user", "content": task}
        ],
        max_tokens=10
    )
    category = response.choices[0].message.content.strip().lower()
    return MODELS.get(category, MODELS["simple"])

def execute_task(task: str, context: str = "") -> str:
    """将任务路由到合适模型并执行。"""
    model = route_task(task)
    messages = []
    if context:
        messages.append({"role": "system", "content": context})
    messages.append({"role": "user", "content": task})

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

真实案例:代码审查流水线

这是一个实际的多模型代理,用于审查拉取请求(PR):

def review_pr(diff: str) -> dict:
    """多模型PR审查流水线。"""

    # 第一步:变更分类(廉价模型)
    classification = client.chat.completions.create(
        model="gpt-4.1-mini",
        messages=[{
            "role": "user",
            "content": f"对以下代码变更进行分类:{diff[:2000]}\n"
                       "类别:bugfix,feature,refactor,docs,test"
        }],
        max_tokens=20
    ).choices[0].message.content

    # 第二步:安全扫描(推理模型)
    security = client.chat.completions.create(
        model="claude-sonnet-4-6",
        messages=[{
            "role": "system",
            "content": "你是安全审查员。检查以下问题:"
                       "SQL注入、XSS、认证绕过、代码中的密钥、"
                       "不安全的反序列化。请具体指出行号。"
        }, {
            "role": "user",
            "content": f"请审查此diff中的安全问题:\n{diff}"
        }]
    ).choices[0].message.content

    # 第三步:代码质量(通用模型)
    quality = client.chat.completions.create(
        model="gpt-4.1",
        messages=[{
            "role": "user",
            "content": f"审查代码质量:命名、结构、"
                       f"错误处理、测试覆盖率。\n{diff}"
        }]
    ).choices[0].message.content

    # 第四步:总结(廉价模型)
    summary = client.chat.completions.create(
        model="gpt-4.1-mini",
        messages=[{
            "role": "user",
            "content": f"用3个要点总结此PR审查:\n"
                       f"类型:{classification}\n"
                       f"安全:{security[:500]}\n"
                       f"质量:{quality[:500]}"
        }]
    ).choices[0].message.content

    return {
        "classification": classification,
        "security": security,
        "quality": quality,
        "summary": summary
    }

典型PR审查(2000 token diff)的成本明细:

步骤 模型 输入Token数 成本
分类 GPT-4.1-mini 约2100 $0.0008
安全 Claude Sonnet 4.6 约2500 $0.0075
质量 GPT-4.1 约2500 $0.0050
总结 GPT-4.1-mini 约1200 $0.0005
总计 约$0.014

如果四个步骤都使用Claude Sonnet 4.6,成本约为$0.028。多模型方案节省了50%的成本,同时在关键步骤(安全审查)使用了最强模型。

LangChain集成

from langchain_openai import ChatOpenAI

# 创建不同配置的模型实例
fast = ChatOpenAI(
    model="gpt-4.1-mini",
    api_key="sk-lemon-xxx",
    base_url="https://api.lemondata.cc/v1"
)

reasoning = ChatOpenAI(
    model="claude-sonnet-4-6",
    api_key="sk-lemon-xxx",
    base_url="https://api.lemondata.cc/v1"
)

# 在LangChain链中使用
from langchain_core.prompts import ChatPromptTemplate

classify_chain = ChatPromptTemplate.from_template(
    "分类:{input}"
) | fast

analyze_chain = ChatPromptTemplate.from_template(
    "深入分析:{input}"
) | reasoning

何时使用多模型代理

多模型路由增加了复杂度。适合以下情况:

  • 代理处理多种任务类型(不仅仅是聊天)
  • 每月API费用超过100美元(节省显著)
  • 需要特定模型优势(Claude适合代码,Gemini适合长上下文,GPT适合速度)
  • 某些步骤对延迟敏感,而其他步骤不敏感

对于简单聊天机器人或单一用途代理,单模型足矣。每次请求都需要相同能力时,路由开销不划算。

关键要点

  1. 使用能够胜任每个步骤的最廉价模型
  2. 昂贵模型只用于真正需要的任务
  3. 分类/路由步骤应始终使用最廉价模型
  4. 衡量每次代理运行的实际成本,而非仅看token定价
  5. 使用单密钥API聚合器大大简化多模型访问

通过一个API访问所有模型:lemondata.cc 提供300+模型,使用单个API密钥。构建多模型代理,无需管理多个供应商账号。

分享: