Atoms多模型同时调用怎么捕获模型错误
需要明确区分瞬态错误和永久错误:仅对429、500、502、503、504错误以及连接/读取超时进行重试;若包含Retry-After头信息,则直接进行sleep操作,同时禁用指数退避策略;另外,需对各模型异常进行独立捕获,并且支持并发和链式fallback。

在 Atoms 框架中实现多模型并行调用时,必须区分瞬态错误与永久错误,否则会因重试全部失败模型导致请求雪崩或响应延迟激增。
识别可重试与不可重试的模型错误
第一步:检查异常类型是否属于
【瞬态故障】
第二步:若响应头含 Retry-After 字段,直接 sleep 对应秒数,
【禁止叠加指数退避】
第三步:对每个模型调用单独封装 try/except,避免一个模型抛出 401 导致整组并发调用提前终止。
并发调用中逐个捕获模型异常
方法一:使用 asyncio.gather + return_exceptions=True
调用时传入 return_exceptions=True 参数,使 gather 不因单个协程异常而中断,所有结果(含 Exception 实例)按原顺序返回。
方法二:手动 await + 独立异常处理
对每个模型创建独立 task,用 asyncio.create_task 包裹,并在 await 后立即用 isinstance(e, Exception) 判断是否出错,再分类记录或降级。
注意:不要在 for 循环内直接 await,否则变成串行执行,失去并发意义。
按优先级链式故障转移
第一步:定义模型 fallback 链,例如 ["qwen-plus", "deepseek-chat", "glm-4-air"]
第二步:对链首模型执行带重试的调用(最多 2 次,含抖动)
第三步:若仍失败,立即切换至链中下一个模型,不等待前一个模型的最终超时耗尽
第四步:任一模型成功即终止后续尝试,返回其结果;全链失败则聚合各模型的异常类型与消息,供上层决策
-
下载
-
- 关于柯南的沙雕网名有哪些
- 角色扮演 | 1
- 网名
-
- 最新中性名字男女通用网名有哪些
- 角色扮演 | 1
- 网名
-
- 关于蓝色说唱的网名有哪些
- 角色扮演 | 1
- 网名
-
- 我好喜欢你是什么梗?
- 角色扮演 |