LangChain 14 SequencialChain链接不同的组件

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.mzph.cn/news/179986.shtml

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

相关文章

【vue】v-model在表单元素上的应用

表单元素&#xff1a; https://blog.csdn.net/m0_67930426/article/details/134655644 使用模板 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head><body>&l…

通过git上传文件到github仓库

一、新建github仓库 访问github官网&#xff1a;GitHub: Let’s build from here GitHub 点击个人头像&#xff0c;在右侧栏选择Your repositories。 点击New&#xff0c;新建一个github仓库。 创建Repository name仓库名&#xff0c;如果这个仓库名已经创建过的话&#xff…

【MySql】悲观锁和乐观锁的介绍

一、并发控制 当程序中可能出现并发的情况时&#xff0c;就需要保证在并发情况下数据的准确性&#xff0c;以此确保当前用户和其他用户一起操作时&#xff0c;所得到的结果和他单独操作时的结果是一样的。这就叫做并发控制。并发控制的目的是保证一个用户的工作不会对另一个用…

monorepo多项目管理主流实现方式:1.learn + yarn/npm workspace 2.pnpm

npm域级包 随着npm包越来越多&#xff0c;而且包名也只能是唯一的&#xff0c;如果一个名字被别人占了&#xff0c;那你就不能再使用这个名字&#xff1b;假设我想要开发一个utils包&#xff0c;但是张三已经发布了一个utils包&#xff0c;那我的包名就不能叫utils了&#xff…

每天五分钟计算机视觉:LeNet是最早用于数字识别的卷积神经网络

LeNet 假设你有一张 32321 的图片,然后使用 6 个 55的过滤器,步幅为 1,padding 为 0,输出结果为 28286。图像尺寸从 3232 缩小到 2828。 然后进行池化操作,使用平均池化,过滤器的宽度为 2,步幅为 2,图像的尺寸,高度和宽度都缩小了 2 倍,输出结果是一个14146 的图像。…

三十、elasticsearch集群

目录 一、集群的概念 1、节点 2、索引 3、分片和副本 二、集群的架构 三、集群的部署方式 1、单主节点 2、多主节点 3、安全集群 四、搭建ES集群 1、elasticsearch中集群节点有不同的职责划分 2、elasticsearch中的每个节点角色都有自己不同的职责&#xff0c;因此…

Android flutter项目 启动优化实战(一)使用benchmark分析项目

背景描述 启动时间是用户对应用的第一印象&#xff0c;较慢的加载会对用户的留存和互动造成负面影响 在刚上线的B端项目中&#xff1a; 1.提高启动速度能提高整体流程的效率 2.提高首次运行速度能提高应用推广的初体验效果 问题描述 项目刚上线没多久、目前存在冷启动过程存在…

【古月居《ros入门21讲》学习笔记】09_订阅者Subscriber的编程实现

目录 说明&#xff1a; 1. 话题模型 图示 说明 2. 实现过程&#xff08;C&#xff09; 创建订阅者代码&#xff08;C&#xff09; 配置发布者代码编译规则 编译并运行 编译 运行 3. 实现过程&#xff08;Python&#xff09; 创建订阅者代码&#xff08;Python&…

LLM能力与应用全解析

一、简介 经过几年时间的发展&#xff0c;大语言模型&#xff08;LLM&#xff09;已经从新兴技术发展为主流技术。而以大模型为核心技术的产品将迎来全新迭代。大模型除了聊天机器人应用外&#xff0c;能否在其他领域产生应用价值&#xff1f;在回答这个问题前&#xff0c;需要…

产品解读:GreatADM如何快速改造单实例为双主、MGR、读写分离架构?

前言 单机GreatDB/GreatSQL/MySQL将架构调整为多副本复制的好处有哪些&#xff1f;为什么要调整&#xff1f; 性能优化&#xff1a;如果单个GreatDB服务器的处理能力达到瓶颈&#xff0c;可能需要通过主从复制、双主复制或MGR及其他高可用方案来提高整体性能。通过将读请求分发…

STM32 ADC转换器、串口输出

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、ADC是什么&#xff1f;二、STM32的ADC2.1 认识STM32 ADC2.2转换方式2.3 为什么要校准&#xff1f;2.4 采样时间计算2.5 触发方式2.6 多通道采集解决方案2.7…

手把手教你如何实现List——ArrayList

目录 前言&#xff1a; 线性表 顺序表 接口的实现 一. 打印顺序表 二.新增元素,默认在数组最后新增 三.在 pos 位置新增元素 四.判定是否包含某个元素 五. 查找某个元素对应的位置 六.获取 pos 位置的元素 七.给 pos 位置的元素设为 value 八.删除第一次出现的关键字k…

基于SSM的酒店预订管理系统设计与实现

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

Matlab R2022b 安装成功小记

Matlab R2022b 安装成功小记 前言一、 下载链接二、 安装过程小记 叮嘟&#xff01;这里是小啊呜的学习课程资料整理。好记性不如烂笔头&#xff0c;今天也是努力进步的一天。一起加油进阶吧&#xff01; 前言 windows 10系统之前安装过Matlab R2010b做基础研究&#xff0c;最…

Anaconda离线下载torch与安装包

一、下载离线安装包 命令&#xff1a; pip download 安装包名 -d 安装到文件夹名 -i https://pypi.tuna.tsinghua.edu.cn/simple执行这样的命令就会把安装包的离线文件下载到指定文件夹中。 操作&#xff1a; 打开cmd命令行&#xff0c;并进入相应的目录中。 如果是tor…

k8s中pod的hostport端口突然无法访问故障处理

故障背景&#xff1a; 租户告知生产环境的sftp突然无法访问了&#xff0c;登录环境查看sftp服务运行都是正常的&#xff0c;访问sftp的hostport端口确实不通。 故障处理过程 既然访问不通那就先给服务做个全面检查&#xff0c;看看哪里出了问题&#xff0c;看下sftp日志&#…

Docker基本操作---镜像与容器操作

Docker基本操作---镜像与容器操作 1. 操作镜像1.1 查看镜像1.2 删除镜像1.2.1 删除镜像1.2.2 强制删除镜像1.2.3 删除所有镜像 1.3 启动镜像1.4 常见错误1.4.1 image is being used by stopped container e3b9df6dc6ae 2 操作容器2.1 新建启动容器2.2 查看正在运行的容器2.3 退…

Unity学习笔记11

一、视频播放功能 1.如何让视频在游戏场景中播放&#xff1f; 在Assets目录下添加一个渲染器纹理&#xff0c;步骤&#xff1a;新建→渲染器纹理 首先在创建一个平面&#xff0c;想让视频在平面上显示。在平面上添加一个组件 Video Player 然后将视频文件拖拽到视频剪辑位置上…

黄金比例设计软件Goldie App mac中文版介绍

Goldie App mac是一款测量可视化黄金比例的工具。专门为设计师打造&#xff0c;可以帮助他们在Mac上测量和可视化黄金比例&#xff0c;从而轻松创建出完美、平衡的设计。 Goldie App mac体积小巧&#xff0c;可以驻留在系统的菜单栏之上&#xff0c;随时提供给用户调用。 拥有独…

如何控制Spring工厂创建对象的次数?详解Spring对象的声明周期!

&#x1f609;&#x1f609; 学习交流群&#xff1a; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 &#x1f96d;&#x1f96d;3&#xff1a;QQ群&#xff1a;583783…