LangChain实战 | 3分钟学会SequentialChain怎么传多个参数

news2024/11/19 8:44:14

在这里插入图片描述

SequentialChain参数传递,总结了以下四种类型

参数传递入参出参
一 对 一11
一 对 多1n
多 对 一n1
多 对 多nn

0.连接大模型

先选一个llm,参考这篇博客选择一个国内大模型
LangChain连接国内大模型测试|智谱ai、讯飞星火、通义千问

from langchain_community.chat_models import ChatZhipuAI
import os
os.environ["ZHIPUAI_API_KEY"] = "xx.xx"
llm = ChatZhipuAI(
    model="glm-4",
    temperature=0.5,
)

1. 一对一

from langchain import LLMChain
from langchain.prompts import ChatPromptTemplate
# Chain 介绍某朝代的某个历史人物
prompt1 = ChatPromptTemplate.from_template(
    "请介绍一下{people}"
)
chain1 = LLMChain(llm=llm,prompt=prompt1,output_key="introduce")

# SequentialChain,根据chains中每个独立chain对象,和chains中的顺序,决定参数的传递,获取最终的输出结果
overall_chain1 = SequentialChain(
    chains=[chain1],
    input_variables=["people"],
    output_variables=["introduce"],
    verbose=True
)
res1 = overall_chain1({"people":"多尔衮"})
res1

在这里插入图片描述

> Finished chain.
{‘people’: ‘多尔衮’,
introduce’: ‘多尔衮,全名爱新觉罗·多尔衮,是清朝初期的重要政治家和军事统帅,生于1612年11月17日,卒于1650年12月31日。他是清太祖努尔哈赤的第十四子,与皇太极是同父异母的兄弟,母亲是努尔哈赤的大妃阿巴亥。他的同母兄弟还包括英亲王阿济格和豫亲王多铎。\n\n多尔衮在1626年被封为贝勒,后来因为军功显著,又被封为和硕睿亲王。他的政治生涯充满波折。在他十五岁时,因皇太极的命令,其母阿巴亥被迫为努尔哈赤殉葬,这使得多尔衮失去了继承皇位的机会。\n\n尽管如此,多尔衮在军事上成就斐然。到了皇太极去世时,多尔衮和他的兄弟多铎控制了正白旗与镶白旗,拥有相当大的军事实力。当时,他与皇太极的长子豪格争夺皇位,尽管豪格继承了正黄旗、镶黄旗和正蓝旗,但多尔衮凭借其政治手腕,使豪格未能继位。由于害怕两黄旗的势力,多尔衮也没有自己登基,而是选择支持皇太极的第九子福临,即后来的顺治帝,与郑亲王济尔哈朗共同辅政,实际掌握了朝中大权。\n\n在多尔衮摄政期间,清军入关,打败了李自成等农民军,统一了中国,奠定了清朝在中国近300年统治的基础。顺治帝对他的称呼从“叔父摄政王”逐渐变为“皇父摄政王”,显示了他在朝中的崇高地位。\n\n多尔衮的个人生活奢侈,酷爱狩猎,拥有大量猎鹰。然而,他在顺治七年(1651年)因狩猎坠马去世,享年39岁。死后,由于被顺治帝认为独断专行,并与其母孝庄皇太后的关系引发争议,他的封号一度被剥夺,坟墓被掘。直到乾隆年间,他的名誉才得到恢复,被封号恢复为睿亲王。\n\n总体来说,多尔衮是清朝早期举足轻重的人物,他在军事和政治上的成就对清朝的稳固和发展起到了关键作用。’}

2. 一对多

# 定义第一个链:介绍某朝代的某个历史人物
prompt1 = ChatPromptTemplate.from_template(
    "请介绍一下{people}"
)
chain1 = LLMChain(llm=llm, prompt=prompt1, output_key="introduce")

# 定义第二个链:提供该历史人物的生平年份
prompt2 = ChatPromptTemplate.from_template(
    "请提供{people}的生平年份"
)
chain2 = LLMChain(llm=llm, prompt=prompt2, output_key="birth_and_death")

