什么是 RunnableLambda?—— 普通函数的'LangChain 通行证'
在之前的文章中,我们学习了 LangChain 的**链(Chain)**是由多个 Runnable 对象通过 | 符号组合而成的(比如 PromptTemplate | ChatModel | OutputParser)。但如果我们想在链中插入自己写的普通 Python 函数(比如数据清洗、日志记录、调用外部 API),直接放进去会报错——因为普通函数不遵守 Runnable 协议,无法被 LangChain 的链识别和调用。
这时候,RunnableLambda 就派上用场了!
它的核心定位是:将任意 Python 函数/可调用对象,快速转换为符合 LangChain Runnable 协议的对象,让普通函数拥有'通行证',无缝融入 LCEL(LangChain Expression Language)链中。
1.1 核心设计初衷
- 解决'普通函数无法接入 LangChain 链'的痛点
- 无需复杂封装,一行代码实现函数与 LangChain 生态的兼容
- 支持自定义逻辑(日志、数据处理、外部系统调用)的灵活插入
1.2 类定义简化理解
from langchain_core.runnables import RunnableLambda
# 本质:包装一个函数,让它继承 Runnable 的所有能力
class RunnableLambda(Runnable[Input, Output]):
def __init__(self, func: Callable[[Input], Output]):
self.func = func # 传入的普通函数
# 实现 Runnable 的核心方法(invoke/batch/ainvoke 等)
def invoke(self, input: Input, config=None) -> Output:
return self.func(input) # 调用原始函数并返回结果
简单说:RunnableLambda 就是一个'包装器',把普通函数包一层,让它拥有 invoke、batch、ainvoke 等 Runnable 的核心能力。
2. 核心功能与价值——为什么需要 RunnableLambda?
RunnableLambda 的价值不在于'创造新功能',而在于'打通兼容性',它的核心功能可以总结为 3 点:
| 核心功能 | 具体说明 | 应用场景 |
|---|


