使用多模型构建AI代理:实用架构指南
大多数AI代理使用单一模型处理所有任务。规划步骤、工具调用、摘要、错误恢复等。这种方式适合演示,但在生产环境中则显得浪费。
需要深度推理的规划步骤不必用同一个模型来做JSON提取。代码生成任务与分类任务的需求不同。用Claude Opus 4.6($25/百万输出token)来格式化日期字符串,就像请一位高级架构师来刷墙一样。
下面介绍如何构建能够将每一步路由到最优模型的代理。
多模型代理架构
User Request
│
▼
┌─────────────┐
│ Router │ ← 任务复杂度分类器
│ (fast model)│
└──────┬──────┘
│
┌───┴───┐
▼ ▼
┌──────┐ ┌──────┐
│Simple│ │Complex│
│Model │ │Model │
└──┬───┘ └──┬───┘
│ │
▼ ▼
┌─────────────┐
│ Aggregator │ ← 结果汇总器
│ (fast model)│
└─────────────┘
三个组成部分:
- 一个路由器,用于根据任务复杂度分类输入任务
- 一组针对不同任务类型匹配的模型池
- 一个在需要时合并结果的汇总器
使用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
实际案例:代码审查流水线
下面是一个实际的多模型代理,用于审查Pull Request:
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"请审查此差异中的安全问题:\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审查(2K token差异)的成本明细:
| 步骤 | 模型 | 输入Token数 | 成本 |
|---|---|---|---|
| 分类 | GPT-4.1-mini | 约2,100 | $0.0008 |
| 安全 | Claude Sonnet 4.6 | 约2,500 | $0.0075 |
| 质量 | GPT-4.1 | 约2,500 | $0.0050 |
| 总结 | GPT-4.1-mini | 约1,200 | $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(
"Classify: {input}"
) | fast
analyze_chain = ChatPromptTemplate.from_template(
"Analyze in depth: {input}"
) | reasoning
何时使用多模型代理
多模型路由增加了复杂度。适合以下情况:
- 代理处理多种任务类型(不仅仅是聊天)
- 每月API成本超过100美元(节省效果明显)
- 需要特定模型优势(Claude适合代码,Gemini适合长上下文,GPT适合速度)
- 部分步骤对延迟敏感,部分不敏感
对于简单聊天机器人或单一用途代理,单模型足够。每次请求都需相同能力时,路由开销不划算。
关键要点
- 使用能胜任每一步的最廉价模型
- 昂贵模型只用于真正需要的任务
- 分类/路由步骤应始终使用最便宜的模型
- 衡量实际每次代理运行成本,而非仅看每token价格
- 使用单密钥API汇总器显著简化多模型访问
通过一个API访问所有模型:lemondata.cc 提供300+模型,使用单个API密钥即可。无需管理多个供应商账户即可构建多模型代理。
