1. LangChain 中的 Runnable 设计哲学
LangChain 框架将复杂 AI 应用拆解为可组合的原子单元,Runnable 接口正是这种设计思想的集中体现。作为框架最基础的抽象层,任何具备输入输出处理能力的组件都可以实现 Runnable 接口——无论是简单的文本转换工具,还是复杂的 LLM 调用链。
在最新版本(0.1.0 以上)的架构设计中,Runnable 通过统一的 invoke()/batch() 方法规范了组件行为。这种设计带来三个显著优势:
- 标准化交互:不同复杂度的组件(Prompt模板/LLM模型/输出解析器)对外暴露相同调用接口
- 组合自由度:通过 pipe 运算符(|)实现可视化流程编排
- 执行优化:框架可自动处理异步调用、批量处理等底层优化
提示:实际开发中建议优先继承 RunnableLambda 而非直接实现 Runnable 接口,可自动获得流式处理等扩展能力
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心源码结构解析
2.1 接口定义与继承体系
在 langchain_core/runnables/base.py 中,Runnable 被定义为 Protocol 类型(Python 3.8+ 特性),关键方法包括:
python复制class Runnable(Generic[Input, Output], Protocol):
def invoke(self, input: Input, config: Optional[RunnableConfig] = None) -> Output:
...
def batch(self, inputs: List[Input], config: Optional[Union[RunnableConfig, List[RunnableConfig]]] = None) -> List[Output]:
...
@property
def InputType(self) -> Type[Input]:
...
@property
def OutputType(self) -> Type[Output]:
