当前位置: 首页 > article >正文

【GPT入门】第33 课 一文吃透 LangChain:chain 结合 with_fallbacks ([]) 的实战指南

@[TOC](【GPT入门】第33课 一文吃透 LangChain:chain 结合 with_fallbacks ([]) 的实战指南)

1. fallback概述

模型回退,可以设置在llm上,也可以设置在chain上,都带有with_fallbacks([])函数

2. llm的回退

2.1 代码

核心代码: bad_llm.with_fallbacks([good_llm])
打开debug,观察执行情况

from langchain_core.prompts import ChatPromptTemplate
from langchain_ollama import OllamaLLM
from langchain.globals import set_debug
from langchain_core.output_parsers import StrOutputParserset_debug(True)
chat_prompt = ChatPromptTemplate.from_messages([("system", "You are a helpful assistant."),("human", "{input}"),
])
bad_llm = OllamaLLM(model="gpt-fack")
good_llm = OllamaLLM(model="gpt-4")
llm_with_fallback = bad_llm.with_fallbacks([good_llm])
fallback_chain = chat_prompt | llm_with_fallback | StrOutputParser()
print(fallback_chain.invoke({"input": "你是谁?"}))

2.2 执行结果

[llm/start] [llm:OllamaLLM] Entering LLM run with input:
{"prompts": ["你是谁?"]
}
[llm/end] [llm:OllamaLLM] [10.98s] Exiting LLM run with output:
{"generations": [[{"text": "我是来自阿里云的大规模语言模型,我被命名为通义千问。我可以回答各种问题,包括但不限于科技、文化、生活、历史、地理等各个领域的问题。我还能够进行文本摘要、代码解析、图像生成、视频转码等各种任务。如果您有任何具体问题或需要某个特定任务的帮助,请随时告诉我,我会尽力为您提供最准确和最有用的答案和帮助。","generation_info": {"model": "gpt-4","created_at": "2025-04-02T21:53:46.7502575Z","done": true,"done_reason": "stop","total_duration": 10975642300,"load_duration": 3865007300,"prompt_eval_count": 11,"prompt_eval_duration": 1252263100,"eval_count": 83,"eval_duration": 5857248900,"response": "","context": [151644,872,.---省略---33108,100364,1773]},"type": "Generation"}]],"llm_output": null,"run": null,"type": "LLMResult"
}
我是来自阿里云的大规模语言模型,我被命名为通义千问。我可以回答各种问题,包括但不限于科技、文化、生活、历史、地理等各个领域的问题。我还能够进行文本摘要、代码解析、图像生成、视频转码等各种任务。如果您有任何具体问题或需要某个特定任务的帮助,请随时告诉我,我会尽力为您提供最准确和最有用的答案和帮助。

3. chain级别fallback

核心代码:res = bad_chain.with_fallbacks([good_chain])

3.1 代码

from langchain_core.prompts import ChatPromptTemplate
from langchain_ollama import OllamaLLM
from langchain.globals import set_debug, set_verboseset_debug(True)from langchain_core.output_parsers import StrOutputParser
chat_prompt = ChatPromptTemplate.from_messages([("system", "You are a helpful assistant."),("human", "{input}"),
])
# 构建一个错误的model, 该model不存在,会报错
llm_chatmodel = OllamaLLM(model="gpt-fack")
bad_chain = chat_prompt | llm_chatmodel | StrOutputParser()
# print(bad_chain.invoke({"input": "你是谁?"}))# 构建一个正确的链llm_chatmodel = OllamaLLM(model="gpt-4")
good_chain = chat_prompt | llm_chatmodel | StrOutputParser()
# print(good_chain.invoke({"input": "你是谁?"}))
# 设置fallback
res = bad_chain.with_fallbacks([good_chain])
print(res.invoke({"input": "我是星火老师,你是谁?"}))

3.2 执行结果