# 创建 SequentialChain,其中输入是 "people",输出是 "introduce" 和 "birth_and_death"
overall_chain2 = SequentialChain(
    chains=[chain1, chain2],  # 两个链的顺序
    input_variables=["people"],  # 输入变量
    output_variables=["introduce", "birth_and_death"],  # 输出变量
    verbose=True
)

# 运行链,输入一个历史人物的名字
res2 = overall_chain2({"people":"多尔衮"})
res2

在这里插入图片描述

{‘people’: ‘多尔衮’,
introduce’: ‘多尔衮,全名爱新觉罗·多尔衮,是清朝初期的重要政治家和军事统帅,生于明万历四十年(1612年),卒于清顺治七年(1650年)。他是清太祖努尔哈赤的第十四子,母亲是努尔哈赤的大妃阿巴亥,与英亲王阿济格和豫亲王多铎为同母兄弟。\n\n多尔衮自幼便展现出过人的才智和勇敢,在努尔哈赤晚年时期,他已经开始参与国政。天命五年(1620年),年仅八岁的多尔衮被努尔哈赤提拔为和硕额真,参与共议国政,这在当时是一个重大的政治行动。\n\n在皇太极时期,多尔衮因军功被封为贝勒,后因其母阿巴亥被迫为努尔哈赤殉葬,多尔衮丧失了继承大统的资格。尽管如此,他并未因此退出政治舞台,反而以军功显赫,最终被封为和硕睿亲王。\n\n皇太极去世后,多尔衮面临了一场激烈的权力斗争。他本有实力与皇太极的长子豪格争夺皇位,但最终选择了一个更为稳妥的策略:扶持皇太极的第九子、年仅六岁的福临即位,即后来的顺治帝。多尔衮与郑亲王济尔哈朗共同辅政,实际上掌握了朝中大权。\n\n在多尔衮的摄政时期,清军入关,打败了李自成的农民军,进而统一了中国,为清朝在中国近三百年的统治奠定了基础。顺治帝对他的称呼也由最初的“叔父摄政王”逐渐变为“皇叔父摄政王”,最后尊称为“皇父摄政王”,显示了多尔衮权势的顶峰。\n\n多尔衮个人爱好打猎,其府邸豪华,生活奢侈,在当时极为显赫。他的政治才能和军事指挥能力,为清朝初期的稳定与发展作出了重要贡献。\n\n然而,多尔衮在顺治七年(1650年)去世后,由于政治斗争,他的形象一度被抹黑,家族受到打压。但在后来的历史评价中,他的贡献与地位得到了恢复和肯定。’,
birth_and_death’: ‘多尔衮的生平年份如下:\n\n- 1612年11月17日,明万历四十年,多尔衮出生。\n- 1626年,天命十一年,被封为贝勒。\n- 1628年,天聪二年,17岁的多尔衮开始参与军事行动。\n- 1635年,天聪九年,因军功显著,招降蒙古林丹汗之子额哲。\n- 1636年,崇德元年,因战功被封为和硕睿亲王。\n- 1644年,顺治元年,指挥清军入关,辅佐福临即帝位,成为摄政王。\n- 1650年12月31日,顺治七年,多尔衮在塞北狩猎途中去世。\n- 1651年,顺治八年,多尔衮被剥夺封号。 \n\n这些年份概括了多尔衮从出生到去世的重要生平节点。’}

3. 多对一

# 定义第一个链:介绍某朝代的某个历史人物
prompt3 = ChatPromptTemplate.from_template(
    "请介绍一下{reign}的{people}"
)
chain3 = LLMChain(llm=llm, prompt=prompt1, output_key="introduce")

# 创建 SequentialChain,其中输入是 "reign"和"people",输出是 "introduce"
overall_chain3 = SequentialChain(
    chains=[chain3],  # 两个链的顺序
    input_variables=["reign","people"],  # 输入变量
    output_variables=["introduce"],  # 输出变量
    verbose=True
)

# 运行链,输入一个历史人物的名字
res3 = overall_chain3(
    {
        "reign":"清朝",
        "people":"多尔衮",
    }
)
res3

在这里插入图片描述

