【大语言模型】LangChain LCEL 表达式语言

在这里插入图片描述


【大语言模型】LangChain LCEL 表达式语言

  • 一、简介
  • 二、LCEL的优势
  • 三、LCEL 的基本使用
    • 1、Runnable 对象
  • 四、实战实例

一、简介

LangChain LCEL 的全称为 LangChain Expression Language 即可直译为 LangChain 表达式。
为了构造更复杂的 LLM 应用并且更为简便快捷的构造 LLM 应用,Langchain 提供了类似“管道”的形式去声明提示词模板(prompt),即用 “|” 来连接各个组件之间的操作。也就是 LCEL 允许开发者将不同的模块进行简单的形式实现串联。语法如下所示:
chain = 提示词板 | 大模型调用 | 输出解析器

二、LCEL的优势

很多人疑惑的一点可能在于明明基于官方的 API 也可以实现请求响应的一系列过程,为何还要多此一举使用 LCEL 呢?

import os
# OpenAI提供的python公共库
from openai import OpenAI
import osos.environ["OPENAI_API_KEY"] = "xxxxxxxxxxxxx"  # 将个人token替换到这个位置
os.environ["OPENAI_API_BASE"] = "xxxxxxxxxxxxx"# 设置OpenAI Token
client = OpenAI(api_key=os.environ.get('OPENAI_API_KEY'), base_url=os.environ.get('OPENAI_API_BASE'))
chat_completion = client.chat.completions.create(# 声明调用的模型名称model='gpt-3.5-turbo',# temperature用来设置大模型返回数据的随机性和创造性,较低的数值返回的数据就更贴近现实。temperature=0.0,# 消息内容,可以包含上下文信息,列表数据中的顺序就是对话发生的顺序messages=[{'role': 'user', 'content': '1+1等于几?'}]
)
print(chat_completion)# 从返回数据中拿到具体的答案信息
answer = chat_completion.choices[0].message.content
# 打印调试信息
print(answer)
tCompletion(id='chatcmpl-AbP4L1ArFNwLSzwRKVh5LrAwP9Pe2', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='1+1等于2。', refusal=None, role='assistant', audio=None, function_call=None, tool_calls=None))], created=1733477865, model='gpt-3.5-turbo-0125', object='chat.completion', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=7, prompt_tokens=15, total_tokens=22, completion_tokens_details=CompletionTokensDetails(accepted_prediction_tokens=0, audio_tokens=0, reasoning_tokens=0, rejected_prediction_tokens=0), prompt_tokens_details=PromptTokensDetails(audio_tokens=0, cached_tokens=0)))
1+1等于2

从以上代码中可以看出以下几个问题:
1.官方提供的主要功能为请求的发送,具体发送的数据 messages 部分需要用户自己组织和维护。
2.返回的数据 response 部分也只是简单的组装了一个结构。有过开发经验的同学都深有感触,如果每次给到的返回信息从结构到内容都是不一样的,作为调用方,则需要编写无数行代码去处理这些异常。
而 LCEL 语法形式使得数据流程清晰,通过 pipeline 的形式,可以清晰地定义数据的流向以及处理的流程,使得代码更易于理解和维护。

三、LCEL 的基本使用

在使用 LCEL 表达式时,需要先了解其中所包含的元素:

  • |:连接符
  • Runnable对象:可执行操作

1、Runnable 对象

Runnable 对象意为可执行操作,每个LCEL表达式都需要runnable 对象以及"|"连接符,使得LCEL 对象可以自动支持这些调用。
其中 Runnable 对象需要包含以下三个接口:

  • stream:以流式返回输出结果。
  • invoke:基于-个input调用 Runnable。
  • batch:基于一个list的input 批量调用 Runnable。

所有的 Runnable 对象都具有共同的属性,即输入架构与输出架构。常见的输入和输出类型如下所示

