LangChain 14 SequencialChain链接不同的组件

news2025/2/22 7:33:46

LangChain系列文章

  1. LangChain 实现给动物取名字,
  2. LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字
  3. LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄
  4. LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索Indexes for information retrieve
  5. LangChain 5易速鲜花内部问答系统
  6. LangChain 6根据图片生成推广文案HuggingFace中的image-caption模型
  7. LangChain 7 文本模型TextLangChain和聊天模型ChatLangChain
  8. LangChain 8 模型Model I/O:输入提示、调用模型、解析输出
  9. LangChain 9 模型Model I/O 聊天提示词ChatPromptTemplate, 少量样本提示词FewShotPrompt
  10. LangChain 10思维链Chain of Thought一步一步的思考 think step by step
  11. LangChain 11实现思维树Implementing the Tree of Thoughts in LangChain’s Chain
  12. LangChain 12调用模型HuggingFace中的Llama2和Google Flan t5
  13. LangChain 13输出解析Output Parsers 自动修复解析器
    在这里插入图片描述

Chain 链

单独使用LLM对于简单的应用程序来说是可以的,但更复杂的应用程序需要将LLM链接在一起 - 要么彼此链接,要么与其他组件链接。

LangChain提供了两个高级框架用于“链接”组件。传统方法是使用Chain接口。更新的方法是使用LangChain表达语言 LangChain Expression Language(LCEL)。在构建新应用程序时,我们建议使用LCEL进行链条组合。但我们继续支持一些有用的内置Chain,因此我们在这里记录了两个框架。正如我们将在下面提到的,Chain也可以自身在LCEL中使用,因此两者并不是互斥的。

Sequential Chain 顺序链

在调用语言模型之后的下一步是对语言模型进行一系列的调用。当您希望将一个调用的输出作为另一个调用的输入时,这将特别有用。

推荐的方法是使用LangChain表达语言。传统的方法是使用SequentialChain,我们在这里继续为了向后兼容性而记录。

举个玩具例子,假设我们想创建一个链,首先创建一个剧情梗概,然后根据梗概生成一篇剧评。

这段代码使用了 Langchain 库来创建一个复杂的处理链(chain),用于生成剧作家的剧本梗概和对该剧本的评论。它结合了多个提示模板、ChatOpenAI(OpenAI的聊天模型)和输出解析器。以下是对每一行代码的注释解释:
代码文件 Chain/chat_sequential.py

# 导入 ChatOpenAI 类,用于与 OpenAI 聊天模型进行交互。
from langchain.chat_models import ChatOpenAI  

# 导入 PromptTemplate 模块,用于创建和管理提示模板。
from langchain.prompts import PromptTemplate  

# 导入 PydanticOutputParser,用于将输出解析为 Pydantic 模型。
from langchain.output_parsers import PydanticOutputParser

# 导入 Pydantic 的 BaseModel 类和 Field 函数,用于定义数据模型。
from langchain.pydantic_v1 import BaseModel, Field
from typing import List

# 导入 dotenv 库,用于从 .env 文件加载环境变量,管理敏感数据如 API 密钥。
from dotenv import load_dotenv  

# 调用 load_dotenv 函数来加载 .env 文件中的环境变量。
load_dotenv()  

# 创建剧本梗概的提示模板。
synopsis_prompt = PromptTemplate.from_template(
    """你是一位剧作家。根据剧名,你的工作是为该剧写一个梗概。
剧名:{title}
剧作家:这是上面剧的一个梗概:
"""
)

# 创建剧评的提示模板。
review_prompt = PromptTemplate.from_template(
    """您是《纽约时报》的一位戏剧评论家。根据该剧的剧情简介,您的工作是为该剧撰写评论。
剧情简介:
{synopsis}
来自纽约时报戏剧评论家的评论:
"""
)

# 导入 StrOutputParser,用于解析字符串输出。
from langchain.schema import StrOutputParser

# 创建一个 ChatOpenAI 实例。
llm = ChatOpenAI()

# 创建处理链的两个部分:一个生成剧本梗概,另一个生成剧评。
# 使用 `|` 运算符将提示、模型和输出解析器连接起来。
from langchain.schema.runnable import RunnablePassthrough

# 创建生成剧本梗概的处理链。
synopsis_chain = synopsis_prompt | llm | StrOutputParser()

# 创建生成剧评的处理链。
review_chain = review_prompt | llm | StrOutputParser()

# 将两个处理链组合起来。
chain = {"synopsis": synopsis_chain} | RunnablePassthrough.assign(review=review_chain)

# 使用处理链生成对特定剧本标题的梗概和评论。
response = chain.invoke({"title": "海滩上日落时的悲剧"})

# 打印出生成的响应。
print(response)

运行结果

