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

article/2025/7/5 13:21:45

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.hkcw.cn/article/qtXEEppuJT.shtml

相关文章

职坐标精选嵌入式AI物联网开源项目

随着嵌入式、AI与物联网技术的深度融合&#xff0c;开源生态已成为开发者构建智能硬件解决方案的核心驱动力。本文将从嵌入式实时操作系统、多模态AI数据集及物联网接入平台三大维度切入&#xff0c;系统性梳理技术选型要点与实践路径。在嵌入式领域&#xff0c;重点解析低功耗…

闻晓医考---口腔执业医师483分的复习攻略

&#x1f308;分清考试主次 &#x1f386;核心: 口外(114分) 口修(112分) 牙体牙髓(72分) &#x1f386;重点: 口预(50分) 临床医学(49分) 口组病(33分) 口解(33分) 牙周(30分) &#x1f386;次重点: 儿口(16分) 口腔黏膜(16分) 免疫&#xff08;8分&#xff09;…

火语言UI组件--幻灯片

【组件功能】&#xff1a;在有限空间内&#xff0c;循环播放同一类型的图片、文字等内容。 样式预览 基础设置 属性名称属性释义输入值类型初始索引(initialIndex)设置初始状态激活的幻灯片的索引&#xff0c;从 0 开始数字型(Number)触发方式(trigger)设置指示器的触发方式(…

矿用电液控连接器LCFB-12钢丝编织橡胶护套连接器

矿用电液控连接器LCFB-12钢丝编织橡胶护套连接器是煤矿井下综采工作面液压支架电液控制系统中的关键部件,其性能直接关系到整个液压系统的稳定性和安全性。随着智能化采矿技术的快速发展,这类连接器的技术要求和应用场景也在不断升级。本文将从产品结构、技术特点、行业应用及…

基于CAPL的DDS子消息解析- Data

1往期回顾 通过《DDS—RTPS一致性测试案例分析》一文&#xff0c;我们了解到 Data 子消息在 Data Distribution Service(DDS) 通信中扮演着至关重要的角色。它不仅负责 DDS 实体的 Simple Participant Discovery Protocol (SPDP) 发现流程&#xff0c;还参与了 Simple Endpoin…

MySQL之数据库的内嵌函数和联合查询

MySQL之数据库的内嵌函数和联合查询 一.数据库的内嵌函数1.1聚合函数1.2日期函数1.3字符串处理函数1.4 数学函数1.5其他常用的函数 二.联合查询2.1笛卡尔积2.2内连接2.3外连接2.4 自连接2.5子查询2.6合并查询 一.数据库的内嵌函数 1.1聚合函数 在MySQL中有着一类聚合函数来方…

【AUTOSAR OS】内存保护模块技术解析

