Runnable 与 LCEL:LangChain 的"管道语言"
LangChain 的核心不是那些花哨组件,而是一个只有三个方法的接口——Runnable:invoke(单次)、batch(批量并行)、stream(流式)。LangChain 的每个组件都实现这三个方法。LCEL 用 | 管道符把它们串起来,编译成一棵可执行的 Runnable 树。换句话说,LangChain 本质上是一个 Runnable 编排引擎,LLM 调用只是它编排的一种资源。这也是 Agent 循环(与 02/02B 呼应)能声明式描述的基础。
1x2x
待播放
调用不统一 → 编排散落 → Runnable 统一协议 → LCEL | 编译执行树 → invoke 沿树执行 → 六种子类各解决一个问题
Runnable
invoke/batch/stream
光点 = 当前环节 · LangChain = Runnable 编排引擎,LLM 只是其中一种资源
Runnable 接口:三方法两个维度—
invoke单次同步调用(写一个 _invoke 基类自动配齐其余)
batch批量并行(list 输入 → list 输出)
stream流式输出(生产环境主力 astream)
RunnableSequence串行管道:A → B → C(first/middle/last)
RunnableParallel并行分支:A 和 B 同事件循环并发
RunnableBranch条件路由:if/elif/else 的 Runnable 版
就绪点 ▶ 播放,看"三动机 → Runnable → LCEL 编译 → 沿树执行"的完整推导。LCEL 管道
⚡ 运行时动作:正在发生什么💡 知识讲解:为什么这么设计
知识点一句话总结:LangChain 核心不是组件,而是 Runnable 接口 + LCEL 管道。三个动机推导:① 组件调用方式不统一 → 统一协议 Runnable;② 编排散落业务逻辑 → 声明式管道 LCEL(| 操作符);③ 同一编排要支持三种模式 → 协议内建 invoke / batch / stream(模板方法模式:实现一个 _invoke,基类自动配齐 batch/stream/abatch/astream)。prompt | llm | parser 编译成 RunnableSequence 执行树(first/middle/last 分开是为了流式优化:只对 last 启流式);invoke 沿树逐个调用,每个输出是下一个输入,RunnableConfig(callbacks/tags/metadata)全链路透传。六种子类各解决一个问题:Sequence 串行 / Parallel 并行(asyncio 协程并发,同步阻塞会拖慢)/ Branch 条件路由 / Lambda 包函数 / Passthrough 透传 / Binding 预绑定参数。本质:LangChain 是 Runnable 编排引擎,LLM 调用只是它编排的一种资源。