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.mfbz.cn/a/198440.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计网Lesson3 - 计算机网络评价指标与封包解包

文章目录 计算机网络的性能指标1. 速率2. 带宽3. 吞吐量4. 时延5. 时延带宽积6. 往返时间7. 利用率8. 数据的解包和封包 计算机网络的术语实体![实体](https://img-blog.csdnimg.cn/direct/cbf4ca9ed5ab4df290b5a17b4642c6a1.png)协议服务 计算机网络的性能指标 1. 速率 数据…

MOSFET安全工作区域SOA

Safe Operating Area(SOA)即安全工作区:描述了当MOSFET工作在饱和区时可以处理的最大功率。超出安全工作区,则可能导致元件损坏。 SOA分为五个单独的界限,分别是RDS(on)限制 On Resistance(RDS(on)&#…

算法通关第十三关-青铜挑战数学基础问题

数组元素积的符号 描述 : 已知函数 signFunc(x) 将会根据 x 的正负返回特定值: 如果 x 是正数,返回 1 。如果 x 是负数,返回 -1 。如果 x 是等于 0 ,返回 0 。 给你一个整数数组 nums 。令 product 为数组 nums 中所有元素值的…

大语言模型概述(二):基于亚马逊云科技的研究分析与实践

上期介绍了大语言模型的定义和发展历史,本期将分析基于亚马逊云科技的大语言模型相关研究方向,以及大语言模型的训练和构建优化。 大语言模型研究方向分析 Amazon Titan 2023 年 4 月,亚马逊云科技宣布推出 Amazon Titan 大语言模型。根据…

【SpringCloud系列】@FeignClient微服务轻舞者

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Vue3+java开发组队功能

Vue3java开发系统组队功能 需求分析 创建用户可以创建一个队伍(一个房间队长),设置队伍人数,队伍名称(标题),描述,超时时间。搜索加入,用户可以加入未满的队伍&#xf…

iconfont 使用彩色图标

1、下载iconfont到本地 2、全局安装 iconfont-tools npm install -g iconfont-tools 3、在iconfont解压目录下执行命令、一直回车 iconfont-tools 4、文件拷贝 执行完上述命令后会生成iconfont-weapp目录,将iconfont-weapp目录下的iconfont-weapp- icon.css文件…

ELK日志系统

(一)ELK 1、elk:是一套完整的日志集中处理方案,由三个开源的软件简称组成 2、E:ElasticSearch(ES),是一个开源的,分布式的存储检索引擎(索引型的非关系型数…

【开源】基于JAVA的城市桥梁道路管理系统

项目编号: S 025 ,文末获取源码。 \color{red}{项目编号:S025,文末获取源码。} 项目编号:S025,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询城市桥…

大模型训练为什么用A100不用4090

这是一个好问题。先说结论,大模型的训练用 4090 是不行的,但推理(inference/serving)用 4090 不仅可行,在性价比上还能比 H100 稍高。4090 如果极致优化,性价比甚至可以达到 H100 的 2 倍。 事实上&#x…

蓝桥杯day02——移动机器人

1.题目 有一些机器人分布在一条无限长的数轴上,他们初始坐标用一个下标从 0 开始的整数数组 nums 表示。当你给机器人下达命令时,它们以每秒钟一单位的速度开始移动。 给你一个字符串 s ,每个字符按顺序分别表示每个机器人移动的方向。L 表…

leetcode LCR24反转单链表

反转单链表 题目描述 题目分析 先来说迭代的思想: 上面next cur->next应该放在cur->next pre前面执行,这里笔误 再来说递归的思想: 题目代码 这个代码里面我加了我自己写的测试数据,自己可以去找对应的部分&#xff0c…

springboot整合redis+自定义注解+反射+aop实现分布式锁

1.定义注解 import java.lang.annotation.*; import java.util.concurrent.TimeUnit;/** Author: best_liu* Description:* Date: 16:13 2023/9/4* Param * return **/ Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD}) Documented public interface RedisLo…

OpenCV | 傅里叶变换——低通滤波器与高通滤波器

import cv2 #opencv 读取的格式是BGR import numpy as np import matplotlib.pyplot as plt #Matplotlib是RGB %matplotlib inline def cv_show(img,name):cv2.imshow(name,img)cv2.waitKey()cv2.destroyAllWindows() 傅里叶变换 傅里叶变换的作用 高频:变化剧烈…

Java抽象类:类的幕后黑手,提供继承和扩展的框架。

👑专栏内容:Java⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、抽象类的概念二、注意事项三、抽象类的作用 一、抽象类的概念 在面向对象的概念中,所有的对象都是通过类来描绘…

Facebook的这份开源协议使React四面楚歌

如果你觉得一些科技公司看起来很美好,每天都在“改变世界”……你应该看看他们的用户条款和法律文书,藏污纳垢之严重令人震惊。 最近,百度和阿里巴巴内部的软件工程团队不约而同做了一件事——弃用 React。 解释下: React 是一个…

Web框架与Django路由层

Web框架 一 web框架 Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法。web框架已经实现了很多功能&…

MicroPython STM32F4 RTC功能使用介绍

MicroPython STM32F4 RTC功能使用介绍 🔖STM32和ESP32 RTC功能差不多,相关篇《MicroPython ESP32 RTC功能使用介绍》📌固件刷可参考前面一篇《STM32刷Micropython固件参考指南》🌿 相关篇《Micropython STM32F4入门点灯》&#x1…

java设计模式 开闭原则

开闭原则(Open-Closed Principle,OCP)是面向对象设计中的一个重要原则,它指导着我们如何设计和组织代码,以便使系统在扩展性和可维护性方面更加优秀。 开闭原则的定义是:软件实体(类、模块、函数…

纵行科技获评“汽车物流行业优秀技术装备供应商”

近日,由中国物流与采购联合会主办,中物联汽车物流分会承办的“2023年全国汽车物流行业年会”在湖北十堰盛大召开。本次年会集合了汽车整车、零部件、售后备件、进出口物流企业和物流装备技术企业、科研机构及院校等,分享汽车物流行业现状、相…
最新文章