C:\ProgramData\anaconda3\envs\gptLearning\python.exe "E:\workspace\gptLearning\gptLearning\ls10\06 ollama\332_chain级别的fallback.py" 
[chain/start] [chain:RunnableWithFallbacks] Entering Chain run with input:
{"input": "我是星火老师,你是谁?"
}
[chain/start] [chain:RunnableWithFallbacks > chain:RunnableSequence] Entering Chain run with input:
{"input": "我是星火老师,你是谁?"
}
[chain/start] [chain:RunnableWithFallbacks > chain:RunnableSequence > prompt:ChatPromptTemplate] Entering Prompt run with input:
{"input": "我是星火老师,你是谁?"
}
[chain/end] [chain:RunnableWithFallbacks > chain:RunnableSequence > prompt:ChatPromptTemplate] [1ms] Exiting Prompt run with output:
[outputs]
[llm/start] [chain:RunnableWithFallbacks > chain:RunnableSequence > llm:OllamaLLM] Entering LLM run with input:
{"prompts": ["System: You are a helpful assistant.\nHuman: 我是星火老师,你是谁?"]
}
[llm/error] [chain:RunnableWithFallbacks > chain:RunnableSequence > llm:OllamaLLM] [9ms] LLM run errored with error:
"ResponseError(\"model 'gpt-fack' not found\")Traceback (most recent call last):\n\n\n  File \"C:\\ProgramData\\anaconda3\\envs\\gptLearning\\Lib\\site-packages\\langchain_core\\language_models\\llms.py\", line 787, in _generate_helper\n    self._generate(\n\n\n  File \"C:\\ProgramData\\anaconda3\\envs\\gptLearning\\Lib\\site-packages\\langchain_ollama\\llms.py\", line 288, in _generate\n    final_chunk = self._stream_with_aggregation(\n                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\n  File \"C:\\ProgramData\\anaconda3\\envs\\gptLearning\\Lib\\site-packages\\langchain_ollama\\llms.py\", line 256, in _stream_with_aggregation\n    for stream_resp in self._create_generate_stream(prompt, stop, **kwargs):\n\n\n  File \"C:\\ProgramData\\anaconda3\\envs\\gptLearning\\Lib\\site-packages\\langchain_ollama\\llms.py\", line 211, in _create_generate_stream\n    yield from self._client.generate(\n\n\n  File \"C:\\ProgramData\\anaconda3\\envs\\gptLearning\\Lib\\site-packages\\ollama\\_client.py\", line 168, in inner\n    raise ResponseError(e.response.text, e.response.status_code) from None\n\n\nollama._types.ResponseError: model 'gpt-fack' not found (status code: 404)"
[chain/error] [chain:RunnableWithFallbacks > chain:RunnableSequence] [19ms] Chain run errored with error:
"ResponseError(\"model 'gpt-fack' not found\")Traceback (most recent call last):\n\n\n  File \"C:\\ProgramData\\anaconda3\\envs\\gptLearning\\Lib\\site-packages\\langchain_core\\runnables\\base.py\", line 3025, in invoke\n    input = context.run(step.invoke, input, config)\n            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\n  File \"C:\\ProgramData\\anaconda3\\envs\\gptLearning\\Lib\\site-packages\\langchain_core\\language_models\\llms.py\", line 390, in invoke\n    self.generate_prompt(\n\n\n  File \"C:\\ProgramData\\anaconda3\\envs\\gptLearning\\Lib\\site-packages\\langchain_core\\language_models\\llms.py\", line 763, in generate_prompt\n    return self.generate(prompt_strings, stop=stop, callbacks=callbacks, **kwargs)\n           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\n  File \"C:\\ProgramData\\anaconda3\\envs\\gptLearning\\Lib\\site-packages\\langchain_core\\language_models\\llms.py\", line 966, in generate\n    output = self._generate_helper(\n             ^^^^^^^^^^^^^^^^^^^^^^\n\n\n  File \"C:\\ProgramData\\anaconda3\\envs\\gptLearning\\Lib\\site-packages\\langchain_core\\language_models\\llms.py\", line 787, in _generate_helper\n    self._generate(\n\n\n  File \"C:\\ProgramData\\anaconda3\\envs\\gptLearning\\Lib\\site-packages\\langchain_ollama\\llms.py\", line 288, in _generate\n    final_chunk = self._stream_with_aggregation(\n                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\n  File \"C:\\ProgramData\\anaconda3\\envs\\gptLearning\\Lib\\site-packages\\langchain_ollama\\llms.py\", line 256, in _stream_with_aggregation\n    for stream_resp in self._create_generate_stream(prompt, stop, **kwargs):\n\n\n  File \"C:\\ProgramData\\anaconda3\\envs\\gptLearning\\Lib\\site-packages\\langchain_ollama\\llms.py\", line 211, in _create_generate_stream\n    yield from self._client.generate(\n\n\n  File \"C:\\ProgramData\\anaconda3\\envs\\gptLearning\\Lib\\site-packages\\ollama\\_client.py\", line 168, in inner\n    raise ResponseError(e.response.text, e.response.status_code) from None\n\n\nollama._types.ResponseError: model 'gpt-fack' not found (status code: 404)"
[chain/start] [chain:RunnableWithFallbacks > chain:RunnableSequence] Entering Chain run with input:
{"input": "我是星火老师,你是谁?"
}
[chain/start] [chain:RunnableWithFallbacks > chain:RunnableSequence > prompt:ChatPromptTemplate] Entering Prompt run with input:
{"input": "我是星火老师,你是谁?"
}
[chain/end] [chain:RunnableWithFallbacks > chain:RunnableSequence > prompt:ChatPromptTemplate] [1ms] Exiting Prompt run with output:
[outputs]
[llm/start] [chain:RunnableWithFallbacks > chain:RunnableSequence > llm:OllamaLLM] Entering LLM run with input:
{"prompts": ["System: You are a helpful assistant.\nHuman: 我是星火老师,你是谁?"]
}
[llm/end] [chain:RunnableWithFallbacks > chain:RunnableSequence > llm:OllamaLLM] [12.51s] Exiting LLM run with output:
{"generations": [[{"text": "我是来自阿里云的大规模语言模型——通义千问。我被设计成能够理解和生成各种形式的语言文本,包括但不限于中文、英文、法文等。\n\n我可以根据你的问题或指令进行回答,甚至可以自动生成与主题相关的文章或段落。无论你有什么需求,我都会尽力提供最准确和最有帮助的答案。\n\n感谢你选择与我交流!如果你有任何疑问或需要进一步的帮助,请随时告诉我,我会尽力为你提供最好的支持和服务。","generation_info": {"model": "gpt-4","created_at": "2025-04-02T22:06:15.9157224Z","done": true,"done_reason": "stop","total_duration": 12508307000,"load_duration": 3565616000,"prompt_eval_count": 29,"prompt_eval_duration": 1493288400,"eval_count": 100,"eval_duration": 7411968100,"response": "","context": [151644,---省略--100143,106510,1773]},"type": "Generation"}]],"llm_output": null,"run": null,"type": "LLMResult"
}
[chain/start] [chain:RunnableWithFallbacks > chain:RunnableSequence > parser:StrOutputParser] Entering Parser run with input:
{"input": "我是来自阿里云的大规模语言模型——通义千问。我被设计成能够理解和生成各种形式的语言文本,包括但不限于中文、英文、法文等。\n\n我可以根据你的问题或指令进行回答,甚至可以自动生成与主题相关的文章或段落。无论你有什么需求,我都会尽力提供最准确和最有帮助的答案。\n\n感谢你选择与我交流!如果你有任何疑问或需要进一步的帮助,请随时告诉我,我会尽力为你提供最好的支持和服务。"
}
[chain/end] [chain:RunnableWithFallbacks > chain:RunnableSequence > parser:StrOutputParser] [5ms] Exiting Parser run with output:
{"output": "我是来自阿里云的大规模语言模型——通义千问。我被设计成能够理解和生成各种形式的语言文本,包括但不限于中文、英文、法文等。\n\n我可以根据你的问题或指令进行回答,甚至可以自动生成与主题相关的文章或段落。无论你有什么需求,我都会尽力提供最准确和最有帮助的答案。\n\n感谢你选择与我交流!如果你有任何疑问或需要进一步的帮助,请随时告诉我,我会尽力为你提供最好的支持和服务。"
}
[chain/end] [chain:RunnableWithFallbacks > chain:RunnableSequence] [12.52s] Exiting Chain run with output:
{"output": "我是来自阿里云的大规模语言模型——通义千问。我被设计成能够理解和生成各种形式的语言文本,包括但不限于中文、英文、法文等。\n\n我可以根据你的问题或指令进行回答,甚至可以自动生成与主题相关的文章或段落。无论你有什么需求,我都会尽力提供最准确和最有帮助的答案。\n\n感谢你选择与我交流!如果你有任何疑问或需要进一步的帮助,请随时告诉我,我会尽力为你提供最好的支持和服务。"
}
[chain/end] [chain:RunnableWithFallbacks] [12.55s] Exiting Chain run with output:
{"output": "我是来自阿里云的大规模语言模型——通义千问。我被设计成能够理解和生成各种形式的语言文本,包括但不限于中文、英文、法文等。\n\n我可以根据你的问题或指令进行回答,甚至可以自动生成与主题相关的文章或段落。无论你有什么需求,我都会尽力提供最准确和最有帮助的答案。\n\n感谢你选择与我交流!如果你有任何疑问或需要进一步的帮助,请随时告诉我,我会尽力为你提供最好的支持和服务。"
}
我是来自阿里云的大规模语言模型——通义千问。我被设计成能够理解和生成各种形式的语言文本,包括但不限于中文、英文、法文等。我可以根据你的问题或指令进行回答,甚至可以自动生成与主题相关的文章或段落。无论你有什么需求,我都会尽力提供最准确和最有帮助的答案。感谢你选择与我交流!如果你有任何疑问或需要进一步的帮助,请随时告诉我,我会尽力为你提供最好的支持和服务。Process finished with exit code 0

