当前位置: 首页 > news >正文

RunnableLambda

在 LangChain 中,RunnableLambda 是一个工具类,用于将普通的 Python 函数或可调用对象(callable) 转换为符合 Runnable 接口的对象。这使得普通函数可以无缝融入 LangChain 的工作流系统,与其他 Runnable 组件(如 LLM 模型、检索器、工具调用等)进行链式组合、并行执行等操作。

为什么需要 RunnableLambda

LangChain 中的核心工作流(如链式调用、Agent 逻辑、RAG 流程等)依赖于统一的 Runnable 接口。这个接口定义了一套标准方法(如 invoke 同步调用、ainvoke 异步调用、stream 流式输出等),确保不同组件能互相协作。

普通函数本身并不遵循这个接口,无法直接参与这些工作流。而 RunnableLambda 的作用就是给普通函数“套一层壳”,让它具备 Runnable 接口的能力,从而可以和其他 LangChain 组件(如 ChatOpenAIRetriever 等)通过 | 运算符组合成复杂流程。

结合你的例子理解

你的代码中:

from langchain_core.runnables import RunnableLambda
from langchain_core.documents import Document
from typing import List# 定义一个普通函数:格式化文档列表为字符串
def format_docs(docs: List[Document]) -> str:'''Format the docs.'''return ", ".join([doc.page_content for doc in docs])# 用 RunnableLambda 包装函数,使其成为 Runnable 对象
format_docs = RunnableLambda(format_docs)

包装后,format_docs 就从普通函数变成了 Runnable 对象,获得了以下能力:

  1. 支持标准调用方法

    • 可以用 format_docs.invoke([doc1, doc2]) 调用(替代直接 format_docs([doc1, doc2]));
    • 支持异步调用 await format_docs.ainvoke([doc1, doc2])
    • 支持流式输出(如果函数逻辑适合)。
  2. 可与其他 Runnable 组合
    例如在 RAG 流程中,可将“检索文档”→“格式化文档”→“传给 LLM 生成回答”串联起来:

    from langchain.chat_models import ChatOpenAI
    from langchain.retrievers import VectorstoreRetriever# 假设已有检索器和LLM
    retriever = VectorstoreRetriever(...)  # 检索文档的 Runnable
    llm = ChatOpenAI(...)  # 生成回答的 Runnable# 组合成完整流程:检索 → 格式化 → 生成
    rag_chain = retriever | format_docs | llm# 执行流程
    result = rag_chain.invoke("用户的问题")
    

    这里的 | 运算符是 LangChain 中 Runnable 组合的语法,只有实现了 Runnable 接口的对象才能这样使用。

总结

RunnableLambda 的核心作用是**“适配”**:将普通函数转换为 LangChain 工作流体系中的标准组件(Runnable),从而让这些函数能够参与复杂的链式调用、异步处理等高级流程。这在构建结构化的 LLM 应用(如 RAG、Agent)时非常有用,能大幅提升代码的可组合性和扩展性。

http://www.dtcms.com/a/398702.html

相关文章:

  • 记录一次windows资源管理器崩溃,任务栏无法打开任何软件
  • 【开题答辩过程】以《基于SSM框架的植物园管理系统的实现与设计》为例,不会开题答辩的可以进来看看
  • 浅拷贝与深拷贝的区别?
  • python免费自学网站做网站的作品思路及步骤
  • PyTorch 构建神经网络
  • 人工智能医疗系统灰度上线与评估:技术框架实践分析python版(下)
  • 网站推广费用一般多少钱设计工作室logo
  • Eclipse配置tomcat+创建javaweb项目
  • 做国际网站找阿里西安市今天发生的重大新闻
  • 深圳工程建设交易服务中心网站郑州做网站zzmshl
  • Flink-SQL通过过滤-解析-去重-聚合计算写入到MySQL表
  • 公司网站建设记哪个科目网站建设对企业的要求
  • 汕头网页设计制作金华seo扣费
  • Vue电商数据分析大屏开发
  • 【开题答辩全过程】以 bilibili排行榜的数据分析与可视化为例,包含答辩的问题和答案
  • AI性能对决!蓝耘MaaS平台在2025大模型测评中如何脱颖而出
  • 新能源知识库(109)什么是频率死区?
  • Linux开发——开发板介绍及裸机程序设计
  • 百度网站推广关键词怎么查凡科微信小程序怎么样
  • 定制网站开发接活wordpress固定链接设置技巧
  • HTTP代理HTTP(S)、SOCKS5有哪些作用?
  • vue3+TS 前端调用海康摄像头视频流,后端用 Node.js 做 RTSP 转 WebSocket-FLV 转发,并且前后端优化延迟方案
  • 计算机视觉(opencv)练习——抠图(图像裁剪与轮廓提取)
  • 网站建设知识点的总结怎么做网站一个平台
  • 西安做网站的在网站后台设置wap模板目录
  • 软件行业|Parasoft与IAR的嵌入式DevOps测试集成
  • 设计模式-状态模式详解
  • 微信小程序通用弹窗组件封装与动画实现
  • 「日拱一码」099 数据处理——降维
  • 速通ACM省铜第十三天 赋源码(Watermelon)