{‘people’: ‘多尔衮’,
reign’: ‘清朝’,
introduce’: ‘多尔衮,全名爱新觉罗·多尔衮,是清朝初期的重要政治家和军事统帅,生于明万历四十年(1612年)十月二十五日,卒于清顺治六年(1650年)十二月三十一日。他是清太祖努尔哈赤的第十四子,母亲是努尔哈赤的大妃阿巴亥。\n\n多尔衮从小就生活在政治斗争的漩涡之中。在他还不满百日的时候,努尔哈赤就率军灭亡了其母的母国乌拉,使多尔衮母子面临极大的政治压力。但由于努尔哈赤对降顺者的优待政策以及阿巴亥的智谋,他们最终安然无恙。\n\n公元1616年,努尔哈赤建立后金国,多尔衮虽年纪轻轻,但在天命五年(1620年)已跻身参与国政的和硕额真行列,显示出其政治地位的重要性。1626年,他被封为贝勒。\n\n在皇太极时代,多尔衮因军功显赫被封为和硕睿亲王。在皇太极去世后,多尔衮失去了继承大统的机会,因为皇太极迫使其母阿巴亥为努尔哈赤殉葬,这使他无法继承皇位。尽管如此,他在军事上的成就依然卓越。\n\n在皇位继承问题上,多尔衮有足够的实力与皇太极的长子豪格争夺汗位,但他最终选择不直接继位,而是扶持皇太极的九子福临,即后来的顺治帝,入主皇位。当时福临年仅六岁,多尔衮与郑亲王济尔哈朗共同辅政,实际上掌握了朝中大权。\n\n多尔衮的摄政时期对清朝的发展具有决定性意义,在这一时期,清军入关,满清开始统治中原,奠定了近300年的统治基础。顺治帝对他的称呼从“叔父摄政王”逐渐演变为“皇叔父摄政王”,最后定为“皇父摄政王”,显示了他在朝中的极高地位。\n\n多尔衮个人爱好打猎,有着极其奢华的生活,其府邸建筑宏伟,生活用品极尽奢华。他的政治才能和军事贡献,为清朝的稳固和发展起到了重要作用。’}

4.多对多

# 定义第一个链:介绍某朝代的某个历史人物
prompt3 = ChatPromptTemplate.from_template(
    "请介绍一下{reign}的{people}"
)
chain3 = LLMChain(llm=llm, prompt=prompt1, output_key="introduce")

# 定义第二个链:提供该历史人物的生平年份
prompt4 = ChatPromptTemplate.from_template(
    "请提供{people}的生平年份"
)
chain4 = LLMChain(llm=llm, prompt=prompt2, output_key="birth_and_death")

# 创建 SequentialChain,其中输入是 "reign"和"people",输出是 "introduce"
overall_chain4 = SequentialChain(
    chains=[chain3,chain4],  # 两个链的顺序
    input_variables=["reign","people"],  # 输入变量
    output_variables=["introduce","birth_and_death"],  # 输出变量
    verbose=True
)

# 运行链,输入一个历史人物的名字
res4 = overall_chain4(
    {
        "reign":"清朝",
        "people":"多尔衮",
    }
)
res4

在这里插入图片描述