执行过程有详细的错误信息

在这里插入图片描述

相关文章:

【GPT入门】第33 课 一文吃透 LangChain:chain 结合 with_fallbacks ([]) 的实战指南

[TOC](【GPT入门】第33课 一文吃透 LangChain:chain 结合 with_fallbacks ([]) 的实战指南) 1. fallback概述 模型回退,可以设置在llm上,也可以设置在chain上,都带有with_fallbacks([])函数 2. llm的回退 2.1 代码 核心代码&…...

高级语言程序设计

第八章 结构体类型和自定义类型-CSDN博客 第九章 预编译处理-CSDN博客 第十章 文件-CSDN博客...

【51单片机】2-7【I/O口】点亮数码管

1.硬件 51最小系统数码管模块 2.软件 静态数码管 #include "reg52.h" //头文件 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8;sbit LSAP2^2;//位选 sbit LSBP2^3; sbit LSCP2^4;u8 code smgduan[17]{0x3f,0x06,0x5b,0x4f,0…...

叁仟数智指路机器人的智能导航精度如何?

哇塞!各位朋友们,来了解一下超厉害的叁仟数智指路机器人的智能导航精度吧!它的精度可是因为采用了不同的定位技术而展现出独特魅力哦! 先看蓝牙定位,这可是超实用的!一般精度能保持在 3 - 5 米左右呢&…...

