学习 LangChain 的 LCEL

学习 LangChain 的 LCEL

  • 0. 引言
  • 1. 基本示例:提示+模型+输出解析器​
    • 1-1. Prompt​
    • 1-2. Model
    • 1-3. Output parser
    • 1-4. Entire Pipeline

0. 引言

LCEL(LangChain Expression Language) 可以轻松地从基本组件构建复杂的链,并支持开箱即用的功能,例如流式传输、并行性和日志记录。

1. 基本示例:提示+模型+输出解析器​

最基本和常见的用例是将提示模板和模型链接在一起。为了看看这是如何工作的,让我们创建一个接受主题并生成笑话的链:

from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAIprompt = ChatPromptTemplate.from_template("tell me a short joke about {topic}")
model = ChatOpenAI(model="gpt-4")
output_parser = StrOutputParser()chain = prompt | model | output_parserchain.invoke({"topic": "ice cream"})

请注意这行代码,我们使用 LCEL 将不同的组件拼凑成一个链:

chain = prompt | model | output_parser

| 符号类似于 unix 管道运算符,它将不同的组件链接在一起,将一个组件的输出作为下一个组件的输入。

在此链中,用户输入传递到提示模板,然后提示模板输出传递到模型,然后模型输出传递到输出解析器。让我们分别看一下每个组件,以真正了解发生了什么。

1-1. Prompt​

prompt 是一个 BasePromptTemplate ,这意味着它接受模板变量的字典并生成一个 PromptValuePromptValue 是一个完整提示的包装器,可以传递给 LLM (它接受一个字符串作为输入)或 ChatModel (它接受一个序列作为输入的消息)。它可以与任何一种语言模型类型一起使用,因为它定义了生成 BaseMessage 和生成字符串的逻辑。

prompt_value = prompt.invoke({"topic": "ice cream"})
prompt_value
prompt_value.to_messages()
prompt_value.to_string()

1-2. Model

然后 PromptValue 被传递给 model 。在本例中,我们的 modelChatModel ,这意味着它将输出 BaseMessage

message = model.invoke(prompt_value)
message

如果我们的 modelLLM ,它将输出一个字符串。

from langchain_openai.llms import OpenAIllm = OpenAI(model="gpt-3.5-turbo-instruct")
llm.invoke(prompt_value)

1-3. Output parser

最后,我们将 model 输出传递给 output_parser ,这是一个 BaseOutputParser ,意味着它接受字符串或 BaseMessage 作为输入。 StrOutputParser 特别简单地将任何输入转换为字符串。

output_parser.invoke(message)

1-4. Entire Pipeline

请按照以下步骤操作:

  1. 我们将所需主题的用户输入传递为 {"topic": "ice cream"}

  2. prompt 组件获取用户输入,然后在使用 topic 构造提示后,将其用于构造 PromptValue

  3. model 组件获取生成的提示,并传递到 OpenAI LLM 模型进行评估。模型生成的输出是一个 ChatMessage 对象。

  4. 最后, output_parser 组件接收 ChatMessage ,并将其转换为 Python 字符串,该字符串从 invoke 方法返回。

在这里插入图片描述
请注意,如果您对任何组件的输出感到好奇,您始终可以测试链的较小版本,例如 promptprompt | model 以查看中间结果:

input = {"topic": "ice cream"}prompt.invoke(input)
# > ChatPromptValue(messages=[HumanMessage(content='tell me a short joke about ice cream')])(prompt | model).invoke(input)
# > AIMessage(content="Why did the ice cream go to therapy?\nBecause it had too many toppings and couldn't cone-trol itself!")

refer: https://python.langchain.com/docs/expression_language/get_started

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

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

相关文章

基于springboot+vue的精准扶贫管理系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

Spring Bean 相关注解

目录 Autowired Component,Repository,Service, Controller RestController Scope Configuration Autowired 自动导入对象到类中,被注入进的类同样要被 Spring 容器管理比如:Service 类注入到 Controller 类中。 Service public class UserService …

「Qt Widget中文示例指南」如何实现文档查看器?(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 文档查看器是一个显…

IDEA配置有道翻译插件

目录 安装Translation插件有道云配置翻译APIIDEA配置有道翻译引擎 关于IDEA Translation插件中有道智云(有道翻译)应用ID,密钥申请教程 安装Translation插件 File -> Settings ->Plugins ->搜索Translation ->insatll 有道云…

Ubuntu上Jenkins自动化部署Gitee上SpringBoot项目

文章目录 安装安装JDK安装Maven安装GitNodeJS安装(可选)安装Jenkins 配置Jenkins为Jenkins更换插件源设置jenkins时区安装插件全局工具配置添加Gitee凭证Gitee项目配置 部署后端1.新建任务2.配置源码管理3.构建触发器4.到Gitee中添加WebHook5.构建环境6.…

RISC-V指令集之RV32C

RISC-V指令集之RV32C 1 指令格式2 RV32C的指令 本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 指令格式 RV32C(压缩指令)的意义: RV32C基于32位寄存器的RISC-V架构,同时增加了压缩指令集&#xf…

RV64 - 64位地址指令

RV64 - 64位地址指令 1 RV64G介绍2 RV64G增加的指令 本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 RV64G介绍 RV32I RV32M RV32A RV32F RV32D RV32G,那么RV32G 指令的64 位版本 – RV64G 指令,其示意图&#xff0…

300分钟吃透分布式缓存-08讲:MC系统架构是如何布局的?

系统架构 我们来看一下 Mc 的系统架构。 如下图所示,Mc 的系统架构主要包括网络处理模块、多线程处理模块、哈希表、LRU、slab 内存分配模块 5 部分。Mc 基于 Libevent 实现了网络处理模块,通过多线程并发处理用户请求;基于哈希表对 key 进…

ETH Denver见!来参加DAO的领袖和爱好者的活动吧

我们将和 DAOBase 在美国丹佛举办 DAO 领袖和爱好者的盛会——“去中心化对话:DAO 治理的新时代”活动! 随着加密货币和区块链技术的快速发展,DAO 已成为数字经济不可或缺的一部分。目前,已有超过 10 万个 DAO,拥有超…

pageHelper分页查询

文章目录 前言一、集成1.引入库2.配置yml 二、编码1.Controller2.Service3.Mapper4.Mapper.xml5.StudentResult 三、测试1.根据页码和页数2.根据name 总结 前言 本篇文章介绍在java中使用pageHelper完成分页的功能。 使用的数据库为mysql,持久层框架mybatis。 一、集成 1.引入…

★【递归】【构造二叉树】Leetcode 106.从中序与后序遍历序列构造二叉树

★【递归】【构造二叉树】Leetcode 106.从中序与后序遍历序列构造二叉树 105. 从前序与中序遍历序列构造二叉树 106.从中序与后序遍历序列构造二叉树:star:思路分析递归解法 105. 从前序与中序遍历序列构造二叉树递归解法 ---------------🎈🎈题目链接&a…

PSA制氧装置的基本原理及在医疗领域的应用现状

随着医疗技术的不断进步,PSA(Pressure Swing Adsorption,变压吸附)制氧装置在医疗领域的应用日益广泛,其高效、安全、便捷的特点为现代医疗带来了革命性的变化。恒业通将从PSA制氧装置的基本原理出发,深入探讨其在医疗领域的应用现…