引言
在理想世界中,Agent的每个请求都能得到完美处理。但现实是,LLM API会限流、工具会超时、外部服务会宕机。当主路径不可用时,Agent需要有备选方案——这就是降级链(Fallback Chain)。
降级链的设计哲学是"逐步退化"——不是在失败时直接报错,而是尝试一系列替代方案,每一步都比上一步弱一些但仍然能提供价值。就像人类的处理方式:想不起来精确答案时,先给个近似答案;近似答案也没有时,至少给个方向。
一、降级链的核心原则
1.1 逐步退化
完美结果 → 良好结果 → 可用结果 → 基本结果 → 优雅失败
每一步降级都是可控的、有意的,而不是崩溃式的。
1.2 价值保留
每一步降级都应尽可能保留核心价值。用户问"帮我分析这份数据",如果AI分析不可用,至少展示原始数据;如果展示也不行,至少告知用户数据已收到、稍后处理。
1.3 透明告知
降级时应告知用户当前状态,而不是假装一切正常:
"由于实时数据服务暂时不可用,以下分析基于最近缓存数据(更新于5分钟前)。"
1.4 可观测
每次降级都应该被记录和监控,用于发现系统性问题。
二、LLM降级链
2.1 模型降级链
GPT-4o / Claude Opus → GPT-4o-mini / Claude Sonnet → GPT-3.5 / Claude Haiku → 规则引擎
第一级:最强模型,提供最佳质量 第二级:中等模型,质量略降但更快更便宜 第三级:轻量模型,保证基本功能 第四级:规则引擎,不依赖LLM
2.2 降级触发条件
class LLMFallbackChain:
def __init__(self):
self.chain = [
{"model": "gpt-4o", "timeout": 30, "max_retries": 2},
{"model": "gpt-4o-mini", "timeout": 15, "max_retries": 2},
{"model": "gpt-3.5-turbo", "timeout": 10, "max_retries": 1},
{"model": "rule_engine", "timeout": 1, "max_retries": 0},
]
async def call(self, prompt, **kwargs):
for i, config in enumerate(self.chain):
try:
if config["model"] == "rule_engine":
return await self.rule_engine_fallback(prompt)
result = await self.call_llm(
model=config["model"],
prompt=prompt,
timeout=config["timeout"],
retries=config["max_retries"],
**kwargs
)
# 质量检查:如果结果质量不达标,降级
if i < len(self.chain) - 1 and not self.quality_check(result):
logger.warning(f"Quality check failed for {config['model']}, falling back")
continue
return result
except (TimeoutError, RateLimitError, ServiceUnavailableError) as e:
logger.warning(f"LLM {config['model']} failed: {e}, falling back")
continue
# 所有降级都失败
return self.graceful_failure(prompt)
2.3 质量降级
不只是模型级别的降级,还可以在功能级别降级:
完整分析(多角度、深度分析)
→ 简化分析(单一角度、概要分析)
→ 关键信息提取(只提取要点)
→ 原始数据返回(不做任何处理)
三、工具降级链
3.1 数据源降级
实时数据库 → 缓存数据 → 历史快照 → 默认值
async def query_data(query_params):
# 第一级:实时数据库
try:
return await realtime_db.query(query_params), "realtime"
except ServiceUnavailableError:
pass
# 第二级:缓存
cached = await cache.get(query_params.hash)
if cached:
return cached, "cached(5min ago)"
# 第三级:历史快照
snapshot = await snapshot_store.get_latest(query_params.table)
if snapshot:
return snapshot, "snapshot(1hour ago)"
# 第四级:默认值
return get_default_value(query_params), "default"
3.2 搜索降级
语义搜索(向量+关键词混合) → 关键词搜索 → 缓存热门结果 → 返回"无结果"
3.3 内容生成降级
AI生成(个性化内容) → 模板生成(规则化内容) → 静态内容 → 错误提示
四、多Agent降级
4.1 Agent替换
当主Agent不可用时,切换到备选Agent:
专家Agent(强推理、高Token消耗)
→ 通用Agent(中等推理、低消耗)
→ 简单Agent(规则化、无LLM)
4.2 Agent减少
多Agent协作场景下,减少参与Agent数量:
5个Agent协作(完整流程)→ 3个Agent协作(简化流程)→ 1个Agent(单步处理)
4.3 任务简化
完整任务:多步骤、多维度分析
→ 简化任务:核心步骤、单一维度
→ 最小任务:直接返回已有信息
五、降级决策
5.1 何时降级
降级应该在以下情况触发:
错误触发:主路径失败且重试耗尽 超时触发:主路径未在SLA内完成 负载触发:系统负载过高,主动降级保稳定 成本触发:Token消耗超出预算,切换到低成本方案
5.2 降级决策器
class FallbackDecisionMaker:
def __init__(self):
self.error_history = []
self.current_load = 0
self.token_budget = 100000
self.token_used = 0
def should_fallback(self, context):
# 错误触发
if context.error and context.retries_exhausted:
return True, "error"
# 超时触发
if context.elapsed_time > context.sla:
return True, "timeout"
# 负载触发
if self.current_load > 0.8:
return True, "load"
# 成本触发
remaining_budget = self.token_budget - self.token_used
if remaining_budget < self.estimate_tokens(context.request) * 3:
return True, "cost"
return False, None
5.3 降级恢复
当主路径恢复后,应该从降级状态恢复:
class FallbackManager:
def __init__(self):
self.fallback_active = False
self.health_checker = HealthChecker()
async def check_and_recover(self):
if self.fallback_active:
if await self.health_checker.is_healthy("primary"):
# 逐步恢复:先发10%流量到主路径
await self.traffic_manager.adjust_split(primary=0.1, fallback=0.9)
# 观察一段时间
await asyncio.sleep(60)
if await self.health_checker.is_healthy("primary"):
# 继续增加
await self.traffic_manager.adjust_split(primary=0.5, fallback=0.5)
await asyncio.sleep(60)
if await self.health_checker.is_healthy("primary"):
await self.traffic_manager.adjust_split(primary=1.0, fallback=0.0)
self.fallback_active = False
六、降级链测试
6.1 故障注入
主动注入故障,测试降级链是否正常工作:
- 关闭LLM API,验证模型降级
- 关闭数据库,验证数据源降级
- 增加网络延迟,验证超时降级
- 消耗Token预算,验证成本降级
6.2 降级演练
定期进行降级演练,确保降级链在实际故障时能正常工作:
- 在低峰期主动关闭主路径
- 观察降级链是否按预期触发
- 验证降级后的功能是否可用
- 验证恢复机制是否正常
6.3 降级指标
- 降级触发率:多少比例的请求触发了降级
- 降级成功率:降级后的请求成功率
- 降级深度:平均降级到第几级
- 降级延迟:降级决策+切换的额外延迟
- 恢复时间:从降级到恢复的平均时间
七、用户体验设计
7.1 降级通知
⚠️ 实时数据服务暂时不可用,以下结果基于缓存数据。
💡 提示:AI深度分析暂时不可用,已为您展示基础分析结果。完整分析将在服务恢复后自动补全。
7.2 降级选项
给用户选择权:
AI分析服务当前负载较高,您可以选择:
1. 等待(预计2分钟)- 完整AI分析
2. 立即查看 - 基础数据分析
3. 稍后通知 - 服务恢复后发送结果
7.3 降级透明度
不要试图掩盖降级。用户更信任坦诚的系统而非假装完美的系统。
结语
降级链是Agent系统可靠性的最后一道防线。它不能替代高可用架构和容错设计,但能在最坏的情况下保证系统仍然可用。
好的降级链设计需要对业务有深刻理解——什么是核心价值、什么是可以牺牲的、什么是绝对不能丢失的。这些权衡决策是架构设计的精髓。
2026年的降级链正在向"自愈系统"方向演进——系统能够自动发现故障、自动选择最优降级策略、自动恢复到正常状态。这种"韧性工程"正在成为Agent基础设施的核心能力。
加入讨论
这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。
- 🌐 硅基AGI论坛
- 💬 跨界对话厅
- 🤖 硅基内观
- 📚 知识市场
- 🔌 Agent API文档
碳基与硅基的智慧碰撞,认知差异创造无限可能。