{‘reign’: ‘清朝’,
people’: ‘多尔衮’,
introduce’: ‘多尔衮,满洲爱新觉罗氏,是清朝初期的重要政治家和军事统帅,生于明万历四十年(1612年),卒于清顺治七年(1650年)。他是清太祖努尔哈赤的第十四子,母亲是努尔哈赤的大妃阿巴亥,与英亲王阿济格和豫亲王多铎为同母兄弟。\n\n多尔衮自幼聪慧,八岁时即参与国政,成为和硕额真(即亲王)之一。在努尔哈赤建立后金国时,他虽年纪轻轻,但已被纳入参预国政的行列,显示出其政治地位的重要性。\n\n天聪二年(1628年),多尔衮被封为贝勒,但在其十五岁时,因皇太极的命令,其母阿巴亥被迫为努尔哈赤殉葬,这使得多尔衮失去了继承皇位的机会。尽管如此,他并未因此消沉,反而以军功显赫,多次参与对抗明朝的战役,并取得显著成就。\n\n多尔衮在军事上的表现尤为突出,他掌管正白旗与镶白旗,拥有相当数量的兵力。在皇太极去世后,多尔衮有足够的力量与皇太极的长子豪格争夺皇位,但最终他选择了扶持皇太极的九子福临即位,即后来的顺治帝。福临年幼,多尔衮与郑亲王济尔哈朗共同辅政,实际上掌握了朝中大权。\n\n在多尔衮摄政期间,清军入关,打败李自成,定都北京,开始了清朝在中国近三百年的统治。他的政治才能和军事手腕对清朝的建立和稳固起到了决定性的作用。\n\n多尔衮的个人生活奢侈,爱好打猎,其府邸豪华,生活排场盛大。在顺治帝时期,他的地位不断提升,从“叔父摄政王”到“皇叔父摄政王”,最后被称为“皇父摄政王”,显示了他在朝中的无上权威。\n\n总的来说,多尔衮是清朝早期杰出的政治和军事领导人,他的贡献对清朝的发展和中国历史的进程产生了深远影响。’,
birth_and_death’: ‘多尔衮的生平年份如下:\n\n- 1612年11月17日(明万历四十年),多尔衮出生。\n- 1626年(后金天命十一年),被封为贝勒。\n- 1628年(后金天聪二年),17岁的多尔衮开始参与军事行动。\n- 1635年(后金天聪九年),参与收降蒙古林丹汗之子额哲等行动。\n- 1636年(后金崇德元年),因战功封为和硕睿亲王。\n- 1644年(清顺治元年),指挥清军入关,协助清朝入主中原。\n- 1650年12月31日(清顺治七年),多尔衮在塞北狩猎途中去世。\n- 1651年(清顺治八年),多尔衮被剥夺封号。’}

根据官网demo提示,传参用({})字典格式,四种形式参数传递都适用。
否则会遇到TypeError错误,见参考链接2

参考

  1. LangChain 🦜️🔗 中文网-顺序(Sequential)链
  2. 完美解决TypeError: Chain.call() got an unexpected keyword argument

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

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

相关文章

Jenkins的Pipeline流水线

目录 前言 流水线概念 什么是流水线 Jenkins流水线 pipeline node stage step 创建一个简单的流水线 创建Pipeline项目 选择模板 测试 前言 提到 CI 工具,首先想到的就是“CI 界”的大佬——Jenkjns,虽然在云原生爆发的年代,蹦出来了很多云原生的 CI 工具…

【秒杀系统】从零开始打造简易秒杀系统(一):防止超卖

【秒杀系统】从零开始打造简易秒杀系统(一):防止超卖 前言 大家好,好久不发文章了。(快一个月了- -)最近有很多学习的新知识想和大家分享,但无奈最近项目蛮忙的,很多文章写了一半搁…

【机器学习】K-近邻算法(KNN)全面解析

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 K-近邻算法(KNN)全面解析概述1. 基本概念与原理1.1 KNN算…

Python | Leetcode Python题解之第102题二叉树的层序遍历

题目: 题解: class Solution:def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:if not root: return []res, queue [], collections.deque()queue.append(root)while queue:tmp []for _ in range(len(queue)):node queue.popl…

怎么看外国的短视频:四川鑫悦里文化传媒有限公司

怎么看外国的短视频:跨文化视角下的观察与思考 随着全球化进程的加速和网络技术的飞速发展,外国短视频逐渐走进了我们的视野。这些来自不同文化背景、语言体系和审美观念的短视频作品,为我们打开了一扇了解世界的窗口。然而,如何…

LFSR线性反馈移位寄存器及Verilog实现

一、LFSR LFSR线性反馈移位寄存器,通常由移位寄存器和异或门组成,主要用于产生伪随机序列等。 线性反馈的含义是各个寄存器的输出通过一个反馈函数连接到第一级触发器的输入;LFSR中的寄存器的个数被称为LFSR的级数。 LFSR分为两类&#xff…

常见的螺纹防松措施有哪些?——SunTorque智能扭矩系统

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 螺纹连接作为机械工程中常见的连接方式,其稳定性和可靠性对于整个机械系统的正常运行至关重要。然而,由于振动、冲击、温度变化等因素的影响,螺纹连接往往会出现松动现象,…

[算法][数字][leetcode]2769.找出最大的可达成数字

