langchain中的异常处理with_retry()、with_fallbacks() 📅 发布时间:2026/7/13 1:49:19 👁️ 浏览次数: 文章目录with_retry()with_retry()示例with_fallbacks([fallback_function])with_fallbacks()在报错后回复维护中with_retry()和with_fallbacks()的链式操作这一块是异常处理重试和备用增强系统稳定性生产中非常实用面试的时候是加分项。with_retry()报错重试。核心有3个1、哪些异常才重试2、重试几次3、重试频次框架早就帮我们设计好了。1、stop_after_attempt (次数)含义总共尝试多少次包含第一次。建议通常设置为 3 到 5 次。次数太多会拖慢用户体验太少则无法解决偶发故障。2、retry_if_exception_type (异常类型)含义只有遇到特定的错误才重试。建议明确指定 (TimeoutError, ConnectionError) 等避免对逻辑错误进行无意义的重试。3、wait_exponential_jitter (等待策略)含义是否开启“指数退避 抖动”(简称指数抖动)。建议务必开启 (True)。原理第一次失败等 1 秒第二次等 2 秒第三次等 4 秒… 加上随机抖动是为了防止多个请求同时重试导致服务器瞬间崩溃惊群效应。with_retry()示例该代码用到的异常模拟工具类ExceptionMockUtils见其他笔记。代码fromlangchain_core.runnablesimportRunnableLambdafromexception_mock_utilsimportExceptionMockUtils# 引入你刚才写的工具类# 1. 定义一个“捣乱”的函数defunstable_task(input_data):print(f 正在尝试调用... (输入:{input_data}))# 故意抛出超时异常模拟网络故障# 注意LangChain 的重试默认主要针对 Exception 及其子类ExceptionMockUtils.mock_timeout()return成功结果# 2. 包装成 LangChain 的链并配置重试策略chain(RunnableLambda(unstable_task)).with_retry(stop_after_attempt3,# 最多重试 3 次retry_if_exception_type[TimeoutError],wait_exponential_jitterTrue# 开启指数退避这里会看到等待时间越来越长)# 3. 执行try:print(--- 开始测试 ---)chain.invoke(测试数据)exceptExceptionase:print(f❌ 重试耗尽最终报错:{e})输出结果--- 开始测试 --- 正在尝试调用...(输入: 测试数据) 正在尝试调用...(输入: 测试数据) 正在尝试调用...(输入: 测试数据)❌ 重试耗尽最终报错: Connection timed out after30.0seconds解读retry_if_exception_type需要重试的异常类型约定了TimeoutError异常需要重试。当发生该异常时触发重试机制次数为3次并开启指数抖动(指数退避抖动)。输出的结果和预期一致。当然这里如果用logger打印出具体的时间就更好了此处略。with_fallbacks([fallback_function])报错后使用备用服务。要求fallback_function指代的对象必须实现Runnable接口。例如本文示例RunnableLambda就是Runnable的实现类。with_fallbacks()在报错后回复维护中这里用千问plus故意写错base_url最后的-aaaa是额外加上的这样就可以触发异常。代码fromlangchain_openaiimportChatOpenAIfromlangchain_core.runnablesimportRunnableLambdaimportos API_KEYos.getenv(DASHSCOPE_API_KEY,YOUR API KEY)print(f 代码读取到的API_KEY{API_KEY})primary_modelChatOpenAI(api_keyAPI_KEY,# 替换为你的实际 Key (sk-...)base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1-aaaa,modelqwen-plus)# 2. 定义一个“假模型”函数# 这个函数接收输入虽然这里没用到返回一个固定的字符串defmock_fallback_logic(inputs):print(⚠️ 主模型挂了触发人工兜底逻辑...)# 这里可以写任何逻辑查数据库、返回固定话术、甚至调用另一个 APIreturn系统正在维护中请稍后再试或者您可以拨打客服热线 12345。# 3. 包装成 Runnable# 注意必须包装成 Runnable因为 with_fallbacks 只认这个fallback_functionRunnableLambda(mock_fallback_logic)# 4. 组合# 列表里放的是我们刚才包装的函数chainprimary_model.with_fallbacks([fallback_function])# 5. 测试# 如果 GPT-4 调用失败你会直接得到函数返回的字符串responsechain.invoke(帮我写首诗)print(response)# 输出: 系统正在维护中...输出结果 代码读取到的API_KEYsk-e49bdf8d737549ffb6269b63bcff8a7a ⚠️ 主模型挂了触发人工兜底逻辑...系统正在维护中请稍后再试或者您可以拨打客服热线12345。with_retry()和with_fallbacks()的链式操作重试和备用还可以链式操作简直完美。在定义Runnable实现类的时候直接链式操作即可。代码unstable_function()为自定义逻辑类。 retryable_chainRunnableLambda(unstable_function).with_retry(retry_if_exception_type(TimeoutError,),stop_after_attempt3,wait_exponential_jitterTrue)
Windows苹果设备驱动终极解决方案:告别iTunes的快速安装指南 Windows苹果设备驱动终极解决方案:告别iTunes的快速安装指南 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.com/… 2026/4/1 0:45:35
intv_ai_mk11多场景落地:覆盖内容运营、教育辅助、行政办公等6大方向 intv_ai_mk11多场景落地:覆盖内容运营、教育辅助、行政办公等6大方向 1. 模型介绍与核心能力 intv_ai_mk11是一款基于Llama架构的中等规模文本生成模型,特别适合处理通用问答、文本改写、解释说明和简短创作等任务。这个模型已经完成了本地部署优化&am… 2026/4/1 0:45:35
3个技巧让Blender对齐效率提升10倍:QuickSnap插件全攻略 3个技巧让Blender对齐效率提升10倍:QuickSnap插件全攻略 【免费下载链接】quicksnap Blender addon to quickly snap objects/vertices/points to object origins/vertices/points 项目地址: https://gitcode.com/gh_mirrors/qu/quicksnap 在三维建模的日常工… 2026/4/1 0:45:35
C++编程思维训练:从“摆平积木”问题理解算法与实现 1. 项目概述:从“摆平积木”到C编程思维的建立最近在卡码网的C基础课里看到一个挺有意思的题目,叫“摆平积木”。乍一看标题,你可能会觉得这是个玩具问题或者简单的数学题,但实际接触后才发现,这其实是一个绝佳的编程思… 2026/7/13 1:47:57
驱动电路中栅极电阻的计算 1、Rgon的计算合适的栅极电阻可以得到合适的开通时间,或者用来控制dv/dt,两种计算方法分别介绍如下。方法一 根据设定的开通时间计算RgonIGBT开通过程中,在米勒平台结束时CGE 和 CGC 被完全地充电,栅极平均电流可计算如下&#x… 2026/7/13 1:45:56
Fluent喷嘴雾化仿真:TAB、KHRT和Wave破碎模型选择与参数优化指南 在CFD仿真中,喷嘴雾化过程的精度往往决定了整个燃烧或喷雾系统的可靠性。很多工程师在设置Fluent破碎模型时,容易陷入一个误区:认为只要选择一个"高级"模型就能获得准确结果。但实际上,从初次破碎到二次雾化的整个过程&… 2026/7/13 1:45:56
IntelliJ IDEA 从卡顿到起飞,只用改这些。。。 前言今天不聊高并发、不聊架构设计,想和大家聊一个每位Java程序员每天都在用的工具——IntelliJ IDEA。说实话,用了多年IDEA,我踩过不少坑。今天我把最经典的10个坑整理出来,希望能帮大家少走一些弯路。很多小伙伴在工作中肯定也遇… 2026/7/13 1:43:55
HarmonyOS7 数据持久化 relationalStore:数据库实战 文章目录 前言第一步:建库第二步:建表代码实现 第三步:增(插入)核心代码 第四步:查(查询)第五步:改和删常见误区(小白必踩)完整可运行示例&#x… 2026/7/13 1:43:55
5G NR 帧结构配置实战:2.6GHz/3.5GHz/4.9GHz 三频段 5 种时隙方案详解 5G NR帧结构配置实战:三频段时隙方案深度解析与工程决策指南引言:5G帧结构设计的核心挑战当我们在城市中心使用5G手机观看4K直播时,背后是无数基站与终端设备间精密协调的时隙配置在支撑。5G NR(New Radio)的帧结构设计… 2026/7/13 1:39:53
HS2-HF Patch终极指南:如何用3步解决Honey Select 2的70+个痛点 HS2-HF Patch终极指南:如何用3步解决Honey Select 2的70个痛点 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 你是否曾经在Honey Select 2中遇到过… 2026/7/13 0:01:19
语音转文字工具AsrTools:让音频整理变得简单高效 语音转文字工具AsrTools:让音频整理变得简单高效 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accurate text … 2026/7/13 0:03:19
基于深度学习的蘑菇或花卉或动漫人物或中草药货水果蔬菜等识别系统31(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_ 基于深度学习的蘑菇或花卉或动漫人物或中草药货水果蔬菜等识别系统31(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_ 独家界面!不会重复,此项目属于本人原创,若有雷同,均是盗卖,各位买… 2026/7/13 0:05:20
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/12 0:01:13
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/12 0:01:13
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/12 0:03:14