You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多输入场景下LangChain RAG链构建及Pipe符号使用报错解决

多输入RAG链构建问题解决与LangChain管道符号说明

错误原因分析

触发TypeError的核心原因有两点:

  1. rag_chain.invoke()仅接受1-2个参数(输入数据+可选配置参数),你传入了3个位置参数,不符合方法签名要求。
  2. 当前链的映射逻辑存在隐患:直接将retriever放入字典中时,它会把整个输入字典作为检索查询词,通常不符合业务需求(应基于特定字段如issues_and_opportunities执行检索)。

修正后的完整代码

1. 调整链的映射逻辑

确保检索器基于指定输入字段执行检索,同时正确传递所有输入参数:

from langchain_core.runnables import RunnablePassthrough

rag_chain = (
    {
        # 基于issues_and_opportunities字段作为查询词,获取检索上下文
        "context": RunnablePassthrough(lambda x: x["issues_and_opportunities"]) | retriever,
        # 直接透传输入中的对应字段到prompt
        "issues_and_opportunities": RunnablePassthrough(),
        "business_goals": RunnablePassthrough(),
        "description": RunnablePassthrough()
    }
    | prompt
    | llm
    | output_parser
)

2. 正确调用链

传入包含所有必填字段的字典作为输入:

# 示例输入
input_data = {
    "issues_and_opportunities": "项目当前面临的技术瓶颈与市场机会描述",
    "business_goals": "提升系统吞吐量、降低运维成本",
    "description": "这是一个基于云原生的数据分析平台项目"
}

# 调用链
result = rag_chain.invoke(input_data)
print(result)

LangChain管道符号|的正确用法

LangChain中的|是Runnable接口的重载运算符,用于将多个可执行组件(Runnable)串联成有序的执行序列(RunnableSequence):

  • 数据流向:从左到右依次传递,前一个组件的输出会作为后一个组件的输入。
  • 适用场景:快速串联prompt、LLM、输出解析器、检索器等组件,构建复杂推理链。
  • 本次示例的执行逻辑:
    1. 左侧字典组件:将输入数据映射为prompt所需的各个变量(如上下文、业务目标等)。
    2. 传递给prompt:生成格式化的聊天消息模板。
    3. 传递给llm:调用大模型生成响应内容。
    4. 传递给output_parser:将模型响应解析为指定的JSON结构。

内容的提问来源于stack exchange,提问作者Juan Cruz Alric Cortabarria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 09:45:02