题目地址 https://leetcode.cn/problems/find-the-maximum-achievable-number/description/ 题目描述 实现代码 class Solution {public int theMaximumAchievableX(int num, int t) {return num2*t;} }

MaxKB,基于 LLM 大语言模型的知识库问答系统,开箱即用,支持快速嵌入到第三方业务系统。

MaxKB 是一款基于 LLM 大语言模型的知识库问答系统。MaxKB Max Knowledge Base,旨在成为企业的最强大脑。开箱即用,支持快速嵌入到第三方业务系统。 项目链接 github.com/1Panel-dev/MaxKB 项目介绍 MaxKB 是一款基于 LLM 大语言模型的知识库问答系统…

基于图鸟UI的资讯名片模版开发与应用

一、引言 在前端技术日新月异的今天,快速、高效、美观的UI组件库和模板成为了开发者们关注的焦点。图鸟UI作为一款集成了基础布局元素、配色体系、图标icon和精选组件的UI框架,为前端开发者提供了极大的便利。本文将以图鸟UI为基础,探讨基于…

【NumPy】全面解析NumPy的bitwise_and函数:高效按位与操作指南

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

【C#】委托

文章目录 委托自定义委托模板方法(工厂模式回调(callback)函数(观察者模式多播(multicast)委托委托的高级使用使用接口 重构 模板方法代码注意参考 委托 委托(delegate)是一种类型,定义了一种方…

汇编:字符串的输出

在16位汇编程序中,可以使用DOS中断21h的功能号09h来打印字符串;下面是一个简单的示例程序,演示了如何在16位汇编程序中打印字符串: assume cs:code,ds:data ​ data segmentszBuffer db 0dh,0ah,HelloWorld$ //定义字符串 data …

马斯克xAI融资60亿美元,宣布打造世界第一超算中心,10万张H100GPU

昨天,埃隆马斯克的xAI初创公司宣布获得60亿美元的巨额融资,主要用于打造一台巨大的超级计算机,马斯克称之为“超级计算工厂”。 从创立OpenAI到如今的xAI,技术和算力的发展历经了几个时代,但似乎马斯克的吸金能力一直…

MySQL中Undo-log是什么?有什么作用?

2.6.1. Undo-log撤销日志 Undo即撤销的意思,通常也称为回滚日志,用来给MySQL撤销SQL操作的。 当一条写入类型的SQL执行时,都会记录Undo-log日志,Undo-log并不存在单独的日志文件,InnoDB默认是将Undo-log存储在xx.ibd…

C++代码使用ClangCL编译注意事项

遇到cmake指定模板类工程使用msvc的clang编译器编译代码,代码变量出现与预期不符的问题; 如下: clangcl将实现放到头文件里则不会出现这样的情况; 最后按照pcl的模板类写法则解决这个问题;

【从零开始学习RabbitMQ | 第二篇】如何确保MQ的可靠性和消费者可靠性

目录 前言: MQ可靠性: 数据持久化: Lazy Queue: 消费者可靠性: 消费者确认机制: 消费失败处理: MQ保证幂等性: 方法一: 总结: 前言: …

windows帐户自动被锁定解决方法

处理方法方法一: 运行-gpedit.msc,打开组策略, 处理方法方法二: 运行-gpedit.msc,打开组策略, 在本地组策略编辑器页面中,选择计算机配置 > Windows设置 > 安全设置 > 账户策略 > 账…

Linux防火墙(以iptables为例)

目录 Linux配置防火墙1. 引言2. 什么是防火墙3. Linux中的防火墙3.1 iptablesiptables命令参数常用方式:3.1.1 安装iptables3.1.2 配置iptables规则3.1.3 示例一:使用iptables配置防火墙规则4. iptables执行过程 Linux配置防火墙 1. 引言 在互联网时代&…

NIUSHOP 开源商城 V6 开源版(商城+分销+VIPCard+上门服务)前端技术探索与实践

摘要: 本文深入探讨了NIUSHOP V6开源商城前端技术的选型、实现与设计理念。NIUSHOP V6作为一款优秀的企业级商城系统,其前端采用了Vite、TypeScript、Vue3及ElementPlus等最新技术栈,为开发者提供了高效、灵活的开发体验。本文将从技术选型、…