Skip to content

降级与容错

🎯 学习目标

  • 区分 transient 与 permanent 错误并采取不同策略
  • 实现 JSON 解析失败、工具超时的回退路径
  • 避免 silent failure 与无限重试

引言

生产环境一定会失败:限流、超时、解析错误。用户宁可看到「服务繁忙」,也不要 silent wrong answer。

章节正文

第 1 步:失败分类与策略表

失败策略
网络 5xx / 429指数退避重试(最多 3 次)
JSON 解析失败带错误信息重问模型 1 次 → fallback 文本
工具超时跳过该工具,告知用户部分功能不可用
主模型不可用备用模型(如 4o → 4o-mini)
RAG 无命中拒答或仅通用知识(需产品策略)

第 2 步:代码模式

python
import tenacity
from langchain_openai import ChatOpenAI

@tenacity.retry(stop=tenacity.stop_after_attempt(3), wait=tenacity.wait_exponential())
def call_llm(messages):
    return primary_llm.invoke(messages)

def chat_with_fallback(messages):
    try:
        return call_llm(messages)
    except Exception:
        return fallback_llm.invoke(messages)

前端配合:HTTP 503 + { error: "service_busy", retry_after: 30 },UI 展示重试按钮。

动手练习

  1. 模拟 429 响应,验证指数退避
  2. 解析失败时实现一次「请只输出合法 JSON」重试

本节小结

重试仅限 transient;解析/工具失败有 fallback;主备模型切换;禁止 silent failure。