学习记录02——langChain : Runnable

在 LangChain 的语境下,Runnable 是 LCEL 世界里最基本的"积木块" 。它是 LangChain 定义的一整套标准接口(协议),核心思想就一句话:

只要一个对象实现了 Runnable 协议,它就能用 | 管道符和别的组件无缝连接,并且自动获得异步、流式、批处理等能力。

可以把它理解成 Java 里的 Runnable 接口,或者更贴切地说是 TypeScript 里的 interface------它规定了所有组件必须遵守的一套标准动作:

  • invoke:处理单个输入,返回单个输出(同步)
  • ainvoke:处理单个输入,返回单个输出(异步)
  • batch:处理一批输入,返回一批输出(并行)
  • stream:处理单个输入,以流的方式逐步返回输出
  • astream:流式返回 + 异步
  • 等等...

为什么需要 Runnable?

你之前写的链里,每个组件(prompt、self._llm、JsonOutputParser)底层都实现了 Runnable 协议。这就像 USB 接口标准一样:

  • 如果没有标准:每个设备都有自己的接口,你得用不同的线、不同的驱动才能连起来。
  • 有了标准:任何设备只要符合 USB 标准,用同一根线就能连上。

Runnable 就是这个"USB 标准"。正因为它们都实现了同一个协议,所以 LCEL 才能用 | 把它们串起来,并确保数据能在它们之间顺利流通。


代码长什么样?

你不需要自己去实现 Runnable,但了解它的结构能让你理解一切为何能这么运作。它大致长这样:

python 复制代码
class Runnable(ABC):
    @abstractmethod
    def invoke(self, input, config=None):
        """处理单个输入,返回输出"""
        pass

    async def ainvoke(self, input, config=None):
        """异步版 invoke"""
        pass

    def batch(self, inputs, config=None):
        """批量处理多个输入"""
        pass

    def stream(self, input, config=None):
        """流式返回"""
        pass

    # ... 还有其他方法

ChatPromptTemplate、ChatOpenAI、StrOutputParser、JsonOutputParser 这些类都继承并实现了上面这些方法。所以它们都是 Runnable。


Runnable 的核心思想:统一接口 + 能力自动继承

这是 Runnable 最强大的地方。一旦你的链(它本身也是一个 Runnable)拼好之后,不需要额外写一行代码,就能直接调用所有标准方法:

python 复制代码
chain = prompt | llm | parser   # chain 本身也是一个 Runnable

# 所有这些都是开箱即用的,不用你为 chain 单独实现
result = chain.invoke({"topic": "cat"})          # 同步单次
result = await chain.ainvoke({"topic": "cat"})   # 异步单次
results = chain.batch([{"topic": "cat"}, {"topic": "dog"}])  # 批量并行
for chunk in chain.stream({"topic": "cat"}):     # 流式输出
    print(chunk)

总结一句话:Runnable 就是 LangChain 定义的一套标准积木接口,所有组件都遵循它。LCEL 的 | 管道符只能连接符合这个标准的积木。当它们连成链后,这条链本身也是一块同样标准的积木,从而自动拥有了各种强大的执行能力。

相关推荐
一木 之林3 小时前
RAG开发学习总结:从 LangChain 入门到检索增强生成链路的全栈实战-4/6
人工智能·学习·计算机视觉·langchain
制造数据与AI践行者老蒋5 小时前
排坑笔记:LangChain 1.x API 迁移:create_react_agent 与 ChatOllama 导入错误完整解决方案
langchain·依赖管理·importerror·agent开发·ai开发环境·排坑笔记·版本兼容
桃西西呀5 小时前
LangChain 之八:流式与透传
人工智能·langchain·llm
桃西西呀5 小时前
LangChain 之九:一个能检索又会调工具的流式问答助手
人工智能·langchain·llm
10年前端老司机8 小时前
LangChain 五种工具定义方式踩坑总结
python·langchain·llm
Maiko Star10 小时前
* LangChain 短期记忆:上下文与记忆入门、持久化与记忆治理
人工智能·langchain
狼爷21 小时前
从零用 Java 构建 AI Agent 框架:JavaManus 设计与实现深度解析
后端·langchain·aigc
桃西西呀1 天前
LangChain 之七:回调与可观测
人工智能·langchain·llm
桃西西呀1 天前
LangChain 之六:记忆与历史
人工智能·langchain·llm
打工仔折腾 AI1 天前
把AI Agent托管在家用电脑:UU远程终端与端口映射实测记录
人工智能·后端·python·langchain·ai agent 实战