LangChain表达式语言(LCEL)原理

news/2025/3/28 11:32:11/文章来源:https://www.cnblogs.com/aibi1/p/18792006

目录
      • 1. 运算符重载 (| 的实现)
      • 2. 输入输出处理流程
        • 步骤 1 - 执行提示模板
        • 步骤 2 - 传递到 LLM
      • 3 组件的类型预先定义
        • 核心类型示例
  • 参考资料

这种管道操作符的底层实现基于 ​Runnable 协议 和 ​运算符重载 的设计模式

... final_prompt = ChatPromptTemplate.from_messages([few_shot_prompt,("human", "{input}"), #这里的human是用户的输入。chain.invoke({"input": "xxxx"}) 里面的input]
)final_prompt
print(final_prompt)chain = final_prompt | llmresponse = chain.invoke({"input": "艾米需要4分钟才能爬到滑梯顶部,她花了1分钟才滑下来,水滑梯将在15分钟后关闭,请问在关闭之前她能滑多少次?"})
print(response.content)

看看上面的例子:
如果是 0.1 的版本是这么实现的

chain = LLMChain(final_prompt,llm)
response = chain.invoke({"input": "艾米需要4分钟才能爬到滑梯顶部,她花了1分钟才滑下来,水滑梯将在15分钟后关闭,请问在关闭之前她能滑多少次?"})
print(response.content)

从原理上看就是第一个组件执行结果作为第二个组件的输入。

底层原理

1. 运算符重载 (| 的实现)

当使用 | 操作符时,LangChain 通过 Python 的 __or__ 方法重载机制,将两个组件连接成一个新的 可运行序列 (RunnableSequence)

# 伪代码示例
class Runnable:def __or__(self, other):return RunnableSequence(self, other)

这意味着以下两行代码是等价的:

chain = final_prompt | llm
chain = RunnableSequence(final_prompt, llm)

2. 输入输出处理流程

当调用 chain.invoke({"input": ...}) 时,执行流程如下:

步骤 1 - 执行提示模板

# final_prompt 是一个 ChatPromptTemplate 实例
messages = final_prompt.invoke({"input": "问题内容..."})
# 输出格式示例:
# [
#   SystemMessage(content="你是一个助手..."),
#   HumanMessage(content="艾米需要4分钟...")
# ]

步骤 2 - 传递到 LLM

# llm 是一个 ChatOpenAI 实例
response = llm.invoke(messages)
# 输出格式示例:
# AIMessage(content="艾米可以滑3次...")

3 组件的类型预先定义

所有 LangChain 组件(称为 Runnable)都有明确的输入输出类型定义,这些类型通过 Python 的 类型注解 和 LangChain 的 Pydantic 模型 实现。

核心类型示例

组件类型 输入类型 输出类型
ChatPromptTemplate Dict[str, Any] List[BaseMessage]
ChatOpenAI (LLM) List[BaseMessage] AIMessage
StrOutputParser AIMessage str

参考资料

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

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

相关文章

No.69 Vue---实践--我的网站

一、避坑指南 1.关于路径问题 也不要使用绝对路径 <template><div class="home"><!-- 开始部分 --><div class="signature"><div class="signature-text"><h4 id="hometitle1">在地图上绘制每一次…

Notepad--的安装与使用

Notepad--的安装与使用Notepad--是使用C++编写的轻量级文本编辑器,简称ndd,支持Window/Mac/Linux操作系统平台,还支持国产操作系统如统信Uos、麒麟kinly系统。本文只是概述Notepad--的功能,如果想了解全部的功能可参见官网的ndd说明书 下载与安装 下载地址: https://gitee.…

VirtualBox中的Kylin-Server-10-SP2迁移VMware后开无法进入系统和无网卡的问题记录

问题解决方案来源:https://www.cnblogs.com/flyxuxi/p/15009094.html使用VirtualBox安装Kylin-Server-10-SP2后将磁盘文件使用VMware打开出现无法进入系统和无网卡的问题记录VirtualBox 软件版本:7.1.6 存储 控制器: SATA SATA 端口 1: Kylin-Server-10-SP2-x86-Release-Buil…

地下市政基础设施管理平台:揭秘城市地下的“数字生命线”

2023年,住建部提出“到2025年底前实现综合管理信息平台全覆盖”的目标,标志着我国城市治理正式进入地下空间精细化时代。从道路塌陷到管网泄漏,从内涝预警到地铁安全,地下市政基础设施管理平台如何成为守护城市安全的“数字大脑”?本文带您一探究竟。 一、为何要建地下市政…

Frp内网穿透搭建教学

📌 FRP - Linux & Win 内网穿透教程 手搓难度 ⭐️⭐️🚀 适用于: 本地服务器、电脑、树莓派、香橙派内网穿透 🛠️ 工具:FRP(fast reverse proxy) 🖥️ 系统:Linux、Windows 📚架构:x86、amd、arm 📝Frp版本:v0.61.1 🎯教程日期:2025/2/12📖 目录…

整车销售管理怎么做?4S店整车销售7大模块!

这篇跟大家聊聊4S店整车销售管理到底该怎么做?干这行七八年了,从一线销售爬到区域总监,这里面的门道我总结成七大模块,全是实战干货,看完直接落地用!下述所示整车管理系统>> https://s.fanruan.com/mx0aj 一、系统底层逻辑:四个核心齿轮咬合 1.库存管理是心脏 每天…

CSS 实现滚动条的隐藏但保留滚动功能

CSS 实现滚动条的隐藏但保留滚动功能CSS 实现滚动条的隐藏但保留滚动功能 有几种方法可以在网页中隐藏滚动条但保留滚动功能,以下是常见的实现方式,使用 CSS:使用 ::-webkit-scrollbar(适用于 Webkit 内核浏览器,如 Chrome、Safari)/* 隐藏滚动条但保留滚动功能 */ body …

cccxm

29593138陈晓明

愚人节恶搞代码:系统错误倒计时与节日彩蛋动画

为你的网页增添趣味性和互动性!通过JavaScript轻松创建一个逼真的“系统错误倒计时”画面,结合动态进度条和节日彩蛋动画,为你的用户带来意想不到的惊喜。无论是愚人节还是特殊节日,这段代码都能为你的网站增添一份独特的幽默感和创意。距离愚人节还有一周时间,在这个充满…

RFDN:用于轻量级图像超分辨率的残差特征蒸馏网络

在本文中,我们提出了一种**特征蒸馏连接(feature distillation connection FDC)**,它在功能上等同于通道分裂操作,同时更加轻量级和灵活。多亏了FDC,我们可以重新思考信息**多蒸馏网络(information multi-distillation network IMDN)**,并提出一个轻量级和准确的SISR模…

AI编程的 9 个大坑

原帖:[X@cj_zZZz](x.com) 我每天使用AI工具编程6-7小时。 在过去12个月里开发了超过36个项目。 事实是:用一个提示"给我构建...应用"是不可能的。 所以,以下是你在使用AI编程时可能犯的所有错误: 1. 没有规划 通过我的规划技巧,我能在几小时内从想法到一个写得很…