核心概念 中级

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 的管道符表示?