LCEL 链式编程:用管道符把 Prompt、模型和解析器串成一条链

LCEL 链式编程:用管道符把 Prompt、模型和解析器串成一条链

脱敏说明:本文为 LangChain 基础教学项目的总结,示例全部采用通用模型与 OpenAI 兼容协议,不出现任何特定厂商名称。

一、什么是 LCEL

LCEL(LangChain Expression Language)是 LangChain 提供的声明式组合语法。最直观的形式就是管道符:

python 复制代码
chain = prompt | llm | parser

数据从左向右流动:用户输入填进模板 → 模板生成消息 → 模型推理 → 解析器提取结果。它解决的是"胶水代码"问题------不用再手写"取变量、拼消息、调模型、解析字符串"这一整套重复流程。

最小示例:

python 复制代码
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

prompt = ChatPromptTemplate.from_template("用一句话解释 {topic},面向零基础读者")
chain = prompt | llm | StrOutputParser()

print(chain.invoke({"topic": "向量数据库"}))

二、声明式带来的四个"免费"能力

同一条链不改代码就可以切换调用方式:

能力 用法 场景
同步调用 chain.invoke(input) 脚本、普通请求
流式输出 chain.stream(input) 打字机效果,降低首字等待
批量处理 chain.batch([...]) 批量分类、提取,内部带并发优化
异步调用 await chain.ainvoke(input) 异步 Web 服务

此外,LCEL 链自带回调挂载点(可观测性、计费、日志统一接入)和并行执行支持:

python 复制代码
from langchain_core.runnables import RunnableParallel

parallel = RunnableParallel(
    summary=summary_chain,
    keywords=keyword_chain,
    sentiment=sentiment_chain,
)
# 三个子链并行执行,总耗时约等于最慢的一支

三、消息历史:给链装上"记忆"

多轮对话不能每次把历史拼在字符串里。框架提供带历史的 Runnable 封装:

python 复制代码
from langchain_core.runnables.history import RunnableWithMessageHistory

chain_with_history = RunnableWithMessageHistory(
    chain,
    get_session_history,          # 根据会话 ID 返回历史消息
    input_messages_key="input",
    history_messages_key="history",
)

chain_with_history.invoke(
    {"input": "接着上一个问题再展开讲讲"},
    config={"configurable": {"session_id": "user-001"}},
)

会话隔离靠 session_id:不同用户、不同会话拿到不同的历史存储。教学项目特别强调这一点------并发场景下记忆串号是严重事故。

四、教学脚本的进阶路线

基础教学项目用 20 个脚本组织了一条平滑的学习曲线,核心节点如下:

  1. LCEL 基础链与流式
  2. Pydantic 结构化输出(从聊天文本提取销售线索)
  3. 消息历史与会话隔离
  4. Agent + 工具调用(仓库助理场景)
  5. RAG:文档加载 → 切分 → 轻量向量库 → 检索 → 链生成
  6. 简单 Web 应用

这条路线的编排思想值得借鉴:每一步只引入一个新概念,并立刻可运行。

五、LCEL 的适用边界

LCEL 擅长表达"可管道化的数据流",但不适合:

  • 路径需要动态分支、回环(用图编排,而不是硬把分支塞进链)
  • 强人工干预、长期挂起的流程(HITL 是图框架的地盘)
  • 高度定制的 Agent 循环(直接用标准 Agent 工厂)

一个经验判断:流程能画成"一条直线(可有并行支流)"用链,需要"带条件的环"用图。

六、技术演进与最新差异(2025---2026)

这是本文最重要的部分------LCEL 教学内容大多写于 0.1/0.2 时代,而 2025 年 10 月后生态发生了代际变化:

  1. LangChain 1.0 正式 GA(2025-10-23)。 框架重心从"链"转向"Agent":create_agent 成为最高层标准入口,底层运行在 LangGraph 之上。LCEL 并没有消失(Runnable、管道组合仍是底层组装原语),但"用 LCEL 手工拼 RAG 链"不再是官方推荐的首要路径------很多场景被 Agent + 中间件 + 内置 RAG 工具取代。
  2. 旧功能迁移到 langchain-classic。 1.0 精简了命名空间,大量遗留链和旧集成移到独立的 classic 包。老教程里的部分导入路径需要调整;官方提供完整迁移指南。
  3. 版本支持窗口明确。 LangChain 0.3 处于维护模式,支持到 2026 年 12 月(安全补丁 + 关键修复);1.x 是 LTS,2.0 发布前无破坏性变更。如果还在 0.3 上,应在窗口期内规划升级。
  4. 标准内容块(content blocks)。 1.0 新增跨厂商统一的 content blocks 抽象,推理痕迹、引用、服务端工具调用等现代模型能力可以用一致方式访问------过去靠厂商私有字段(如某些模型的 reasoning_content)处理的逻辑,有了标准接口。
  5. 结构化输出集成进 Agent 主循环,不再需要"链式 + 输出解析器"的传统拼装(后续文章专讲)。

七、小结

LCEL 值得学的是它的声明式组合思想 :管道符让数据流一目了然,invoke/stream/batch/async 四态免费切换,RunnableParallel 表达并行,消息历史靠 session ID 隔离。但在 2026 年使用时要带着版本意识:它已从"主角"变为 Agent 体系的底层组装原语,新项目优先评估 LangChain 1.0 的 create_agent,把 LCEL 作为理解框架和定制局部逻辑的基础。

相关推荐
全栈弄潮儿1 小时前
AI 辅助写单测:如何覆盖边界,而不是凑覆盖率
aigc·openai·ai编程
woodfood1111 小时前
测试全绿,真机翻车:写 DSH 插件踩的三个坑
aigc
小虎AI生活1 小时前
助残场景下的AI培训落地,从截图、课件到台账,我总结的四条可复用经验
aigc·ai编程
ServBay1 小时前
2分钟上手,如何极速接入 Claude Opus 5.5
aigc·ai编程·claude
Behavior1 小时前
Jev 是什么:一个不生成文本的模型,「零幻觉」到底指什么
llm·aigc·ai编程
Csvn1 小时前
第 24 章 参数体系与调优
人工智能·aigc·agent
后端小肥肠1 小时前
我做了个 Skill,一句话生成小程序原型,需求文档都帮你写好了
人工智能·aigc·agent
全栈弄潮儿1 小时前
不要把报错直接丢给 AI:正确的排障上下文长什么样
aigc·openai·ai编程
flash俊杰1 小时前
让大模型稳定吐出 JSON:结构化输出的五种姿势与工程兜底
aigc·openai·ai编程