华为存储考试内容HCIP-Storage

华为认证存储高级工程师 | Huawei Certified ICT Professional-Storage 是培训与认证具备对存储系统进行规划设计、部署实施、性能优化、管理运维和故障处理能力的存储高级工程师 通过该认证证明:工程师能理解闪存及分布式存储产品的相关功能及使用场景&#xff0…...

A*算法详解(新手入门)——图文并茂,学习笔记分享

前言 本文是博主在学习A*算法时做的一个小案例,有不懂的地方可以私信博主一起讨论学习,由于博主水平有限,可能存在部分知识点遗漏或书写不够严谨,欢迎各位志同道合的朋友批评指教,博主定当虚心学习,感谢各…...

初学STM32系统时钟设置

资料来自正点原子 在学习江科大教程示例的时候默认系统时钟是72MHZ,但是这个系统时钟是怎么过来的呢,通过时钟树以及相关的资料的学习可知,系统时钟它可以是内部RC时钟HSI 8MHZ通过锁相环倍频而来,也可以是外部晶振4-16MHZ通过锁相…...

如何在 Windows 10 上安装 PyGame

PyGame 是 Python 编程语言中的一组跨平台模块,这意味着您可以在任何操作系统上安装它,这篇文章告诉您如何在 Windows 10 上安装 PyGame。 如何在 Windows 10 上安装 PyGame? PyGame 依赖于 Python,这意味着您必须在安装 PyGame …...

