在《【chatGPT】学习笔记29-LangChain解读1-快速入门》中,我们学习了LangChain的入门文档,了解到LangChain的模块化组件和链让开发LLM应用变得简单。

同时,LangChain还推出了自己的语法——LCEL(LangChain表达式语言),让复杂的组合链变得更简单。

本篇我们跟着官方文档来学习LCEL的概念及如何使用。

image-20231208175706824

1. LCEL概览

(1)什么是LCEL

LCEL是LangChain表达式语言(LangChain Expression Language)的缩写,是LangChain官方推出的一种新的语法,它提供了一种声明式的方法(而不是编写普通代码)来组合链,简化了构建复杂LLM应用的过程。

(2)为什么要用LCEL

  • 声明式编程:由于LLM强大的理解和生成能力,LLM应用开发侧重业务逻辑的编排,LCEL提供的声明式编程方法让这类操作更高效。

  • 统一接口:LCEL中实现了“Runnable”协议,每个LCEL 对象都应用了“Runnable”接口。

    • 该接口定义了一组通用的调用方法(invokebatchstreamainvoke…),因此采用LCEL构建的任何链都将自动支持流、同步、异步和批处理等能力。
  • 组合原语:LCEL 提供了许多原语,可以轻松组合链、并行化组件、添加回退、动态配置链内部等。

为了更好地理解 LCEL,我们将分期介绍这些能力和实际应用效果。本篇我们先从看看如何用LCEL的声明式方法来组合业务组件和链。

2.快速上手LCEL

以让LLM生成文本为例,来看看如何使用LCEL来完成任务。

环境准备请参考《【chatGPT】学习笔记29-LangChain解读1-快速入门》。

STEP1.构造三组件

我们在LangChain快速入门中学习过,一个常见的链包括三个组件:提示词模板、模型、输出解析器

使用LangChain的方法构建如下——任务是给某个人或物写一句表扬的话:

image-20231210112756607

STEP2.构建自定义链

使用LCEL语法,用上面的3个组件组合成链,代码如下:

image-20231210113216116

你会发现,LCEL用|把不同组件链接在一起,该符号类似于unix的管道运算符,将一个组件的输出作为下一个组件的输入。

STEP3.调用链

LCEL这种表达式方法是有效呢,我们调用一下看看。

image-20231210113642196

让链工作的方法也很简单,使用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