LangChain教程:RunnablePassthrough的使用 作者:马育民 • 2026-03-05 10:37 • 阅读:10008 # 介绍 `RunnablePassthrough` 是 LangChain 中 `Runnable` 接口的实现类,核心作用是: 1. **透传数据**:不修改输入,直接将输入原样传递到下一个环节; 2. **增强数据**:在透传的同时,新增/修改部分字段(比如补充上下文、格式化数据); 3. **适配链式调用**:兼容 LangChain 的 `invoke()`/`stream()`/`batch()` 等核心方法,无缝融入链式流程。 它常和 `RunnableParallel`、`RunnableSequence` 配合使用,解决链式调用中“数据传递/重组”的问题。 # 常用方法 | 方法 | 作用 | |---------------|----------------------------------------------------------------------| | `invoke(input)` | 同步调用,接收输入数据,返回透传/增强后的数据 | | `stream(input)` | 流式调用,返回数据迭代器(适合大模型流式输出场景) | | `assign(**kwargs)` | 新增字段,`kwargs` 的值可以是固定值或函数(函数接收输入数据并返回结果) | | `pick(*keys)` | 只透传指定的字段(比如只传递"question",过滤其他无关字段) | # 透传数据 ```python from langchain_core.runnables import RunnablePassthrough # 初始化透传组件 passthrough = RunnablePassthrough() # 调用invoke,输入会被原样返回 result = passthrough.invoke({"question": "什么是RunnablePassthrough?"}) print(result) ``` ##### 执行结果 ``` {'question': '什么是RunnablePassthrough?'} ``` # 增强数据(透传+新增字段) 通过 `assign()` 方法可以在透传原有数据的同时,新增字段: ```python from langchain_core.runnables import RunnablePassthrough # 透传原有输入,并新增"context"字段 enhanced_passthrough = RunnablePassthrough.assign( context=lambda x: f"用户问题:{x['question']},回答需简洁易懂" ) # 调用测试 result = enhanced_passthrough.invoke({"question": "什么是RunnablePassthrough?"}) print(result) ``` ##### 执行结果 ``` # 输出: { 'question': '什么是RunnablePassthrough?', 'context': '用户问题:什么是RunnablePassthrough?,回答需简洁易懂' } ``` # 链式调用 最常见的场景是“检索+生成”(RAG)中,透传问题并拼接检索到的上下文: ```python from langchain_core.prompts import ChatPromptTemplate from langchain_core.runnables import RunnablePassthrough data = { "quest": RunnablePassthrough(), # 相当于占位符 } # 定义模板 prompt = ChatPromptTemplate.from_messages([ ("human", "用户提问:{quest}") ]) # 组成链 chain = data | prompt question = "25年报告概述" # 把参数request替换掉 RunnablePassthrough() res = chain.invoke(question) print("结果:", res) ``` ##### 执行结果 ``` 结果: messages=[HumanMessage(content='用户提问:25年报告概述', additional_kwargs={}, response_metadata={})] ``` 原文出处:http://malaoshi.top/show_1GW2tCQh1FTj.html