zgpeace at zgpeaces-MBP in ~/Workspace/LLM/langchain-llm-app (develop●) (.venv) 
$ python Chain/chat_sequential.py
{'synopsis': '《海滩上日落时的悲剧》是一个关于爱、失去和悲伤的故事。故事发生在一个风景如画的海滩上,当夕阳渐渐西沉时,一段悲剧也随之展开。\n\n主人公是一个年轻而富有活力的女孩,名叫莉莉。她是一个心怀梦想的艺术家,热爱描绘大自然的美丽。每天黄昏时分,她来到海滩上观赏日落,用画笔记录下这些壮丽的景色。\n\n在一天的黄昏,莉莉邂逅了一个神秘而迷人的男子,名叫亚历克斯。他是一个沉默寡言的人,但他的眼神中透露出深深的痛苦和孤独。莉莉被他的神秘感所吸引,两人开始渐渐接近。\n\n然而,就在他们彼此倾心之际,亚历克斯的过去被揭示出来。原来,他曾经是一名成功的艺术家,但在创作巅峰期突然失去了灵感。失落和绝望使他逐渐放弃了自己的才华和梦想,变得沉默寡言。\n\n亚历克斯的过去逐渐侵蚀了他们之间的美好,莉莉感到越来越无助和困惑。她试图帮助亚历克斯重新找回自己的激情,但一切都显得无济于事。\n\n最终,在海滩上日落时,亚历克斯离开了莉莉,他深深地爱着她,但他觉得自己不再配得上她的爱。莉莉痛苦地看着他离去,泪水止不住地流淌。\n\n《海滩上日落时的悲剧》讲述了一个关于爱和艺术的故事,探讨了梦想的失去和追求的意义。它让观众思考,当遇到挫折和痛苦时,我们是否能够重新点燃内心的火焰,继续追逐梦想。', 

'review': '《海滩上日落时的悲剧》通过讲述一个关于爱和艺术的故事,探讨了梦想的失去和追求的意义。剧中的角色们都面临着挫折和痛苦,他们的故事引发观众对于自己的生活和梦想的思考。当遇到困难时,我们是否能够重新点燃内心的火焰,继续追逐梦想呢?\n\n该剧的剧情简单而引人入胜,情感的描写令人动容。演员们的表演准确传达了角色们内心的痛苦和希望,使观众们可以更好地理解他们的情感。此外,剧中的舞美设计和音乐也将观众带入了一个富有诗意和梦幻的海滩世界。\n\n总的来说,《海滩上日落时的悲剧》是一部令人难以忘怀的戏剧作品,它引发了观众对于爱、失去和梦想的思考。无论是艺术爱好者还是普通观众,都能从中获得深刻的共鸣和启发。'}

在这里插入图片描述

代码
https://github.com/zgpeace/pets-name-langchain/tree/develop

参考

https://python.langchain.com/docs/modules/chains/foundational/sequential_chains

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

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

相关文章

基于Eclipse+Mysql+Tomcat开发的挖掘机配件营销系统

基于EclipseMysqlTomcat开发的挖掘机配件营销系统 项目介绍💁🏻 大家都有目共睹,现在的科学技术发展很迅速。而如今,计算机应用已经完全融入到人们的生产和生活当中,特别是企业,现在的企业几乎都是离不开计…

论如何让Spring Boot在高压力环境下依然与众不同

文章目录 🔊博主介绍🥤本文内容调优线程池优化线程池配置多样化设备支持分布式控制同步编程 📢文章总结📥博主目标 🔊博主介绍 🌟我是廖志伟,一名Java开发工程师、Java领域优质创作者、CSDN博客…

网络和信息系统指令 ( NIS2 ) 及其全球影响

网络和信息系统指令 ( NIS2 ) 将于 2024 年 10 月生效,旨在提高欧盟 (EU) 的网络弹性。 不过,其影响可能会更广泛,带来更严格的流程和控制,并重新定义我们向被视为国家关键的组织提供服务的方式。 该强制性指令将具有效力&#x…

centos7.9 + gitlab12.3.0安装

本文在centos7.9操作系统上安装gitlab 12.3.0,gitlab官方最新的版本已经是16.6.0了,这里仍然安装12.3.0版本的原因是汉化包的最新版本是12.3.0,如果汉化包的版本和gitlab的版本不对应,会出现汉化他无法启动的现象。 1、安装依赖 …

第3章 表、栈和队列

前言 本章讨论最简单和最基本的三种数据结构。实际上,每一个有意义的程序都将至少明确使用一种这样的数据结构,而栈则在程序中总是隐含使用,不管你在程序中是否做了声明。 在这一章,我们将: 介绍抽象数据类型…

python实现rpc的几种方式(SimpleXMLRPCServer 自带的、第三方ZeroRPC)、连接linux远程开发分布式锁、分布式id

1 python实现rpc的几种方式 1.1 SimpleXMLRPCServer 自带的 1.2 第三方ZeroRPC 2 连接linux远程开发 3 分布式锁 4 分布式id 1 python实现rpc的几种方式 # 远程过程调用-1 借助于rabbitmq,可以跨语言-2 SimpleXMLRPCServer 自带的-3 ZeroRPC-4 GRPC:跨语言的 htt…

