美文网首页
RunnablePassthrough

RunnablePassthrough

作者: 阿凡提说AI | 来源:发表于2026-03-14 08:06 被阅读0次

    RunnablePassthrough 是 LangChain 框架中一个非常实用的基础组件,核心作用是透传输入数据基于输入数据生成新的输出,常与其他 Runnable(如提示词模板、LLM 模型)配合使用,是构建复杂链(Chain)的关键工具。

    一、核心概念(新手友好版)

    可以把 RunnablePassthrough 理解成一个“数据中转站”:

    • 基础用法:原封不动地把输入数据传给下一个组件(比如模型);
    • 进阶用法:在透传的同时,对输入数据做简单加工(比如新增字段、修改字段值)。

    它的核心价值是解决“输入数据格式不匹配”的问题——比如模型需要 {"question": "...", "context": "..."} 格式,但原始输入只有 {"question": "..."},就可以用 RunnablePassthrough 补充 context 字段。

    二、基础用法(直接透传)

    1. 纯透传(无加工)

    适用于输入数据格式已经满足下一个组件要求的场景,代码可直接运行(需先安装 LangChain):

    # 第一步:安装依赖(如果未安装)
    # pip install langchain
    
    # 第二步:核心代码
    from langchain_core.runnables import RunnablePassthrough
    
    # 初始化 RunnablePassthrough 实例
    passthrough = RunnablePassthrough()
    
    # 测试:输入什么,输出就是什么
    input_data = {"question": "什么是 RunnablePassthrough?"}
    output = passthrough.invoke(input_data)
    
    print(output)
    # 输出结果:{'question': '什么是 RunnablePassthrough?'}
    

    2. 配合 LLM 实现“输入透传+模型调用”

    这是最常见的场景:透传用户输入,拼接提示词后调用模型。

    from langchain_core.prompts import ChatPromptTemplate
    from langchain_openai import ChatOpenAI  # 需安装:pip install langchain-openai
    from langchain_core.runnables import RunnablePassthrough
    
    # 1. 初始化模型(需配置 OpenAI API Key,或替换为其他模型如 ChatAnthropic)
    import os
    os.environ["OPENAI_API_KEY"] = "你的 OpenAI API Key"
    llm = ChatOpenAI(model="gpt-3.5-turbo")
    
    # 2. 定义提示词模板(需要接收 "question" 字段)
    prompt = ChatPromptTemplate.from_template("请用简单的语言解释:{question}")
    
    # 3. 构建链:透传输入 → 拼接提示词 → 调用模型
    chain = RunnablePassthrough() | prompt | llm
    
    # 4. 调用链
    result = chain.invoke({"question": "什么是 RunnablePassthrough?"})
    print(result.content)
    # 输出示例:RunnablePassthrough 是 LangChain 中的一个组件,主要作用是透传输入数据...
    

    三、进阶用法(加工数据后透传)

    1. 用 assign() 新增字段

    最常用的进阶功能:基于原始输入,新增字段后透传(比如补充上下文、系统指令)。

    from langchain_core.runnables import RunnablePassthrough
    
    # 原始输入只有 question
    input_data = {"question": "LangChain 是什么?"}
    
    # 初始化 RunnablePassthrough,新增 context 字段
    passthrough = RunnablePassthrough.assign(
        # value 可以是固定值,也可以是函数(接收原始输入作为参数)
        context=lambda x: f"用户现在问的是:{x['question']},请用简洁的语言回答"
    )
    
    # 调用后,输出包含原始 question + 新增的 context
    output = passthrough.invoke(input_data)
    print(output)
    # 输出结果:
    # {'question': 'LangChain 是什么?', 'context': '用户现在问的是:LangChain 是什么?,请用简洁的语言回答'}
    

    2. 用 pick() 筛选字段

    如果原始输入字段太多,可通过 pick() 只透传需要的字段:

    from langchain_core.runnables import RunnablePassthrough
    
    # 原始输入有多个字段
    input_data = {"question": "Python 怎么学?", "user_id": 123, "time": "2026-03-15"}
    
    # 只透传 question 字段
    passthrough = RunnablePassthrough.pick(["question"])
    output = passthrough.invoke(input_data)
    
    print(output)
    # 输出结果:{'question': 'Python 怎么学?'}
    

    四、实战场景(完整示例)

    结合 assign() + LLM 实现“动态补充上下文 + 模型回答”:

    from langchain_core.runnables import RunnablePassthrough
    from langchain_core.prompts import ChatPromptTemplate
    from langchain_openai import ChatOpenAI
    
    # 1. 初始化模型
    os.environ["OPENAI_API_KEY"] = "你的 API Key"
    llm = ChatOpenAI(model="gpt-3.5-turbo")
    
    # 2. 提示词模板(使用 question 和 context 两个字段)
    prompt = ChatPromptTemplate.from_template(
        "根据上下文回答问题:\n上下文:{context}\n问题:{question}"
    )
    
    # 3. 构建链:加工数据 → 拼接提示词 → 调用模型
    chain = (
        RunnablePassthrough.assign(
            # 动态生成上下文
            context=lambda x: f"用户提问关于{x['question']},要求回答不超过50个字"
        )
        | prompt
        | llm
    )
    
    # 4. 调用链
    result = chain.invoke({"question": "RunnablePassthrough 的核心作用?"})
    print(result.content)
    # 输出示例:RunnablePassthrough 是 LangChain 组件,可透传或加工输入数据,适配下游组件格式。
    

    总结

    1. 核心作用RunnablePassthrough 是 LangChain 的“数据中转站”,核心是透传/加工输入数据,适配下游组件的格式要求;
    2. 基础用法RunnablePassthrough() 纯透传,pick() 筛选字段;
    3. 进阶用法assign() 基于原始输入新增/修改字段,是最常用的实战功能。

    这个组件本身不做复杂逻辑处理,但能让链的数据流更灵活,是构建 LangChain 复杂应用的基础工具。

    相关文章

      网友评论

          本文标题:RunnablePassthrough

          本文链接:https://www.haomeiwen.com/subject/nmibjstx.html