Componentinput Typeoutput Type
Prdmptdictonaryprompt Value
LLMString, list of messages or Prompt ValueString
ChatModelString, list of messages or Prompt ValueChatMessage
RetrieverSingle StringList of Documents
ToolString/DictonaryTool dependent
Output ParserOutput of LLM or ChatModelParser dependent

四、实战实例

import os
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAIimport osos.environ["OPENAI_API_KEY"] = "xxxxxxxxxx"  # 将个人token替换到这个位置
os.environ["OPENAI_API_BASE"] = "xxxxxxxxxx"# 1、提示词模板 ->PromptValue
prompt = ChatPromptTemplate.from_template("出给一个关于{goods}的广告宜传语")
# 2、ChatGPT模型调用对象
model = ChatOpenAI()# 将ChatGPT返回结果转换为字符串的处理器对象
output_parser = StrOutputParser()
# 将三个对象根据使用顺序组合成一个调用链,实现提示词组装、模型调用、结果解析的功能
# 业务流程  提示 调用  解析
chain = prompt | model | output_parser# 输入提示词模版中的变量部分,调用链会自动完成后续的调用和解析
res = chain.invoke({"goods": "音乐节"})print(res)

“跟随音乐的节拍,感受心灵的共鸣。音乐节邀您共同享受狂欢,释放激情,感受无限快乐!”

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

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

相关文章

【深入探索 C++ STL 双端队列 】deque —— 数据时空的双端虫洞,扭曲常规操作的效率边界

STL系列专栏: C STL系列__Zwy的博客-CSDN博客https://blog.csdn.net/bite_zwy/category_12838593.html?spm1001.2014.3001.5482学习C STL的三个境界,会用,明理,能扩展,STL中的所有容器都遵循这个规律,下面…

AcWing 717. 简单斐波那契

文章目录 前言代码思路 前言 今天练习了半个小时的打字,还有点想继续练习,但是感觉还是不练了比较好。 简单题可能快要写完了,自己因为要做个手术回家几天,不想带电脑回去,好几天不能练习打字,要不今天再…

FPGA系列,文章目录