【Python】torch.exp()和 torch.sigmoid()函数详解和示例

本文对torch.exp()和 torch.sigmoid()函数进行原理和示例讲解,以帮助大家理解和使用。 目录 torch.exp函数原理运行示例 torch.sigmoid()函数原理运行示例torch.sigmoid相关知识 结合运行 torc…

C++设计模式——工厂模式 :简单工厂、工厂方法、抽象工厂

工厂模式可以分为三种,简单工厂模式,工厂方法模式和抽象工厂模式。 那么,这三种工厂模式长啥样,又为啥会衍生出这三种模式来呢?本篇和大家一起来学习总结一下。 一、简单工厂模式 简单工厂SimpleFactory 负责创建所有…

Day12 qt QMianWindow,资源文件,对话框,布局方式,常用ui控件

QMianWindow 概述 QMainWindow 是一个为用户提供主窗口程序的类,包含一个菜单栏( menu bar )、多 个工具栏 (tool bars) 、多个铆接部件 (dock widgets) 、一个状态栏 (status bar) 及 一个中心部件 (central widget) 许多应用程序的基础…

Python内置类属性`__name__`属性的使用教程

更多Python学习内容:ipengtao.com Python中的__name__是一种内置的特殊属性,通常用于判断模块是作为主程序运行还是作为模块被导入。本文将深入讲解__name__属性的用法,通过丰富的示例代码展示其在不同情景下的应用。 模块作为主程序运行 当一…

软著项目推荐 深度学习二维码识别

文章目录 0 前言2 二维码基础概念2.1 二维码介绍2.2 QRCode2.3 QRCode 特点 3 机器视觉二维码识别技术3.1 二维码的识别流程3.2 二维码定位3.3 常用的扫描方法 4 深度学习二维码识别4.1 部分关键代码 5 测试结果6 最后 0 前言 🔥 优质竞赛项目系列,今天…

西南科技大学数字电子技术实验二(SSI逻辑器件设计组合逻辑电路及FPGA实现 )FPGA部分

一、实验目的 1、掌握用SSI(小规模集成电路)逻辑器件设计组合电路的方法。 2、掌握组合逻辑电路的调试方法。 3、学会分析和解决实验中遇到的问题。 4、学会用FPGA实现本实验内容。 二、实验原理 包括:原理图绘制和实验原理简述 1、1位半加器 2、1位全加器 3、三…

基于SSM的高校学生实习管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

快上车~「黄钊的AI日报·第二季」预约抢跑群、锁定明晚早鸟价

本周,即将开启我的小报童专栏「黄钊的AI日报第二季」(12月1日~2月29日)。 周三(明天)晚上,会举办“抢跑群”活动,首发「早鸟票」、专栏内容及相关福利介绍,包括但不限于:…

服务器中启动和停止项目

服务器中启动和停止项目 一、前言二、使用命令启动和关闭项目1、启动项目2、停止项目 三、使用可执行脚本启动和关闭项目1、启动项目2、停止项目 一、前言 在服务器上部署项目,一般就是将项目挂在后台,如果是微服务首选docker-compose,但如果…

人工智能-优化算法之梯度下降

梯度下降 尽管梯度下降(gradient descent)很少直接用于深度学习, 但了解它是理解下一节随机梯度下降算法的关键。 例如,由于学习率过大,优化问题可能会发散,这种现象早已在梯度下降中出现。 同样地&#x…

二百零八、Hive——HiveSQL异常:Select查询数据正常,但SQL语句加上group by查询数据为空

一、目的 在HiveSQL的DWD层中,需要对原始数据进行去重在内的清洗,结果一开始其他数据类型的清洗工作都正常,直到碰到转向比数据。 一般的SQL查询有数据,但是加上group by以后就没数据; 一般的SQL查询有数据&#xf…

“SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI 指数的生态质量评价及拓展

近年来,国内外学者在生态系统的敏感性、适应能力和潜在影响等方面开展了大量的生态脆弱性研究,他们普遍将生态脆弱性概念与农牧交错带、喀斯特地区、黄土高原区、流域、城市等相结合,评价不同类型研究区的生态脆弱特征,其研究内容…

SpringBoot RestTemplate 的使用

一、简介 RestTemplate 在JDK HttpURLConnection、Apache HttpComponents、OkHttp等基础上&#xff0c;封装了更高级别的API&#xff0c;默认依赖JDK HttpURLConnection&#xff0c;连接方式默认长连接。 二、使用 2.1、引入依赖 <dependency><groupId>org.spri…

STK Components 二次开发- 卫星地面站

前期卫星地面站创建已经说过&#xff0c;本次说一下卫星和地面站可见性时卫星名称和轨迹线变色问题。 1.创建卫星 // Get the current TLE for the given satellite identifier. var tleList TwoLineElementSetHelper.GetTles(m_satelliteIdentifier, JulianDate.Now);// Us…