Agent Fallback 链条设计:当主模型不可用时,产品不能直接挂掉
Agent Fallback 链条设计:当主模型不可用时,产品不能直接挂掉
一、Agent 系统的可靠性瓶颈不在模型能力,而在可用性
Agent 工作流设计通常聚焦在任务拆解、工具调用和结果合并上。但生产环境里更常见的问题不是模型能力不足,而是模型服务不可用。API 超时、限流、区域故障、价格变动导致的供应商切换,这些可用性问题比推理质量问题出现频率高得多。
如果一个 Agent 只依赖单一模型服务,任何一次服务中断都会导致整个工作流卡住。用户看到"系统繁忙请稍后"的频率远高于"回答不够好"的频率。Fallback 链条设计就是为了解决可用性问题:主模型不可用时自动切换到备选模型,而不是让产品直接挂掉。
二、Fallback 链条要按质量优先级排列
Fallback 不是随机选择一个备用模型。应该按照质量优先级排列,首选模型提供最佳输出,次选模型提供可接受输出,兜底模型保证至少有结果。
flowchart TD
A[Agent 任务请求] --> B[首选模型:GPT-4]
B --> C{调用成功?}
C -->|是| D[高质量输出]
C -->|否-超时| E[次选模型:Claude-3]
C -->|否-限流| E
E --> F{调用成功?}
F -->|是| G[可接受输出:标注降级]
F -->|否| H[兜底模型:本地小模型]
H --> I{调用成功?}
I -->|是| J[基础输出:标注严重降级]
I -->|否| K[预设回复模板]
D --> L[返回结果]
G --> L
J --> L
K --> L
每个降级层级都应该标注当前使用的模型等级。用户看到"此回答由次选模型生成"后,对输出质量的预期会相应调整。这比让用户以为回答来自首选模型但实际质量差更好。
三、Fallback 链条的超时与重试策略
type ModelTier = {
name: string;
provider: string;
timeoutMs: number;
maxRetries: number;
qualityLabel: string;
};
const fallbackChain: ModelTier[] = [
{ name: "gpt-4", provider: "openai", timeoutMs: 5000, maxRetries: 1, qualityLabel: "高质量" },
{ name: "claude-3", provider: "anthropic", timeoutMs: 4000, maxRetries: 1, qualityLabel: "可接受" },
{ name: "local-small", provider: "local", timeoutMs: 2000, maxRetries: 0, qualityLabel: "基础" },
];
export async function callWithFallback(prompt: string): Promise<FallbackResult> {
for (const tier of fallbackChain) {
for (let attempt = 0; attempt <= tier.maxRetries; attempt++) {
try {
const result = await callModel(tier.provider, tier.name, prompt, {
timeoutMs: tier.timeoutMs,
});
return {
content: result,
qualityLabel: tier.qualityLabel,
usedModel: tier.name,
isFallback: tier !== fallbackChain[0],
};
} catch (error) {
if (attempt < tier.maxRetries) continue;
// 当前层级耗尽重试次数,进入下一层级
console.warn(`模型 ${tier.name} 不可用,尝试下一个层级`);
}
}
}
// 所有层级都失败,返回预设模板
return {
content: "系统暂时无法处理,请稍后重试或手动操作。",
qualityLabel: "模板回复",
usedModel: "template",
isFallback: true,
};
}
type FallbackResult = {
content: string;
qualityLabel: string;
usedModel: string;
isFallback: boolean;
};
超时时间的设置有讲究。首选模型给5秒,次选给4秒,兜底给2秒。越往后超时越短,因为用户已经等了更久。总等待时间不应超过12秒,超过后直接返回模板回复。
四、Fallback 输出质量的不一致性需要管理
Fallback 链条最大的副作用是输出风格不一致。首选模型和次选模型的写作风格、格式偏好和专业度差异很大。用户连续两次提问,第一次得到高质量回答,第二次因为首选模型限流而得到风格完全不同的回答,体验会割裂。
缓解方式是在降级输出时限制回答范围。次选模型只做事实性回答,不做创意性输出;兜底模型只做简单格式化,不做复杂推理。通过缩小降级模型的输出范围,来缩小风格差异的影响。
还要注意 Fallback 的调用统计。如果次选模型被频繁触发,说明首选模型的服务稳定性有问题,应该考虑切换首选供应商或增加更多备选。Fallback 链条是应急机制,不应该成为常态路径。
最后是成本管理。次选模型的调用价格可能和首选不同。高频 Fallback 场景下的成本增长需要监控。设置每日报价上限,超过后直接跳到模板回复,避免成本失控。
五、总结
Agent Fallback 链条按质量优先级排列,主模型不可用时依次降级到次选和兜底模型。每个降级层级标注质量等级,让用户调整预期。超时时间随层级递减,总等待不超过12秒。降级输出时限制回答范围以缩小风格差异。Fallback 触发频率高时应重新评估首选供应商。成本监控设置日报价上限,防止 Fallback 导致成本失控。
更多推荐



所有评论(0)