小黑大语言模型通过设计demo进行应用探索:langchain中chain的简单理解demo

news2025/6/3 10:22:49

chain简介

LangChain 中的 Chain 模块‌在开发大型语言模型(LLM)驱动的应用程序中起着至关重要的作用。Chain是串联LLM能力与实际业务的关键桥梁,通过将多个工具和模块按逻辑串联起来,实现复杂任务的多步骤流程编排。

案例

通过给小黑黑写演讲稿和口号进行演示。
1.通过小黑黑自我介绍,让大模型撰写演讲稿。
2.通过撰写的演讲稿和小黑黑的自我介绍,再让大模型给小黑黑生成一个口号。

不使用chain的方式(通过观察发现,仅仅两步操作,代码却十分冗余,需要不断地对输入和输出进行接收和封装)

# 不使用chain的形式
from langchain.prompts import PromptTemplate, ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
zhipu_key = 'a66dxxxxxbexxxxxxxxxxxxxxxxxxx31xxxxxHQxxxxzWJo'
model = ChatOpenAI(
    temperature=0.01,
    model="glm-4-flash",
    openai_api_key=zhipu_key,
    openai_api_base="https://open.bigmodel.cn/api/paas/v4/"
)
people_description = '''
我叫小黑黑,我长的非常黑,喜欢跑步骑车。
'''
# 解析器
str_parser = StrOutputParser()
# 撰写演讲稿提示模版
prompt_poster = "你是一个演讲稿撰写专家,可以为单身的男生撰写相亲活动自我介绍演讲稿,根据<desc>标签里的关于某个男生的自我介绍,给他写一段演讲稿。<desc>{people_description}</desc>"
prompt_poster_template = PromptTemplate.from_template(prompt_poster)
prompt_poster_template_res = prompt_poster_template.invoke({'people_description':people_description})
poster_res = model.invoke(prompt_poster_template_res)
# 模型生成自我介绍
poster_res_str = str_parser.invoke(poster_res)
print('************************第一步:大模型撰写演讲稿**************')
print(poster_res_str)
print('************************第二步:大模型通过演讲稿和自我介绍,撰写口号***************')
prompt_slogn = "你是一个口号撰写专家,可以为参加相亲活动的男生做一个口号撰写,根据<desc>标签里的关于某个男生的自我介绍和<poster>标签里的发言内容,给他写一句活动口号。<desc>{people_description}</desc><poster>{poster}</poster>"
prompt_slogn_template = PromptTemplate.from_template(prompt_slogn)
prompt_slogn_template_res = prompt_slogn_template.invoke({'people_description':people_description, 'poster':poster_res_str})
slogn_res = model.invoke(prompt_slogn_template_res)
slogn_res_str = str_parser.invoke(slogn_res)
print(slogn_res_str)

**********第一步:大模型撰写演讲稿
尊敬的各位来宾,大家好!

今天,我站在这里,带着一颗真诚的心,希望能在这里遇到那个特别的你。我的名字叫小黑黑,听起来可能有点特别,但这也正是我个性的体现。是的,我长得非常黑,但这并不是我的全部,它只是我独特魅力的一个标签。

我热爱生活,喜欢挑战自我。跑步和骑车是我生活中不可或缺的一部分。每当我穿上跑鞋,踏上跑道,或是骑上自行车,穿梭在风景如画的道路上,我都能感受到生命的活力和自由。这些运动不仅让我保持了健康的体魄,也让我学会了坚持和毅力。

我性格开朗,乐观向上。我相信,每个人都有自己的闪光点,而我,就是那个愿意用心去发现和欣赏这些闪光点的人。我期待着与一个同样热爱生活、积极向上的你,一起分享生活的点点滴滴。

在这个相亲的舞台上,我希望能够遇到那个能够理解我、支持我的人。我相信,爱情不仅仅是外表的吸引,更是心灵的契合。我愿意用我的真诚和热情,去温暖你的心房,去守护我们的未来。

最后,我想说,小黑黑,虽然名字听起来有点特别,但我的内心充满了阳光。如果你愿意,就让我们一起,在这美好的时光里,寻找那份属于我们的幸福吧!

谢谢大家!
*********第二步:大模型通过演讲稿和自我介绍,撰写口号
口号:阳光小黑黑,活力跑骑者,携手寻真爱!

使用chain的方式(通过观察发现,chain将单一任务串联了起来,进行了很好的流程性封装,不仅大大简化了代码逻辑,也使得整个流程更加直观和易于管理)

