多输入场景下LangChain RAG链构建及Pipe符号使用报错解决
多输入RAG链构建问题解决与LangChain管道符号说明
错误原因分析
触发TypeError的核心原因有两点:
rag_chain.invoke()仅接受1-2个参数(输入数据+可选配置参数),你传入了3个位置参数,不符合方法签名要求。- 当前链的映射逻辑存在隐患:直接将
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、输出解析器、检索器等组件,构建复杂推理链。
- 本次示例的执行逻辑:
- 左侧字典组件:将输入数据映射为prompt所需的各个变量(如上下文、业务目标等)。
- 传递给
prompt:生成格式化的聊天消息模板。 - 传递给
llm:调用大模型生成响应内容。 - 传递给
output_parser:将模型响应解析为指定的JSON结构。
内容的提问来源于stack exchange,提问作者Juan Cruz Alric Cortabarria
相关产品推荐
相关产品推荐

