什么是 LCEL?
LCEL (LangChain Expression Language) 是 LangChain 提供的一种声明式的方式,用于构建复杂的链式调用流程。你可以把它想象成用乐高积木搭建流程,每个积木代表一个组件(比如 LLM、PromptTemplate、输出解析器等),通过 LCEL,你可以像拼积木一样把它们连接起来,形成一个完整的流程。
LCEL 的优势:
- 简洁易懂: 使用声明式语法,代码更清晰,易于理解和维护。
- 灵活性强: 可以轻松地组合各种组件,构建复杂的流程。
- 可扩展性好: 方便添加、删除或修改流程中的组件。
- 流式处理: 支持流式输出,可以更快地看到结果。
- 并行处理: 可以并行执行流程中的某些步骤,提高效率。
LCEL 的核心概念:
- Runnable: LCEL 的核心接口,表示可以被调用的对象。LangChain 中的大多数组件(如 LLM、PromptTemplate、输出解析器等)都实现了 Runnable 接口。
- Pipe Operator (|): 管道操作符,用于连接 Runnable 对象,表示将前一个 Runnable 的输出作为后一个 Runnable 的输入。
- RunnableSequence: 由多个 Runnable 对象通过管道操作符连接而成的序列。
- RunnableParallel: 并行执行多个 Runnable 对象。
- RunnablePassthrough: 将输入原封不动地传递给下一个 Runnable 对象。
- RunnableLambda: 允许你将一个 Python 函数包装成 Runnable 对象。
LCEL 的基本用法:
-
导入必要的模块:
from langchain.prompts import PromptTemplate from langchain.llms import OpenAI from langchain.chains import LLMChain from langchain.schema import StrOutputParser
-
创建 Runnable 对象:
-
PromptTemplate: 用于创建提示词模板。
prompt = PromptTemplate.from_template("请用{language}写一个关于{topic}的故事。")
-
LLM: 用于调用大型语言模型。
llm = OpenAI(temperature=0.7) # temperature 控制生成文本的随机性
-
StrOutputParser: 将 LLM 的输出转换为字符串。
output_parser = StrOutputParser()
-
RunnableLambda: 将 Python 函数包装成 Runnable 对象。
def format_output(text): return f"**故事:**\n{ text}" formatter = RunnableLambda(format_output)
-
-
使用管道操作符 (|) 连接 Runnable 对象:
chain = prompt | llm | output_parser