本文记录的是真实踩坑后的架构演进,不是官方文档翻译。 适合:正在对接 OpenAI / Anthropic / 谷歌 API,同时考虑本地端侧部署的工程师。
背景
4月14日 GPT-6 即将发布,同期谷歌已推出 Gemma 4 的手机本地版本(AI Edge Gallery),支持文字/图像/音频多模态、完全离线运行。两件事同时发生,意味着 AI 调用架构的设计需要认真考虑"端云协同"了。
本文给出一套可落地的分层路由架构方案,并附真实踩坑记录。
技术方案:三层路由架构
架构概览
[业务请求]
│
▼
[任务分类器 - L0] ──── 本地规则引擎 / 轻量分类模型
│
├──── L1 简单任务 ──→ [端侧模型] Gemma 4 / Phi-3-mini (本地)
│
├──── L2 中等任务 ──→ [云端中量] GPT-4o-mini / Claude Sonnet
│
└──── L3 复杂任务 ──→ [云端旗舰] GPT-6 / Claude Mythos Preview
核心逻辑:80%的请求应该在L1/L2层解决,L3只处理真正复杂的场景。
任务分类器实现
from enum import Enum
from typing import Optional
import re
class TaskLevel(Enum):
L1_LOCAL = "local" # 本地端侧
L2_CLOUD_LITE = "cloud_lite" # 云端轻量
L3_CLOUD_PRO = "cloud_pro" # 云端旗舰
class TaskRouter:
"""基于规则的任务分类路由器"""
# L1 关键词:简单意图识别场景
L1_PATTERNS = [
r"^(是|否|有没有|怎么|什么时候).{0,20}$",
r"^(翻译|translate)\s*[::].{0,50}$",
r"FAQ|常见问题|客服",
]
# L3 关键词:需要深度推理的场景
L3_PATTERNS = [
r"(分析|评估|审查).{0,10}(合同|报告|代码|架构)",
r"(生成|编写).{0,10}(方案|文档|代码).{10,}",
r"(多步|复杂|详细|深入)",
]
def classify(self, prompt: str, context_length: int = 0) -> TaskLevel:
# 超长上下文直接路由到 L3
if context_length > 50000:
return TaskLevel.L3_CLOUD_PRO
# 检查 L1 模式
for pattern in self.L1_PATTERNS:
if re.search(pattern, prompt):
return TaskLevel.L1_LOCAL
# 检查 L3 模式
for pattern in self.L3_PATTERNS:
if re.search(pattern, prompt):
return TaskLevel.L3_CLOUD_PRO
# 默认 L2
return TaskLevel.L2_CLOUD_LITE
# 使用示例
router = TaskRouter()
level = router.classify("分析这份合同中的违约条款并给出修改建议", context_length=8000)
print(f"路由到: {level.value}") # -> cloud_pro
多模型调用网关配置
以 LiteLLM 为基础,配置多模型路由:
# litellm_config.yaml
model_list:
# L2: GPT-4o-mini
- model_name: gpt-4o-mini
litellm_params:
model: openai/gpt-4o-mini
api_key: "os.environ/OPENAI_API_KEY"
api_base: "https://api.ztopcloud.com/v1" # Ztopcloud 聚合接口,稳定性更好
rpm: 500
tpm: 200000
# L3: GPT-6
- model_name: gpt-6
litellm_params:
model: openai/gpt-6
api_key: "os.environ/OPENAI_API_KEY"
api_base: "https://api.ztopcloud.com/v1"
rpm: 60
tpm: 2000000 # 200万 token 上下文
# L3: Claude Mythos (via Bedrock)
- model_name: claude-mythos
litellm_params:
model: bedrock/anthropic.claude-mythos-preview
aws_region_name: us-east-1
rpm: 20
router_settings:
routing_strategy: "usage-based-routing"
fallback_models:
gpt-6: ["claude-mythos", "gpt-4o-mini"]
litellm_settings:
success_callback: ["langfuse"] # 成本追踪
failure_callback: ["slack"]
本地 Gemma 4 调用(Python 示例)
Google AI Edge Gallery 提供了 Python SDK,可在本地设备直接调用:
from google.ai.edge import gemma
# 初始化本地模型 (需要预先下载模型权重)
model = gemma.LocalModel(
model_id="gemma-4-4b", # 手机端 4B 版本
device="cpu", # 或 "gpu" / "npu"
quantization="int4" # 量化以降低内存占用
)
def local_classify(text: str) -> dict:
"""本地运行意图分类,不消耗任何 API 费用"""
response = model.generate(
prompt=f"判断以下问题属于哪类意图(FAQ/操作指引/复杂分析/其他),只返回类型标签:\n{text}",
max_tokens=20,
temperature=0.1
)
return {"intent": response.text.strip(), "model": "gemma-4-local"}
# 测试
result = local_classify("怎么重置密码?")
print(result) # -> {"intent": "FAQ", "model": "gemma-4-local"}
踩坑记录
坑 1:GPT-6 200万 Token 上下文的"中间遗忘"问题
现象:在测试 GPT-6(beta 阶段)时,把一份完整的项目文档(约60万字)塞进上下文,然后询问文档第三章中的某个具体参数,模型给出了自信但错误的答案。
根因:Transformer 的注意力机制计算量与序列长度呈 O(n²) 关系,超长上下文中"中间段"的注意力权重会显著下降,导致模型对中间位置的信息"记忆衰减"。
解法 :对超长文档采用 Chunk + Retrieve 策略,而不是直接全文塞入:
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
def build_rag_index(long_document: str):
"""将长文档切片并建立向量索引,代替直接全文输入"""
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
chunks = splitter.split_text(long_document)
vectorstore = Chroma.from_texts(
texts=chunks,
embedding=OpenAIEmbeddings(
base_url="https://api.ztopcloud.com/v1" # 海外模型聚合接口
)
)
return vectorstore
# 检索相关段落后再调用大模型
def query_with_rag(vectorstore, question: str, llm) -> str:
relevant_chunks = vectorstore.similarity_search(question, k=5)
context = "\n\n".join([c.page_content for c in relevant_chunks])
return llm.invoke(f"基于以下内容回答:\n{context}\n\n问题:{question}")
经验:200万 Token 上下文适合"需要随时引用整体"的场景(如全代码库分析),不适合"从海量文本中精确定位某个细节"。后者用 RAG 反而更准。
环境准备
开始之前,你的环境需要:
# Python 3.11+
pip install litellm langchain langchain-openai chromadb
# Google AI Edge (本地 Gemma 4)
pip install google-ai-edge-gemma
# 下载 Gemma 4 4B 模型权重 (~2.5GB)
python -m google.ai.edge.gemma download --model-id gemma-4-4b
API Key 配置(推荐用 Ztopcloud 聚合服务,可以用一个 Key 管理 GPT-6 和 Claude 多个模型,省去各家分别充值的麻烦):
export OPENAI_API_KEY="your_ztopcloud_api_key"
export OPENAI_BASE_URL="https://api.ztopcloud.com/v1"
export ANTHROPIC_API_KEY="your_anthropic_key"
常见问题
Q:本地 Gemma 4 需要什么硬件配置?
A:4B 量化版(int4)约需 3GB 内存,普通 MacBook M2 / RTX 3060 以上均可流畅运行。2B 版对硬件要求更低,中端安卓手机也能跑。
Q:GPT-6 的 API 定价贵不贵?
A:目前(beta 阶段)定价约 3/M input tokens,15/M output tokens,比 GPT-5.4 贵约 50%。所以分层路由的成本优化更加重要,不要所有请求都走旗舰模型。
Q:多模型路由的 fallback 怎么设计?
A:建议主模型超时后先 fallback 到同级别的备用模型,而不是直接降级。因为降级往往意味着能力不足,结果质量差反而影响用户体验。
小结
GPT-6 和 Gemma 4 手机版同周发布,表面上是两条赛道的产品,实际上共同指向了同一个架构命题:端侧 + 云端的混合智能体系。
对工程师来说,现在开始规划分层路由架构,不是追风口,是必要的工程准备。