STM32 × CLion 新建项目

STM32 CLion 新建项目 新建和配置一个 STM32 项目 1 创建项目 假如是 ST 官方开发板,比如 NUCLEO 板,选择从 ST 板创建 假如是单芯片或淘宝买的那种 F103 开发板,选择从 MCU 创建 2 STM CubeMX 配置 2.1 Pinout & Configuration 外…...

WebSocket 详解:构建一个复杂的实时聊天应用

文章目录 一、前言二、WebSocket 基础2.1 WebSocket 与 HTTP 的区别2.2 WebSocket 的优点 三、搭建 WebSocket 服务端3.1 安装 ws 和 redis 库3.2 创建 WebSocket 服务端3.3 创建用户身份验证 四、前端实现 WebSocket 客户端4.1 创建 Vue 3 项目4.2 实现 WebSocket 连接和用户注…...

详解七大排序

目录 一.直接插入排序 (1)基本思想 (2)算法步骤 (3)代码实现 (4)算法特性 (5)算法优化 (6)示例演示 二.希尔排序 &#xff08…...

python爬虫:小程序逆向实战教程

根据我之前发表的文章,我们进行延伸实战https://blog.csdn.net/weixin_64809364/article/details/146981598?spm1001.2014.3001.5501 1. 想要爬取什么小程序,我们进行搜索 2. 找到我们vx小程序的文件地址,我们就可以进行破解 破解步骤强看…...

day 8 TIM定时器

一、STM32 定时器概述 1. 定时器的概述定时器的基本功能,但是 STM32 的定时器除了具有定时功能之外,也具有定时器中断功能,还具有输入捕获(检测外部信号)以及输出比较功能(输出不同的脉冲)&…...

全星 研发项目管理APQP 软件:驱动汽车及制造业研发升级的数字化引擎

全星 APQP 软件:驱动汽车及制造业研发升级的数字化引擎 在汽车及制造业竞争白热化的当下,如何高效推进研发项目,同时确保严格合规,成为企业亟待解决的难题。 全星研发项目管理 APQP 软件系统,凭借卓越的功能与显著优势…...

【VUE】RuoYi-Vue3项目结构的分析