# 使用chain
from operator import itemgetter
from langchain.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain.chains import LLMChain, SequentialChain
zhipu_key = 'axxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxJo'
model = ChatOpenAI(
    temperature=0.01,
    model="glm-4-flash",
    openai_api_key=zhipu_key,
    openai_api_base="https://open.bigmodel.cn/api/paas/v4/"
)
people_description = '''
我叫小黑黑,我长的非常黑,喜欢跑步骑车。
'''
# 撰写自我介绍提示模版
prompt_poster = "你是一个演讲稿撰写专家,可以为单身的男生撰写相亲活动自我介绍演讲稿,根据<desc>标签里的关于某个男生的自我介绍,给他写一段演讲稿。<desc>{people_description}</desc>"
chain_one = LLMChain(
    llm=model,
    prompt=PromptTemplate.from_template(prompt_poster),
    output_parser=StrOutputParser(),
    output_key='poster'
)
print('**************************第一个chain的输出结果,生成演讲稿************************************')
print(chain_one.invoke({'people_description':people_description}))
# 撰写演讲稿提示模版
prompt_slogn = "你是一个口号撰写专家,可以为参加相亲活动的男生做一个口号撰写,根据<desc>标签里的关于某个男生的自我介绍和<poster>标签里的发言内容,给他写一句活动口号。<desc>{people_description}</desc><poster>{poster}</poster>"
chain_two = LLMChain(
    llm=model,
    prompt=PromptTemplate.from_template(prompt_slogn),
    output_parser=StrOutputParser(),
    output_key='slogn'
)
print('**************************串联两条链的输出结果,生成口号************************************')
# 串联两条链
sequential_chain = SequentialChain(
    chains=[chain_one, chain_two],
    input_variables=['people_description'],
    output_variables=['slogn', 'people_description', 'poster']
)
print(sequential_chain.invoke({'people_description':people_description}))

第一个chain的输出结果,生成演讲稿**********
{‘people_description’: ‘\n我叫小黑黑,我长的非常黑,喜欢跑步骑车。\n’, ‘poster’: ‘尊敬的各位来宾,大家好!\n\n今天,我站在这里,带着一颗真诚的心,希望能在这里遇到那个特别的你。我的名字叫小黑黑,听起来可能有点特别,但这也正是我个性的体现。是的,我长得非常黑,但这并不是我的全部,它只是我独特魅力的一个标签。\n\n我热爱生活,喜欢挑战自我。跑步和骑车是我生活中不可或缺的一部分。每当我穿上跑鞋,踏上跑道,或是骑上自行车,穿梭在风景如画的道路上,我都能感受到生命的活力和无限可能。这些运动不仅让我保持了健康的体魄,更让我学会了坚持和毅力。\n\n我性格开朗,乐观向上。我相信,每个人都有自己的闪光点,而我,就是那个愿意用心去发现和欣赏这些闪光点的人。我期待着与一个同样热爱生活、积极向上的你,一起分享生活的点点滴滴。\n\n在这个相亲的舞台上,我希望能够遇到那个能够理解我、支持我的人。我相信,爱情不仅仅是外表的吸引,更是心灵的契合。我愿意用我的真诚和热情,去温暖你的心房,去守护我们的未来。\n\n最后,我想说,小黑黑,虽然名字听起来有点特别,但我的内心充满了阳光。如果你愿意,就让我们一起,在这美好的时光里,寻找那份属于我们的幸福吧!\n\n谢谢大家!’}
串联两条链的输出结果,生成口号**********
{‘people_description’: ‘\n我叫小黑黑,我长的非常黑,喜欢跑步骑车。\n’, ‘slogn’: ‘口号:阳光小黑黑,活力跑骑者,携手寻真爱!’, ‘poster’: ‘尊敬的各位来宾,大家好!\n\n今天,我站在这里,带着一颗真诚的心,希望能在这里遇到那个特别的你。我的名字叫小黑黑,听起来可能有点特别,但这也正是我个性的体现。是的,我长得非常黑,但这并不是我的全部,它只是我独特魅力的一个标签。\n\n我热爱生活,喜欢挑战自我。跑步和骑车是我生活中不可或缺的一部分。每当我穿上跑鞋,踏上跑道,或是骑上自行车,穿梭在风景如画的道路上,我都能感受到生命的活力和无限可能。这些运动不仅让我保持了健康的体魄,更让我学会了坚持和毅力。\n\n我性格开朗,乐观向上。我相信,每个人都有自己的闪光点,而我,就是那个愿意用心去发现和欣赏这些闪光点的人。我期待着与一个同样热爱生活、积极向上的你,一起分享生活的点点滴滴。\n\n在这个相亲的舞台上,我希望能够遇到那个能够理解我、支持我的人。我相信,爱情不仅仅是外表的吸引,更是心灵的契合。我愿意用我的真诚和热情,去温暖你的心房,去守护我们的未来。\n\n最后,我想说,小黑黑,虽然名字听起来有点特别,但我的内心充满了阳光。如果你愿意,就让我们一起,在这美好的时光里,寻找那份属于我们的幸福吧!\n\n谢谢大家!’}