前言 FPGA(Field-Programmable Gate Array,现场可编程门阵列)是一种集成电路,其内部结构可以通过软件重新配置来实现不同的逻辑功能。与传统的ASIC(Application-Specific Integrated Circuit,专用集成电路…

【Linux】软硬连接 | 静动态库

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:青果大战linux 总有光环在陨落,总有新星在闪烁 你说得对&#xff0c…

消防物证管理系统|DW-S404实现消防物证智能化管理

一、系统概述 智慧消防物证管理系统DW-S404系统旨在借助现代信息技术,达成消防物证管理的高效化、安全化及智能化管理目标。该系统运用物联网、大数据、云计算等先进技术,实现对消防物证从产生到销毁的全生命周期跟踪与监控,从而增强物证管理…

Java的封装、继承、多态

书接上文,我们聊完了Java的类和对象,有没有唤起你脑海的一些记忆呢,我们有了类和对象的基础之后,我们就可以衍生出来封装继承和多态。 封装 我理解一个东西,我一般会先想这个是什么,再是怎么用&#xff0…

【大数据技术基础 | 实验十四】Kafka实验:订阅推送示例

文章目录 一、实验目的二、实验要求三、实验原理(一)Kafka简介(二)Kafka使用场景 四、实验环境五、实验内容和步骤(一)配置各服务器之间的免密登录(二)安装ZooKeeper集群&#xff08…

操作系统Lesson7 - 线程编程模型和进程间通信概述

文章目录 进程和线程的区别线程非安全函数时序问题进程间通信竞态条件 进程和线程的区别 一句话:进程资源独立,线程资源共享。 当系统内核不支持线程时,我们只能用用户空间来描述线程;而如果内核支持线程,我们可以在创…

距离与AoA辅助的三维测距算法,适用于自适应基站数量的情况。订阅专栏后可直接查看完整源代码

本MATLAB 代码实现了一个基于距离与到达角(AoA)的三维测距系统,主要用于在动态环境中估计目标物体的位置。提供本算法与仅侧角(AoA)的定位误差对比 文章目录 代码运行结果源代码代码功能概述主要步骤分析初始化部分AOA定位绘图部分输出部分代码的应用和意义总结代码运行结…

dd破坏asm磁盘头恢复---惜分飞

有朋友对asm disk的磁盘头dd了2048byte的数据 通过分析,gi软件版本,确认是11.2.0.4 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Real Application Clusters and Automatic Storage Management options. ORACLE_HOME /u01/app/…

网络测速工具

1. SPEEDTEST https://www.speedtest.net/ 2. 测速网 测速网 - 专业测网速, 网速测试, 宽带提速, 游戏测速, 直播测速, 5G测速, 物联网监测,Wi-Fi 7,Wi-Fi 6,FTTR,全屋Wi-Fi - SpeedTest.cn 3. 字节比特换算 bps(bits per second) 字节和比特的换算…

PDF处理的创新工具:福昕低代码平台尝鲜

在当今数字化时代,PDF文件的处理和管理变得越来越重要。福昕低代码平台是新发布的一款创新的工具,旨在简化PDF处理和管理的流程。通过这个平台,用户可以通过简单的拖拽界面上的按钮,轻松完成对Cloud API的调用工作流,而…

R语言 | ComplexHeatmap 画注释若干基因的热图 //todo

一般顺序: 先用 pheatmap 聚类再用 ComplexHeatmap 做可视化:添加顶部、左侧聚类颜色,显示若干代表性基因 genec("Gene18", "Gene19", "Gene7","Gene3", "Gene9", "Gene15") …

模型案例:| 手机识别模型!

导读 2023年以ChatGPT为代表的大语言模型横空出世,它的出现标志着自然语言处理领域取得了重大突破。它在文本生成、对话系统和语言理解等方面展现出了强大的能力,为人工智能技术的发展开辟了新的可能性。同时,人工智能技术正在进入各种应用领…

解谜类游戏《迷失岛2》等如何抽象出一套通用高效开发框架?

解谜类游戏以精妙的谜题设计和引人入胜的故事叙述为特点,考验着玩家的智慧与观察力。《迷失岛2》与《南瓜先生2九龙城寨》正是这一领域的佳作。游戏以独特的艺术风格和玩法设计吸引了大量玩家,而它们背后隐藏着一套强大的框架。 上海胖布丁游戏的技术总…

【C++探索学习】第十九弹——进程替换:深入解析操作系统中的进程替换机制

Linux学习笔记: https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言: 在Linux操作系统中,进程替换(Process Replacement)是一个重要的概念,它允许程序通过系统调…

SSH克隆github项目

1、生成密钥 ssh-keygen -t rsa -C "你的邮箱xxx.com" 全程回车即可(不用输入ras文件名及密码)、为了方便下面的公钥查看 2、配置公钥 查看公钥内容 cat c:\Users\xxx\.ssh\id_rsa.pub(修改为自己的路径及名字) 将公钥内容复制并粘贴至…

ASP.NET Core 9.0 静态资产传递优化 (MapStaticAssets )

一、结论 💢先看结论吧, MapStaticAssets 在大多数情况下可以替换 UseStaticFiles,它已针对为应用在生成和发布时了解的资产提供服务进行了优化。 如果应用服务来自其他位置(如磁盘或嵌入资源)的资产,则应…

电子信息工程自动化 单片机自动门控制系统设计

摘 要 伴随着社会经济的发展进步、科学技术的发展进步以及人民群众日常生活质量的逐渐提升,自动门开始全面进入人民群众的生活,逐渐发展成为了宾馆、大型超市、政府等当代建筑里必须配备的设备,是建筑自动智能化综合水平的主要标准之一。它具…

防火墙有什么作用

防火墙的作用:1. 提供网络安全防护;2. 实施访问控制和流量过滤;3. 检测和阻止恶意攻击;4. 保护内部网络免受未经授权的访问;5. 监控网络流量和安全事件;6. 支持虚拟专用网络(VPN)。防…