【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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/900096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

打包python文件生成exe

下载PyInstaller 官网 pip install pyinstaller验证是否安装成功 pyinstaller --version打包 pyinstaller "C:\Documents and Settings\project\myscript.py"会生成.spec,build,dist三项,其中build,dist为文件夹,dist包含最后的可执行文件…

【Axure元件分享】年月日范围选择器

年月日范围选择器是常用元件,列表查询条件、表单输入通常需要用到。这里采用单日历面板布局设计。 元件获取方式:

使用PyTorch实现ResNet:从残差块到完整模型训练

ResNet(残差网络)是深度学习中的经典模型,通过引入残差连接解决了深层网络训练中的梯度消失问题。本文将从残差块的定义开始,逐步实现一个ResNet模型,并在Fashion MNIST数据集上进行训练和测试。 1. 残差块&#xff08…

Transformer架构详解:从Encoder到Decoder的完整旅程

引言:从Self-Attention到完整架构 在上一篇文章中,我们深入剖析了Self-Attention机制的核心原理。然而,Transformer的魅力远不止于此——其Encoder-Decoder架构通过巧妙的模块化设计,实现了从机器翻译到文本生成的广泛能力。本文…

Docker学习--容器生命周期管理相关命令--docker create 命令

docker create 命令作用: 会根据指定的镜像和参数创建一个容器实例,但容器只会在创建时进行初始化,并不会执行任何进程。 语法: docker create[参数] IMAGE(要执行的镜像) [COMMAND](在容器内部…

【C++11】异步编程

异步编程的概念 什么是异步? 异步编程是一种编程范式,允许程序在等待某些操作时继续执行其它任务,而不是阻塞或等待这些操作完成。 异步编程vs同步编程? 在传统的同步编程中,代码按顺序同步执行,每个操作需…

FastAPI与ASGI深度整合实战指南

一、ASGI技术体系解析 1. ASGI协议栈全景图 #mermaid-svg-a5XPEshAsf64SBkw {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-a5XPEshAsf64SBkw .error-icon{fill:#552222;}#mermaid-svg-a5XPEshAsf64SBkw .error-te…

数组与特殊压缩矩阵

一、数组的基本特性 定义: int arr[3][3]; // 3x3二维数组 存储方式: 行优先存储(C语言默认):元素按行连续存储。 列优先存储:需手动实现(如科学计算中的Fortran风格)。 访问元素…

Word 插入无页眉页码的空白页(即插入奇数页)

遇到问题 例如,我的第5章的页码是58,偶数页,我想改成奇数页59,需要在57页和58页之间插入奇数页。 解决办法 单击上一页(57页),打开“视图-大纲”,找到要插入奇数页的位置&#x…

OpenCV 从入门到精通(day_05)

1. 模板匹配 1.1 什么是模板匹配 模板匹配就是用模板图(通常是一个小图)在目标图像(通常是一个比模板图大的图片)中不断的滑动比较,通过某种比较方法来判断是否匹配成功。 1.2 匹配方法 rescv2.matchTemplate(image, …

【目标检测】【深度学习】【Pytorch版本】YOLOV3模型算法详解

【目标检测】【深度学习】【Pytorch版本】YOLOV3模型算法详解 文章目录 【目标检测】【深度学习】【Pytorch版本】YOLOV3模型算法详解前言YOLOV3的模型结构YOLOV3模型的基本执行流程YOLOV3模型的网络参数 YOLOV3的核心思想前向传播阶段反向传播阶段 总结 前言 YOLOV3是由华盛顿…

LN2220 2A 高效率升压 DC/DC 电压调整器

1、产品概述 LN2220 是一款微小型、高效率、升压型 DC/DC 调整器。 电路由电流模 PWM 控制环路,误差放大器,斜波补偿电路, 比较器和功率开关等模块组成。该芯片可在较宽负载范围内 高效稳定的工作,内置一个 4A 的功率开关和…

【大模型基础_毛玉仁】6.3 知识检索

目录 6.3 知识检索6.3.1 知识库构建1)数据采集及预处理2)知识库增强 6.3.2 查询增强1)查询语义增强2)查询内容增强 6.3.3 检索器1)判别式检索器2)生成式检索器 6.3.4 检索效率增强1)相似度索引算…

静态方法和实例方法

在 Java 中,‌静态方法(static method)‌和‌实例方法(instance method)‌是两种不同类型的方法,它们在调用方式、内存分配和访问权限上有显著区别。以下是详细对比: ‌1. 静态方法(…

Lua环境搭建+Lua基本语法

前期准备: 搜索并下载安装LuaForWindows,例: 安装完成后开启cmd窗口,输入lua 出现版本号证明成功下载安装 使用Sublime Text编辑器编写Lua 使用浏览器或CSDN搜索Sublime Text下载并安装,安装成功后打开编辑器,编辑…

FFmpeg录制屏幕和音频

一、FFmpeg命令行实现录制屏幕和音频 1、Windows 示例 #include <cstdlib> #include <string> #include <iostream>int main() {// FFmpeg 命令行&#xff08;录制屏幕 麦克风音频&#xff09;std::string command "ffmpeg -f gdigrab -framerate 3…

【数据集】多视图文本数据集

多视图文本数据集指的是包含多个不同类型或来源的信息的文本数据集。不同视图可以来源于不同的数据模式&#xff08;如原始文本、元数据、网络结构等&#xff09;&#xff0c;或者不同的文本表示方法&#xff08;如 TF-IDF、词嵌入、主题分布等&#xff09;。这些数据集常用于多…

C++ 继承方式使用场景(极简版)

1. 公有继承&#xff08;public&#xff09; 什么时候用&#xff1f; “是一个”&#xff08;is-a&#xff09;关系&#xff1a;派生类 是 基类的一种。 例&#xff1a;class Dog : public Animal&#xff08;狗是动物&#xff09; 最常见&#xff0c;90%的继承都用它。 2. 保…

Ubuntu 系统 Docker 中搭建 CUDA cuDNN 开发环境

CUDA 是 NVIDIA 推出的并行计算平台和编程模型&#xff0c;利用 GPU 多核心架构加速计算任务&#xff0c;广泛应用于深度学习、科学计算等领域。cuDNN 是基于 CUDA 的深度神经网络加速库&#xff0c;为深度学习框架提供高效卷积、池化等操作的优化实现&#xff0c;提升模型训练…

高密度任务下的挑战与破局:数字样机助力火箭发射提效提质

2025年4月1日12时&#xff0c;在酒泉卫星发射中心&#xff0c;长征二号丁运载火箭顺利升空&#xff0c;成功将一颗卫星互联网技术试验卫星送入预定轨道&#xff0c;发射任务圆满完成。这是长征二号丁火箭的第97次发射&#xff0c;也是长征系列火箭的第567次发射。 执行本次任务…