核心篇 EP.02
LCEL 链式调用 — LangChain 声明式编程
在 GitHub 编辑此页LangChain Expression Language(LCEL)是 LangChain 的声明式编程范式。通过
|管道符将组件串联起来,构建清晰的数据流。
从 Prompt 到输出的流水线
LCEL 的核心思想是”管道”——上一个组件的输出自动成为下一个组件的输入:
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
llm = ChatOpenAI(
model="deepseek-v4-flash",
api_key="sk-你的密钥",
base_url="https://dualseason.com/v1"
)
prompt = ChatPromptTemplate.from_template(
"用{language}写一个{task}函数"
)
chain = prompt | llm | StrOutputParser()
result = chain.invoke({
"language": "Python",
"task": "快速排序"
})
print(result)
这个简单的链做了三件事:
prompt:将模板和变量组合成完整的提示llm:将提示发送给模型StrOutputParser:从模型响应中提取文本
并行调用
LCEL 的 RunnableParallel 可以同时执行多个分支:
from langchain_core.runnables import RunnableParallel
prompt1 = ChatPromptTemplate.from_template("翻译成英文: {text}")
prompt2 = ChatPromptTemplate.from_template("翻译成日文: {text}")
chain1 = prompt1 | llm | StrOutputParser()
chain2 = prompt2 | llm | StrOutputParser()
parallel = RunnableParallel(en=chain1, ja=chain2)
result = parallel.invoke({"text": "人工智能正在改变世界"})
print(f"英文: {result['en']}")
print(f"日文: {result['ja']}")
Chain 组合
你可以将多个 Chain 组合成一个更大的 Chain——一个 Chain 的输出作为下一个 Chain 的输入:
prompt_en = ChatPromptTemplate.from_template("翻译成英文: {topic}")
prompt_funny = ChatPromptTemplate.from_template("用幽默的方式解释: {text}")
chain = (
{"text": prompt_en | llm | StrOutputParser()}
| prompt_funny
| llm
| StrOutputParser()
)
result = chain.invoke({"topic": "机器学习"})
print(result)
这里先将 topic 翻译成英文,再把英文结果用幽默方式解释。
小结
LCEL 是 LangChain 的基石。理解 | 管道和 RunnableParallel 后,你已经掌握了构建复杂 LLM 应用的基本方法。下一章我们在此基础上添加工具调用能力。