一、模块总体功能概述 Os_Mprot.c 是AUTOSAR Classic Platform(CP)中内存保护模块的核心实现,主要负责验证任务(Task)和中断服务程序(ISR)对内存区域的访问权限,确保系统资源的合法使用。其核心功能包括: 内存访问权限校验:根据任务/中断所属的应用(App)信任级别(…

Docker 跨平台支持:从 Linux 到 macOS 的容器化开发实践

Docker 容器的理念是“一次构建,处处运行”,旨在解决应用程序在不同环境中部署的兼容性问题。然而,这一承诺的实现,在非原生 Linux 系统(如 macOS 和 Windows)上,需要巧妙的底层机制来支撑。 对于开发者而言,理解 Docker Desktop 在这些操作系统上的工作原理,特别是其…

电机试验平台:现代科技与工程应用的典范

电机试验平台作为电机行业中至关重要的一环&#xff0c;扮演着起着举足轻重的角色。随着科技的进步和工程技术的不断发展&#xff0c;电机试验平台也在不断创新和完善。本文将从电机试验平台的基本概念、发展历程、技术特点以及未来趋势等方面展开介绍。通过深入探讨&#xff0…

[paddle]paddle2onnx无法转换Paddle3.0.0的json格式paddle inference模型

使用PDX 3.0rc1 训练时序缺陷检测后导出的模型无法转换 Informations (please complete the following information): Inference engine for deployment: PD INFERENCE 3.0-->onnxruntime Why convert to onnx&#xff1a;在端侧设备上部署 Paddle2ONNX Version: 1.3.1 解…

内核进程基础

进程定义 操作系统作为硬件的使用层&#xff0c;提供使用硬件资源的能力&#xff1b;进程作为操作系统的使用层&#xff0c;提供使用操作系统抽象出的资源层的能力。 进程&#xff1a;是指计算机中已运行的程序。进程本身不是基本的运行单位&#xff0c;而是线程的容器。程序…

nic_monitor-全面监控以太网、IB、RoCE网络流量的工具

本文提供三个工具,1. nic_monitor 使用脚本语言 Bash Shell 编写的,用来监控以太网或者RDMA接口流量使用的。 2. nic_monitor_v2.0_eth.py 通过TUI界面实时显示以太网流量的工具,使用Python3编写的。3. nic_monitor_v2.1_rdma.py 通过TUI界面实时显示 IB 和 RoCE 流量的工具…

【论文解读】CVPR2023 PoseFormerV2:3D人体姿态估计(附论文地址)

论文链接&#xff1a;https://arxiv.org/pdf/2303.17472 源码链接&#xff1a;https://github.com/QitaoZhao/PoseFormerV2 Abstract 本文提出了 PoseFormerV2&#xff0c;通过探索频率域来提高 3D 人体姿态估计的效率和鲁棒性。PoseFormerV2 利用离散余弦变换&#xff08;DC…

01流程定位

1.以客户为中心&#xff0c;端到端创造价值 大家要思考一个核心问题&#xff0c;企业用什么为客户创造价值&#xff1f; 流程管理大师-迈克而哈默博士回答&#xff0c;不是产品和服务&#xff0c;而是业务流程&#xff0c;是创造、交付产品和服务背后的各种业务流程&#xff0…

【计算机网络】传输层TCP协议——协议段格式、三次握手四次挥手、超时重传、滑动窗口、流量控制、

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;计算机网络 &#x1f339;往期回顾&#x1f339;&#xff1a; 【计算机网络】传输层UDP协议 &#x1f516;流水不争&#xff0c;争的是滔滔不息 一、TCP协议 UDP&…

AI炼丹日志-24 - MCP 自动操作 提高模型上下文能力 Cursor + Sequential Thinking Server Memory

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; Java篇&#xff1a; MyBatis 更新完毕目前开始更新 Spring&#xff0c;一起深入浅出&#xff01; 大数据篇 300&#xff1a; Hadoop&…

yolov8改进模型

YOLOv8 作为当前 YOLO 系列的最新版本&#xff0c;已经具备出色的性能。若要进一步改进&#xff0c;可以从网络架构优化、训练策略增强、多任务扩展和部署效率提升四个方向入手。以下是具体改进思路和实现示例&#xff1a; 1. 网络架构优化 (1) 骨干网络增强 引入 Transform…

单卡4090部署Qwen3-32B-AWQ(4bit量化)-vllm

单卡4090部署Qwen3-32B-AWQ(4bit量化) 模型&#xff1a;Qwen3-32B-AWQ(4bit量化) 显卡&#xff1a;4090 1 张 python版本 python 3.12 推理框架“vllm 重要包的版本 vllm0.9.0创建GPU云主机 这里我使用的是优云智算平台的GPU&#xff0c;使用链接可以看下面的 https://blog.…

【C++并发编程01】初识C++并发编程

1、并发是什么 并发是指两个或更多独立的活动同时发生&#xff0c;现实生活中常见的并发场景如边吃饭边看手机。 1.1、计算机中的并发&#xff1a; 计算机领域的并发是指在单个系统里同时执行多个独立的任务&#xff0c;而非顺序的进行一些活动。 我们在电脑上能够边听音乐边和…

【NLP入门系列一】NLP概述和独热编码

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 博主简介&#xff1a;努力学习的22级本科生一枚 &#x1f31f;​&#xff1b;探索AI算法&#xff0c;C&#xff0c;go语言的世界&#xff1b;在迷茫中寻找光芒…