在《【chatGPT】学习笔记29-LangChain解读1-快速入门》中,我们学习了LangChain的入门文档,了解到LangChain的模块化组件和链让开发LLM应用变得简单。
同时,LangChain还推出了自己的语法——LCEL(LangChain表达式语言),让复杂的组合链变得更简单。
本篇我们跟着官方文档来学习LCEL的概念及如何使用。
1. LCEL概览
(1)什么是LCEL
LCEL是LangChain表达式语言(LangChain Expression Language)的缩写,是LangChain官方推出的一种新的语法,它提供了一种声明式的方法(而不是编写普通代码)来组合链,简化了构建复杂LLM应用的过程。
(2)为什么要用LCEL
声明式编程:由于LLM强大的理解和生成能力,LLM应用开发侧重业务逻辑的编排,LCEL提供的声明式编程方法让这类操作更高效。
统一接口:LCEL中实现了“Runnable”协议,每个LCEL 对象都应用了“Runnable”接口。
- 该接口定义了一组通用的调用方法(
invoke
、batch
、stream
、ainvoke
…),因此采用LCEL构建的任何链都将自动支持流、同步、异步和批处理等能力。
- 该接口定义了一组通用的调用方法(
组合原语:LCEL 提供了许多原语,可以轻松组合链、并行化组件、添加回退、动态配置链内部等。
为了更好地理解 LCEL,我们将分期介绍这些能力和实际应用效果。本篇我们先从看看如何用LCEL的声明式方法来组合业务组件和链。
2.快速上手LCEL
以让LLM生成文本为例,来看看如何使用LCEL来完成任务。
环境准备请参考《【chatGPT】学习笔记29-LangChain解读1-快速入门》。
STEP1.构造三组件
我们在LangChain快速入门中学习过,一个常见的链包括三个组件:提示词模板、模型、输出解析器。
使用LangChain的方法构建如下——任务是给某个人或物写一句表扬的话:
STEP2.构建自定义链
使用LCEL语法,用上面的3个组件组合成链,代码如下:
你会发现,LCEL用|
把不同组件链接在一起,该符号类似于unix的管道运算符,将一个组件的输出作为下一个组件的输入。
STEP3.调用链
LCEL这种表达式方法是有效呢,我们调用一下看看。
让链工作的方法也很简单,使用Runnable
接口的invoke
方法,传入主题字符串,任务就完成了。
从上面的示例,我们可以看到LCEL的运作流程如下:
- 传入用户输入,为提示词模板中的变量赋值。本例中是山姆奥特曼,则格式为{“topic”: “山姆奥特曼”}。
prompt
获取用户输入,并使用"topic"构建提示词。model
组件拿到生成的提示词,并传递给LLM模型进行处理。模型生成的输出是一个ChatMessage
对象。- 最后,
output_parser
组件接收ChatMessage
并将其转换为 Python 字符串,该字符串通过 invoke 方法返回。
3.小结
本文解读了LangChain官方文档的“LangChain Expression Language (LCEL)”的部分章节,关键要点如下:
LCEL概览
LCEL是LangChain官方推出的一种声明式编程语法,让构建复杂LLM应用变得更简单。
LCEL的主要价值点:
- 声明式编程方法,便于组件和链的编排。
- 统一接口,每个LCEL 对象都应用了“Runnable”接口。
- 组合原语。
实例演示
- 构造链的组件。
- LCEL使用
|
把不同的组件组合成链。 - 使用invoke方法调用链,完成任务。
参考文档:翻译的LangChain官方文档
- 翻译链接:https://jherculesqz.gitbook.io/langchain-guan-fang-wen-dang