简介
LCEL是 LangChain Expression Language的缩写
先来做个程序书写的对比,观察一下、使用了Expression Language语法之后更加短小精悍(缩短了一倍长度,更加高级的用法缩短会更多)而且代码看起来更加简单易读。
- 使用EL
1 | javascript复制代码from langchain_community.chat_models import ChatOllama |
- 未使用EL
1 | ini复制代码from langchain_community.chat_models import ChatOllama |
Expression Language是一种将 **Runnable** 组成链 **(Runnables into chains)** 的声明性方式,以这种方式构建的任何链都将自动具有同步、异步、批处理、流支持等等,包含RunnableSequence 和 RunnableParallel两大部分内容。
关于RunnableParallel内容,放到后面再介绍
RunnableSequence:按顺序调用一系列可运行对象,一个可运行对象的输出充当下一个可运行对象的输入,使用管道符号(即“|”)来分割两个对象。
1 | arduino复制代码chain = prompt | model | output_parser |
用一张图简单描绘这流式传输吧:
把上图的组成统一成一个Chain(就是LangChain的“Chain”)
按步骤解析每个可运行对象的处理的过程和内容:
首先, 让我们看一下代码的完整执行过程
程序
1 | ini复制代码from langchain_community.chat_models import ChatOllama |
输出结果
1 | ruby复制代码[chain/start] [1:chain:RunnableSequence] Entering Chain run with input: |
上一个的输出就是下一个的输入
再分析, 整个Pipeline中每一个可运行的对象,其底层的jsonschema逻辑是什么?(绘制了四张思维导图来说明)
还剩余“前后”两个,即:
- 整体Pipeline Chain输入的Schema(即:prompt的输入的json schema)
1 | json复制代码{"title": "PromptInput", |
- 整体Pipeline Chain输出的Schema(即:output_parser的输出的json schema)
1 | json复制代码{"title": "StrOutputParserOutput", "type": "string"} |
To be continue…
本文转载自: 掘金