如何在LangChain的chain.invoke()中传递含schema的多个参数
解决LangChain链调用时传递多参数(含schema)的问题
要在调用chain.invoke()时传入schema变量,你需要调整链的结构,让它能接收包含多个参数的输入(而非仅单一问题文本),具体实现如下:
1. 调整链的输入映射逻辑
把原来硬编码的schema改为从输入字典中动态读取,同时保留question和context的处理逻辑:
from langchain_core.runnables import RunnablePassthrough chain = ( RunnablePassthrough.assign( # 基于输入的question获取并处理上下文 context=lambda x: vector_retriever_chain.invoke(x["question"]) | extract_relevant_docs ) | prompt )
RunnablePassthrough.assign()会自动保留输入中的所有键(比如schema和question),同时新增处理后的context键,完美匹配Prompt需要的三个变量。
如果偏好更显式的映射写法,也可以用字典结构定义:
chain = ( { "schema": lambda x: x["schema"], "context": lambda x: vector_retriever_chain.invoke(x["question"]) | extract_relevant_docs, "question": lambda x: x["question"] } | prompt )
2. 调用时传入包含多参数的字典
修改invoke的调用方式,传入一个包含schema和question的字典:
chain.invoke({ "schema": "你的数据库Schema具体内容", "question": "my question?" })
核心说明
- 原链中
schema直接绑定外部变量的写法,会导致它无法随调用动态变更;改为从输入字典提取后,每次调用都可以传入不同的schema值。 context的处理逻辑需要关联输入中的question,确保每次调用都能基于当前问题检索对应上下文。
内容的提问来源于stack exchange,提问作者stackword_0
相关产品推荐
相关产品推荐

