Chains 与 LCEL:链式组合的艺术
掌握 LangChain Expression Language(LCEL),用管道符把组件组装成可流式、可并行的链。
LCEL 是什么
LCEL(LangChain Expression Language)是 LangChain 的组合语法:用 | 把组件像管道一样串起来。最经典的形态:
chain = prompt | llm | parser
result = chain.invoke({"topic": "量子计算"})
等价于依次执行:渲染提示词 → 调用模型 → 解析输出。
为什么用 LCEL 而不是手写函数
所有 LCEL 组件都实现自 Runnable 协议,天然获得这些能力:
- stream:流式输出(逐 token 返回);
- batch:并发批量调用;
- ainvoke:异步执行;
- fallbacks:主模型失败自动切换备用模型。
常用组合子
from langchain_core.runnables import RunnableParallel, RunnablePassthrough
# 并行分支:同一输入同时走两条链
parallel = RunnableParallel(joke=joke_chain, poem=poem_chain)
# 透传:把输入原样传给下一步(RAG 中常用)
chain = RunnablePassthrough.assign(context=retriever) | prompt | llm
一个完整例子
from langchain_core.output_parsers import StrOutputParser
prompt = ChatPromptTemplate.from_template("给关于{topic}的一句话说一个冷笑话")
chain = prompt | llm | StrOutputParser()
for chunk in chain.stream({"topic": "程序员"}):
print(chunk, end="", flush=True)
📝 课后练习
quiz-1 LCEL 中 prompt | llm | parser 的管道符表示?