采样LCEL表达式,使用chain的方式(让整个链条更加简洁)

# 使用LCEL表达式
chain_one = (
    PromptTemplate.from_template(prompt_poster) | model | {'poster':StrOutputParser(), 'people_description':lambda x:people_description}
)
chain_two = (
    PromptTemplate.from_template(prompt_slogn) | model | {'poster':StrOutputParser(key_name='poster'), 'people_description':lambda x:people_description, 'slogn':StrOutputParser()}
)
final_chain = chain_one | chain_two
print(final_chain.invoke({'people_description':people_description}))

{‘poster’: ‘口号:阳光小黑黑,活力跑骑者,携手寻真爱!’, ‘people_description’: ‘\n我叫小黑黑,我长的非常黑,喜欢跑步骑车。\n’, ‘slogn’: ‘口号:阳光小黑黑,活力跑骑者,携手寻真爱!’}
在这里插入图片描述

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

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

相关文章

秒杀系统—5.第二版升级优化的技术文档三

大纲 8.秒杀系统的秒杀库存服务实现 9.秒杀系统的秒杀抢购服务实现 10.秒杀系统的秒杀下单服务实现 11.秒杀系统的页面渲染服务实现 12.秒杀系统的页面发布服务实现 8.秒杀系统的秒杀库存服务实现 (1)秒杀商品的库存在Redis中的结构 (2)库存分片并同步到Redis的实现 (3…

【STM32】HAL库 之 CAN 开发指南

基于stm32 f407vet6芯片 使用hal库开发 can 简单讲解一下can的基础使用 CubeMX配置 这里打开CAN1 并且设置好波特率和NVIC相关的配置 波特率使用波特率计算器软件 使用采样率最高的这段 填入 得到波特率1M bit/s 然后编写代码 环形缓冲区 #include "driver_buffer.h&qu…

DeepSeek R1-0528 新开源推理模型(免费且快速)

DeepSeek推出了新模型,但这不是R2! R1-0528是DeepSeek的最新模型,在发布仅数小时后就在开源社区获得了巨大关注。 这个悄然发布的模型DeepSeek R1-0528,已经开始与OpenAI的o3一较高下。 让我来详细介绍这次更新的新内容。 DeepSeek R1-0528 发布 DeepSeek在这次发布中采…

Go 语言的 GC 垃圾回收

序言 垃圾回收&#xff08;Garbage Collection&#xff0c;简称 GC&#xff09;机制 是一种自动内存管理技术&#xff0c;主要用于在程序运行时自动识别并释放不再使用的内存空间&#xff0c;防止内存泄漏和不必要的资源浪费。这篇文章让我们来看一下 Go 语言的垃圾回收机制是如…

安全帽目标检测

安全帽数据集 这里我们使用的安全帽数据集是HelmentDetection&#xff0c;这是一个公开数据集&#xff0c;里面包含5000张voc标注格式的图像&#xff0c;分为三个类别&#xff0c;分别是 0: head 1: helmet 2: person 安全帽数据集下载地址、 我们将数据集下载后&#xff0c…

Eclipse 插件开发 5.3 编辑器 监听输入

Eclipse 插件开发 5.3 编辑器监 听输入 1 插件配置2 添加监听3 查看效果 Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Click1 Bundle-SymbolicName: com.xu.click1;singleton:true Bundle-Version: 1.0.0 Bundle-Activator: com.xu.click1.Activator Bundle…

iOS 集成网易云信IM

云信官方文档在这 看官方文档的时候&#xff0c;版本选择最新的V10。 1、CocoPods集成 pod NIMSDK_LITE 2、AppDelegate.m添加头文件 #import <NIMSDK/NIMSDK.h> 3、初始化 NIMSDKOption *mrnn_option [NIMSDKOption optionWithAppKey:"6f6568e354026d2d658a…

azure web app创建分步指南系列之二

为注册表授权托管标识 你创建的托管标识尚未获得从容器注册表中提取数据的授权。在此步骤中,你将启用授权。 返回容器注册表的管理页面: 在左侧导航菜单中,选择“访问控制 (IAM)”。选择“添加角色分配”。此屏幕截图显示了如何为容器注册表启用添加角色分配。在角色列表中…

题海拾贝:P8598 [蓝桥杯 2013 省 AB] 错误票据

Hello大家好&#xff01;很高兴我们又见面啦&#xff01;给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 我的博客&#xff1a;<但凡. 我的专栏&#xff1a;《编程之路》、《数据结构与算法之美》、《题海拾贝》 欢迎点赞&#xff0c;关注&#xff01; 1、题…

Python量化交易12——Tushare全面获取各种经济金融数据

两年前写过Tushare的简单使用&#xff1a; Python量化交易08——利用Tushare获取日K数据_skshare- 现在更新一下吧&#xff0c;这两年用过不少的金融数据库&#xff0c;akshare&#xff0c;baostock&#xff0c;雅虎的&#xff0c;pd自带的......发现还是Tushare最稳定最好用&…

封装一个小程序选择器(可多选、单选、搜索)

组件 <template><view class"popup" v-show"show"><view class"bg" tap"cancelMultiple"></view><view class"selectMultiple"><view class"multipleBody"><view class&…

Dest建筑能耗模拟仿真功能简介

Dest建筑能耗模拟仿真功能简介 全球建筑能耗占终端能源消费的30%以上&#xff0c;掌握建筑能耗模拟是参与绿色建筑认证&#xff08;如LEED、WELL&#xff09;、超低能耗设计、既有建筑节能改造的必备能力。DEST作为国内主流建筑能耗模拟工具&#xff0c;广泛应用于设计院、咨询…

【Hot 100】121. 买卖股票的最佳时机

目录 引言买卖股票的最佳时机我的解题 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;【Hot 100】121. 买卖股票的最佳时机❣️ 寄语&#xff1a;书到用时方恨少&#xff0c;事非经过不知难&#xff01; 引…

【机器学习基础】机器学习入门核心算法:XGBoost 和 LightGBM

机器学习入门核心算法&#xff1a;XGBoost 和 LightGBM 一、算法逻辑XGBoost (eXtreme Gradient Boosting)LightGBM (Light Gradient Boosting Machine) 二、算法原理与数学推导目标函数&#xff08;二者通用&#xff09;二阶泰勒展开&#xff1a;XGBoost 分裂点增益计算&#…

Linux | Shell脚本的常用命令

一. 常用字符处理命令 1.1 连续打印字符seq seq打印数字&#xff1b;且只能正向打印&#xff0c;不可反向连续打印 设置打印步长 指定打印格式 1.2 反向打印字符tac cat 正向&#xff0c;tac 反向 1.3 打印字符printf printf "打印的内容"指定格式打印内容 换行…

【JUC】深入解析 JUC 并发编程:单例模式、懒汉模式、饿汉模式、及懒汉模式线程安全问题解析和使用 volatile 解决内存可见性问题与指令重排序问题

单例模式 单例模式确保某个类在程序中只有一个实例&#xff0c;避免多次创建实例&#xff08;禁止多次使用new&#xff09;。 要实现这一点&#xff0c;关键在于将类的所有构造方法声明为private。 这样&#xff0c;在类外部无法直接访问构造方法&#xff0c;new操作会在编译…

2025年全国青少年信息素养大赛复赛C++算法创意实践挑战赛真题模拟强化训练(试卷3:共计6题带解析)

2025年全国青少年信息素养大赛复赛C++算法创意实践挑战赛真题模拟强化训练(试卷3:共计6题带解析) 第1题:四位数密码 【题目描述】 情报员使用4位数字来传递信息,同时为了防止信息泄露,需要将数字进行加密。数据加密的规则是: 每个数字都进行如下处理:该数字加上5之后除…

Mongodb | 基于Springboot开发综合社交网络应用的项目案例(中英)

目录 Project background Development time Project questions Create Project create springboot project project framework create folder Create Models user post Comment Like Message Serive tier user login and register Dynamic Publishing and Bro…

飞腾D2000与FPGA结合的主板

UD VPX-404是基于高速模拟/数字采集回放、FPGA信号实时处理、CPU主控、高速SSD实时存储架构开发的一款高度集成的信号处理组合模块&#xff0c;采用6U VPX架构&#xff0c;模块装上外壳即为独立整机&#xff0c;方便用户二次开发。 UD VPX-404模块的国产率可达到100%&#xff0…

百度量子蜘蛛3.0横空出世,搜索引擎迎来“量子跃迁“级革命

一、量子蜘蛛3.0的三大颠覆性升级 1. 动态抓取&#xff1a;让内容实时"量子纠缠" - 智能频率调节&#xff1a;根据网站更新频率自动调整抓取节奏&#xff0c;新闻类站点日抓取量达3-5次&#xff0c;静态页面抓取间隔延长至72小时。某财经媒体通过"热点事件15分钟…