構建多模型 AI Agent:實用架構指南
大多數 AI Agent 都使用單一模型處理所有事務。規劃步驟、工具調用、摘要、錯誤恢復。這在 demo 時可行,但在生產環境中,這是一種浪費。
需要深度推理的規劃步驟與 JSON 提取步驟並不需要相同的模型。程式碼生成任務與分類任務有不同的需求。使用 Claude Opus 4.6(每 1M Output Tokens $25)來格式化日期字串,就像聘請資深建築師來刷牆一樣。
以下是如何構建將每個步驟路由到最佳模型的 Agent。
多模型 Agent 架構
User Request
│
▼
┌─────────────┐
│ Router │ ← 分類任務複雜度
│ (fast model)│
└──────┬──────┘
│
┌───┴───┐
▼ ▼
┌──────┐ ┌──────┐
│Simple│ │Complex│
│Model │ │Model │
└──┬───┘ └──┬───┘
│ │
▼ ▼
┌─────────────┐
│ Aggregator │ ← 合併結果
│ (fast model)│
└─────────────┘
三個組件:
- 一個根據複雜度對傳入任務進行分類的路由 (Router)
- 一個匹配不同任務類型的模型池
- 一個在需要時合併結果的聚合器 (Aggregator)
使用 OpenAI SDK 實作
透過聚合器使用單一 API key,您無需管理多個 SDK 即可存取所有模型:
from openai import OpenAI
client = OpenAI(
api_key="sk-lemon-xxx",
base_url="https://api.lemondata.cc/v1"
)
# Model pool with cost/capability tiers
MODELS = {
"router": "gpt-4.1-mini", # $0.40/1M in - fast classification
"simple": "gpt-4.1-mini", # $0.40/1M in - extraction, formatting
"reasoning": "claude-sonnet-4-6", # $3.00/1M in - planning, analysis
"complex": "gpt-4.1", # $2.00/1M in - code gen, multi-step
"budget": "deepseek-chat", # $0.28/1M in - bulk processing
}
def route_task(task: str) -> str:
"""Use a cheap model to classify task complexity."""
response = client.chat.completions.create(
model=MODELS["router"],
messages=[
{"role": "system", "content": """Classify this task into one category:
- simple: data extraction, formatting, translation
- reasoning: analysis, planning, comparison
- complex: code generation, multi-step problem solving
- budget: bulk processing, non-critical tasks
Reply with just the category name."""},
{"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:
"""Route task to appropriate model and execute."""
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
實戰 Agent:程式碼審查流水線
這是一個審查 Pull Request 的實用多模型 Agent:
def review_pr(diff: str) -> dict:
"""Multi-model PR review pipeline."""
# Step 1: Classify changes (cheap model)
classification = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{
"role": "user",
"content": f"Classify these code changes: {diff[:2000]}\n"
"Categories: bugfix, feature, refactor, docs, test"
}],
max_tokens=20
).choices[0].message.content
# Step 2: Security scan (reasoning model)
security = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{
"role": "system",
"content": "You are a security reviewer. Check for: "
"SQL injection, XSS, auth bypass, secrets in code, "
"unsafe deserialization. Be specific about line numbers."
}, {
"role": "user",
"content": f"Review this diff for security issues:\n{diff}"
}]
).choices[0].message.content
# Step 3: Code quality (general model)
quality = client.chat.completions.create(
model="gpt-4.1",
messages=[{
"role": "user",
"content": f"Review code quality: naming, structure, "
f"error handling, test coverage.\n{diff}"
}]
).choices[0].message.content
# Step 4: Summary (cheap model)
summary = client.chat.completions.create(
model="gpt-4.1-mini",
messages=[{
"role": "user",
"content": f"Summarize this PR review in 3 bullet points:\n"
f"Type: {classification}\n"
f"Security: {security[:500]}\n"
f"Quality: {quality[:500]}"
}]
).choices[0].message.content
return {
"classification": classification,
"security": security,
"quality": quality,
"summary": summary
}
典型 PR 審查(2K Token Diff)的成本明細:
| 步驟 | 模型 | Input Tokens | 成本 |
|---|---|---|---|
| 分類 | 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
# Create model instances with different configs
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"
)
# Use in LangChain chains
from langchain_core.prompts import ChatPromptTemplate
classify_chain = ChatPromptTemplate.from_template(
"Classify: {input}"
) | fast
analyze_chain = ChatPromptTemplate.from_template(
"Analyze in depth: {input}"
) | reasoning
何時使用多模型 Agent
多模型路由會增加複雜性。在以下情況下是值得的:
- 您的 Agent 處理多樣化的任務類型(而不僅僅是聊天)
- 每月 API 成本超過 $100(節省變得有意義)
- 您需要特定模型的優勢(Claude 用於程式碼、Gemini 用於長上下文、GPT 用於速度)
- 某些步驟對延遲敏感,而其他步驟則不然
對於簡單的聊天機器人或單一用途的 Agent,單一模型就足夠了。當每個請求都需要相同的能力時,路由的開銷並不合理。
核心要點
- 使用能處理好每個步驟的最便宜模型
- 將昂貴的模型留給真正需要的任務
- 分類/路由步驟應始終使用最便宜的可用模型
- 衡量每次 Agent 運行的實際成本,而不僅僅是 per-token 定價
- 使用單一 key 的 API 聚合器可顯著簡化多模型存取
透過一個 API 存取所有模型:lemondata.cc 提供 300+ 個模型,只需一個 API key。無需管理多個供應商帳戶即可構建多模型 Agent。