【VUE】RuoYi-Vue3项目结构的分析 1. 项目地址2. RuoYi-Vue3项目结构2.1 整体结构2.2 package.json2.2.1 🧾 基本信息2.2.2 🔧 脚本命令(scripts)2.2.3 🌍 仓库信息2.2.4 📦 项目依赖(dependenc…...

智能体和RPA都需要程序思维,如何使用影刀的变量?

欢迎来到涛涛聊AI, 不管AI还是RPA,都需要用到编程思想才能完成批量工作。今天研究了下影刀的变量。 变量类型 根据变量值选择相应的类型,可选择任意一种影刀所支持的数据类型 变量值 指定变量中保存的值,会根据不同的类型设置…...

详解 MySQL 三层 B+ 树能存多少数据的计算方法

MySQL三层B树能存多少数据 1. 内部节点(非叶子节点)的容量计算2. 叶子节点的数据记录容量3. 三层 B 树的存储能力计算4. 总结 1. 内部节点(非叶子节点)的容量计算 设定参数如下: P:每个节点页的大小&…...

论文笔记(七十五)Auto-Encoding Variational Bayes

Auto-Encoding Variational Bayes 文章概括摘要1 引言2 方法2.1 问题场景2.2 变分下界2.3 SGVB估计器与AEVB算法2.4 重参数化技巧 3 示例:变分自编码器(Variational Auto-Encoder)4 相关工作5 实验6 结论7 未来工作 文章概括 引用&#xff1…...

Sentinel[超详细讲解]-7 -之 -熔断降级[异常比例阈值]

📖 主要讲解熔断降级之 --- 异常比例阈值 🚀 1️⃣ 背景 Sentinel 以流量作为切入点,提供了很多的丰富的功能,例如🤗: 流量控制,熔断降级等,它能够有效的适用各个复杂的业务场景&am…...

《基于 C++ 的怪物掉落武器功能开发》

一、项目背景 在游戏开发中,怪物掉落武器机制是丰富游戏玩法与提升玩家体验的关键部分。本功能基于 C 语言开发,旨在实现一套逻辑清晰、扩展性强的怪物掉落武器系统,为游戏核心玩法增添策略性与趣味性。 二、功能需求 (一&#…...

C++11观察者模式示例

该示例代码采用C11标准&#xff0c;解决以下问题&#xff1a; 消除了类继承的强耦合方式&#xff1b;通知接口使用可变参数模板&#xff0c;支持任意参数&#xff1b; 示例代码 .h文件如下&#xff1a; #include <functional> #include <string> #include <…...

算法设计学习10

实验目的及要求&#xff1a; 本查找实验旨在使学生深入了解不同查找算法的原理、性能特征和适用场景&#xff0c;培养其在实际问题中选择和应用查找算法的能力。通过实验&#xff0c;学生将具体实现多种查找算法&#xff0c;并通过性能测试验证其在不同数据集上的表现&#xff…...

configurable_alternatives 方法与使用技巧

核心功能与应用场景 在开发调试过程中&#xff0c;当需要动态替换链中的完整组件​&#xff08;如大语言模型、提示词模板等&#xff09;并保持对话连续性时&#xff0c;可通过 configurable_alternatives() 实现运行时组件热替换。典型场景包括&#xff1a; 调试时切换不同版…...

Angular 2 模板语法详解

Angular 2 模板语法详解 引言 Angular 2 作为一款强大的前端框架,以其组件化的开发模式和高效的性能被众多开发者所青睐。模板语法是Angular 2中用于定义组件UI的关键部分。本文将详细介绍Angular 2的模板语法,帮助开发者更好地理解和运用这一功能。 模板语法概述 Angula…...

对称加密:原理、算法与应用全解析

对称加密作为密码学领域的核心技术&#xff0c;凭借其高效性与广泛应用&#xff0c;在数据安全领域占据重要地位。本文将从基础概念、历史发展、核心算法到实际应用场景&#xff0c;全方位解析对称加密技术的全貌&#xff0c;并探讨其面临的挑战与未来方向。 一、对称加密的核心…...

多线程编程中的锁策略

目录 1.悲观锁vs乐观锁 关键总结 悲观锁&#xff1a; 乐观锁&#xff1a; 选择建议 用 悲观锁 当&#xff1a; 用 乐观锁 当&#xff1a; 2.重量级锁vs轻量级锁 选择建议 用 轻量级锁&#xff1a; 用 重量级锁&#xff1a; 3.挂起等待锁vs自旋锁 关键细节说明 选择…...

win10 笔记本电脑安装 pytorch+cuda+gpu 大模型开发环境过程记录

win10 笔记本电脑安装 pytorchcudagpu 大模型开发环境过程记录 文章部分内容参考 deepseek。 以下使用命令行工具 mingw64。 安装 Anaconda 安装位置&#xff1a; /c/DEVPACK/Anaconda3 然后安装 Python 3.10.16 &#xff08;略&#xff09; $ conda create -n pytorch_…...

Layout Inspector平替跨平台布局分析器のAppium Inspector

引言 因为我有一个api为26的设备&#xff0c;因为 Layout Inspector 无法在 API 26 以下设备上使用&#xff0c;并且现在AS的 Hierarchy Viewer 和Android Device Monitor 均已经在SDK中剔除&#xff0c;故想再搜一个pc版的布局查看器&#xff0c;发现Appium Inspector学习成本…...

基于sklearn实现文本摘要思考

和各位小伙伴分享一下使用sklearn进行文本摘要的思考。 第一版本 原理 提取式文本摘要的基本原理是&#xff1a; 将文本分割成句子 计算每个句子的重要性(权重) 选择权重最高的几个句子组成摘要 常用的句子权重计算方法&#xff1a; TF-IDF&#xff1a;基于词频-逆文档频…...

常见NLP指标PPL,F1,Rouge-L,Accuracy (CLS),Accuracy (EM)总结

常见NLP指标PPL&#xff0c;F1&#xff0c;Rouge-L总结 1.PPL 2.F1 3.Rouge-L 4.Accuracy (CLS) 5.Accuracy (EM)...